@dereekb/firebase 13.0.5 → 13.0.7

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/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { increment, arrayRemove, arrayUnion, onSnapshot, getDoc, deleteDoc, setDoc, updateDoc, collection, collectionGroup, doc, writeBatch, runTransaction, getDocs, getCountFromServer, endBefore as endBefore$1, endAt as endAt$1, startAfter as startAfter$1, startAt as startAt$1, where as where$1, documentId, orderBy as orderBy$1, limitToLast as limitToLast$1, limit as limit$1, query } from 'firebase/firestore';
2
- import { cachedGetter, mergeModifiers, asArray, filterUndefinedValues, objectHasNoKeys, filterFalsyAndEmptyValues, build, wrapUseAsyncFunction, useAsync, runAsyncTasksForValues, filterMaybeArrayValues, performMakeLoop, makeWithFactory, toModelFieldConversions, makeModelMapFunctions, modifyModelMapFunctions, assignValuesToPOJOFunction, KeyValueTypleValueFilter, asObjectCopyFactory, transformStringFunctionConfig, transformStringFunction, passThrough, filterUniqueTransform, unique, transformNumberFunction, sortValuesFunctionOrMapIdentityWithSortRef, toModelMapFunctions, isEqualToValueDecisionFunction, filterFromPOJOFunction, mapObjectMap, copyObject, modelFieldMapFunctions, filterNullAndUndefinedValues, isDate, bitwiseSetDencoder, sortAscendingIndexNumberRefFunction, latLngStringFunction, DEFAULT_LAT_LNG_STRING_VALUE, mapObjectMapFunction, filterEmptyArrayValues, filterUniqueFunction, isMapIdentityFunction, chainMapSameFunctions, unixDateTimeSecondsNumberFromDate, dateFromDateOrTimeSecondsNumber, MAP_IDENTITY, pushItemOrArrayItemsIntoArray, separateValues, convertToArray, UTF_PRIVATE_USAGE_AREA_START, UTF_8_START_CHARACTER, mergeArraysIntoArray, lastValue, flattenArrayOrValueArray, allowValueOnceFilter, asGetter, getValueFromGetter, mapIdentityFunction, performTasksFromFactoryInParallelFunction, performAsyncTasks, batch, flattenArray, calculateExpirationDate, groupValues, forEachInIterable, arrayToObject, takeFront, stringContains, isOddNumber, objectToMap, ServerErrorResponse, toReadableError, capitalizeFirstLetter, lowercaseFirstLetter, toRelativeSlashPathStartType, mappedUseFunction, iterableToArray, setContainsAllValues, usePromise, slashPathFactory, errorMessageContainsString, bitwiseObjectDencoder, UNSET_INDEX_NUMBER, mergeObjectsFunction, mergeObjects, forEachKeyValue, updateMaybeValue, ModelRelationUtility, filterKeysOnPOJOFunction, areEqualPOJOValuesUsingPojoFilter, filterOnlyUndefinedValues, makeModelMap, isThrottled, MS_IN_HOUR, multiValueMapBuilder, mergeSlashPaths, slashPathDetails, toAbsoluteSlashPathStartType, SLASH_PATH_FILE_TYPE_SEPARATOR, slashPathPathMatcher, decisionFunction, slashPathSubPathMatcher } from '@dereekb/util';
2
+ import { cachedGetter, mergeModifiers, asArray, filterUndefinedValues, objectHasNoKeys, filterFalsyAndEmptyValues, build, wrapUseAsyncFunction, useAsync, runAsyncTasksForValues, filterMaybeArrayValues, performMakeLoop, makeWithFactory, MAP_IDENTITY, toModelFieldConversions, makeModelMapFunctions, modifyModelMapFunctions, assignValuesToPOJOFunction, KeyValueTypleValueFilter, asObjectCopyFactory, transformStringFunctionConfig, transformStringFunction, passThrough, filterUniqueTransform, unique, transformNumberFunction, sortValuesFunctionOrMapIdentityWithSortRef, toModelMapFunctions, isEqualToValueDecisionFunction, filterFromPOJOFunction, mapObjectMap, copyObject, modelFieldMapFunctions, filterNullAndUndefinedValues, isDate, bitwiseSetDencoder, sortAscendingIndexNumberRefFunction, latLngStringFunction, DEFAULT_LAT_LNG_STRING_VALUE, mapObjectMapFunction, filterEmptyArrayValues, filterUniqueFunction, isMapIdentityFunction, chainMapSameFunctions, unixDateTimeSecondsNumberFromDate, dateFromDateOrTimeSecondsNumber, pushItemOrArrayItemsIntoArray, separateValues, convertToArray, UTF_PRIVATE_USAGE_AREA_START, UTF_8_START_CHARACTER, mergeArraysIntoArray, lastValue, flattenArrayOrValueArray, allowValueOnceFilter, asGetter, getValueFromGetter, mapIdentityFunction, performTasksFromFactoryInParallelFunction, performAsyncTasks, batch, flattenArray, calculateExpirationDate, groupValues, forEachInIterable, arrayToObject, takeFront, stringContains, isOddNumber, objectToMap, ServerErrorResponse, toReadableError, capitalizeFirstLetter, lowercaseFirstLetter, toRelativeSlashPathStartType, mappedUseFunction, iterableToArray, setContainsAllValues, usePromise, slashPathFactory, errorMessageContainsString, bitwiseObjectDencoder, UNSET_INDEX_NUMBER, mergeObjectsFunction, mergeObjects, forEachKeyValue, updateMaybeValue, ModelRelationUtility, filterKeysOnPOJOFunction, areEqualPOJOValuesUsingPojoFilter, filterOnlyUndefinedValues, makeModelMap, isThrottled, MS_IN_HOUR, multiValueMapBuilder, mergeSlashPaths, slashPathDetails, toAbsoluteSlashPathStartType, SLASH_PATH_FILE_TYPE_SEPARATOR, slashPathPathMatcher, decisionFunction, slashPathSubPathMatcher } from '@dereekb/util';
3
3
  import { filterMaybe, lazyFrom, itemAccumulator, ItemPageIterator, mappedPageItemIteration } from '@dereekb/rxjs';
4
- import { map, from, shareReplay, combineLatest, of, exhaustMap, Observable, switchMap, timer, skip } from 'rxjs';
4
+ import { map, from, combineLatest, of, exhaustMap, Observable, switchMap, timer, skip, shareReplay } from 'rxjs';
5
5
  import { UNKNOWN_WEBSITE_LINK_TYPE, encodeWebsiteFileLinkToWebsiteLinkEncodedData, decodeWebsiteLinkEncodedDataToWebsiteFileLink, AbstractModelPermissionService, grantedRoleMapReader, noAccessRoleMap, fullAccessRoleMap, IsE164PhoneNumber } from '@dereekb/model';
6
6
  import { toISODateString, formatToISO8601DateString, toJsDate, isSameDate, dateRange, sortByDateFunction, yearWeekCode, UNKNOWN_YEAR_WEEK_CODE } from '@dereekb/date';
7
7
  import { httpsCallable } from 'firebase/functions';
@@ -660,31 +660,33 @@ function extendFirestoreCollectionWithSingleDocumentAccessor(x, singleItemIdenti
660
660
  }
661
661
 
662
662
  /**
663
- * Creates an array of new FirestoreDocument instances without creating them in Firestore.
663
+ * Creates an array of new {@link FirestoreDocument} instances without persisting them to Firestore.
664
664
  *
665
- * @template T - The document data type
666
- * @template D - The FirestoreDocument implementation type
667
- * @param documentAccessor - The document accessor to use for creating document instances
668
- * @param count - The number of document instances to create
669
- * @returns An array of new document instances
665
+ * Each document is allocated a unique auto-generated ID via {@link FirestoreDocumentAccessor.newDocument},
666
+ * but no data is written to the database. Useful for preparing document references in bulk before
667
+ * deciding what data to write.
668
+ *
669
+ * @param documentAccessor - Accessor that provides the `newDocument()` factory method
670
+ * @param count - Number of document instances to create
671
+ * @returns Array of `count` new document instances, each with a unique auto-generated ID
670
672
  */
671
673
  function newDocuments(documentAccessor, count) {
672
674
  return makeWithFactory(() => documentAccessor.newDocument(), count);
673
675
  }
674
676
  /**
675
- * Creates multiple documents in Firestore and returns the document instances.
677
+ * Creates and optionally persists multiple Firestore documents in sequence.
676
678
  *
677
- * For each document, this function:
678
- * 1. Creates a new document instance using the specified or default factory
679
- * 2. Calls the init function with the document instance
680
- * 3. If init returns data, creates the document in Firestore
681
- * 4. Returns all document instances, whether they were created in Firestore or not
679
+ * Uses {@link performMakeLoop} to iterate `count` times. For each iteration:
680
+ * 1. A new document instance is created (via `make.newDocument` or the default factory)
681
+ * 2. `make.init(i, document)` is awaited to produce initial data
682
+ * 3. If init returns non-nullish data, `document.accessor.create(data)` persists it
683
+ * 4. The document instance is collected regardless of whether it was persisted
682
684
  *
683
- * @template T - The document data type
684
- * @template D - The FirestoreDocument implementation type
685
- * @param documentAccessor - The document accessor to use for creating document instances
686
- * @param make - Parameters for document creation and initialization
687
- * @returns A promise that resolves to an array of document instances
685
+ * Documents are created sequentially (not in parallel) to allow index-dependent logic.
686
+ *
687
+ * @param documentAccessor - Accessor providing the document factory and collection context
688
+ * @param make - Configuration controlling count, factory, and initialization
689
+ * @returns Promise resolving to all created document instances (length === `make.count`)
688
690
  */
689
691
  function makeDocuments(documentAccessor, make) {
690
692
  const newDocumentFn = make.newDocument ?? (() => documentAccessor.newDocument());
@@ -701,65 +703,52 @@ function makeDocuments(documentAccessor, make) {
701
703
  });
702
704
  }
703
705
  /**
704
- * Retrieves DocumentSnapshots for an array of documents in parallel.
706
+ * Fetches {@link DocumentSnapshot}s for multiple documents in parallel using {@link runAsyncTasksForValues}.
705
707
  *
706
- * This is useful for fetching the current state of multiple documents at once.
708
+ * Each document's `accessor.get()` is called concurrently. The returned array preserves
709
+ * the same ordering as the input `documents` array.
707
710
  *
708
- * @template D - The FirestoreDocument implementation type
709
- * @param documents - Array of document instances to get snapshots for
710
- * @returns Promise that resolves to an array of DocumentSnapshots in the same order as the input documents
711
+ * @param documents - Documents to fetch snapshots for
712
+ * @returns Snapshots in the same order as the input array
711
713
  */
712
714
  function getDocumentSnapshots(documents) {
713
715
  return runAsyncTasksForValues(documents, (x) => x.accessor.get());
714
716
  }
715
717
  /**
716
- * Creates a document-snapshot pair from a document instance.
717
- *
718
- * Fetches the current snapshot of the document and returns both the original
719
- * document instance and the snapshot together.
718
+ * Fetches the current snapshot of a single document and pairs it with the document instance.
720
719
  *
721
- * @template D - The FirestoreDocument implementation type
722
- * @param document - The document instance to get a snapshot for
723
- * @returns Promise that resolves to a document-snapshot pair
720
+ * @param document - The document to fetch
721
+ * @returns A pair containing the document and its snapshot
724
722
  */
725
723
  function getDocumentSnapshotPair(document) {
726
724
  return document.accessor.get().then((snapshot) => ({ document, snapshot }));
727
725
  }
728
726
  /**
729
- * Creates document-snapshot pairs for an array of documents in parallel.
727
+ * Fetches snapshots for multiple documents in parallel and pairs each with its document instance.
730
728
  *
731
- * Fetches the current snapshot of each document and returns pairs containing both
732
- * the original document instances and their snapshots.
733
- *
734
- * @template D - The FirestoreDocument implementation type
735
- * @param documents - Array of document instances to get snapshots for
736
- * @returns Promise that resolves to an array of document-snapshot pairs in the same order as the input documents
729
+ * @param documents - Documents to fetch
730
+ * @returns Pairs in the same order as the input array
737
731
  */
738
732
  function getDocumentSnapshotPairs(documents) {
739
733
  return runAsyncTasksForValues(documents, getDocumentSnapshotPair);
740
734
  }
741
735
  /**
742
- * Creates a document-snapshot-data triplet from a document instance.
743
- *
744
- * Fetches the current snapshot of the document, extracts its data with ID and key fields,
745
- * and returns all three together in a single object.
736
+ * Fetches a document's snapshot, extracts its data with `id`/`key` fields, and returns all three as a triplet.
746
737
  *
747
- * @template D - The FirestoreDocument implementation type
748
- * @param document - The document instance to get data for
749
- * @returns Promise that resolves to a document-snapshot-data triplet
738
+ * @param document - The document to fetch
739
+ * @returns A triplet of document, snapshot, and data (data may be `undefined` if the document doesn't exist)
750
740
  */
751
741
  function getDocumentSnapshotDataPair(document) {
752
742
  return document.accessor.get().then((snapshot) => ({ document, snapshot, data: documentDataWithIdAndKey(snapshot) }));
753
743
  }
754
744
  /**
755
- * Creates document-snapshot-data triplets for an array of documents in parallel.
745
+ * Fetches snapshot-data triplets for multiple documents in parallel.
756
746
  *
757
- * Fetches the current snapshot of each document, extracts its data with ID and key fields,
758
- * and returns triplets containing all three components for each document.
747
+ * Processes up to 200 documents concurrently via {@link runAsyncTasksForValues}.
748
+ * The returned array preserves the same ordering as the input.
759
749
  *
760
- * @template D - The FirestoreDocument implementation type
761
- * @param documents - Array of document instances to get data for
762
- * @returns Promise that resolves to an array of document-snapshot-data triplets in the same order as the input documents
750
+ * @param documents - Documents to fetch
751
+ * @returns Triplets in the same order as the input array
763
752
  */
764
753
  function getDocumentSnapshotDataPairs(documents) {
765
754
  return runAsyncTasksForValues(documents, getDocumentSnapshotDataPair, {
@@ -767,18 +756,27 @@ function getDocumentSnapshotDataPairs(documents) {
767
756
  });
768
757
  }
769
758
  /**
770
- * Creates document-snapshot-data triplets for an array of documents and filters out those without data.
759
+ * Fetches snapshot-data triplets for multiple documents and filters out those that don't exist in Firestore.
771
760
  *
772
- * This is a convenience function that fetches data for all documents and then returns
773
- * only the triplets for documents that actually exist in Firestore.
761
+ * Convenience wrapper around {@link getDocumentSnapshotDataPairs} that removes entries where `data` is nullish,
762
+ * returning only {@link FirestoreDocumentSnapshotDataPairWithData} results.
774
763
  *
775
- * @template D - The FirestoreDocument implementation type
776
- * @param documents - Array of document instances to get data for
777
- * @returns Promise that resolves to an array of document-snapshot-data triplets for existing documents only
764
+ * @param documents - Documents to fetch
765
+ * @returns Triplets for documents that exist, in their original relative order
778
766
  */
779
767
  function getDocumentSnapshotDataPairsWithData(documents) {
780
768
  return getDocumentSnapshotDataPairs(documents).then((x) => x.filter((y) => !!y.data));
781
769
  }
770
+ /**
771
+ * Fetches raw snapshot data tuples for multiple documents in parallel.
772
+ *
773
+ * Unlike {@link getDocumentSnapshotDataPairs}, this returns a lightweight `[document, data]` tuple
774
+ * and does not inject `id`/`key` fields onto the data. The `data` value is the raw result of
775
+ * `snapshot.data()` and may be `undefined` for non-existent documents.
776
+ *
777
+ * @param documents - Documents to fetch
778
+ * @returns Tuples in the same order as the input array
779
+ */
782
780
  function getDocumentSnapshotDataTuples(documents) {
783
781
  return runAsyncTasksForValues(documents, (document) => document.accessor.get().then((snapshot) => [document, snapshot.data()]));
784
782
  }
@@ -792,33 +790,109 @@ function getDataFromDocumentSnapshots(snapshots, withId = true) {
792
790
  const mapFn = documentDataFunction(withId);
793
791
  return filterMaybeArrayValues(snapshots.map(mapFn));
794
792
  }
793
+ /**
794
+ * Creates {@link FirestoreDocument} instances for all documents in a {@link QuerySnapshot}.
795
+ *
796
+ * Maps each document in `snapshots.docs` to a loaded document via `accessor.loadDocument(ref)`.
797
+ * No additional data fetching occurs; the documents are loaded from their existing references.
798
+ *
799
+ * @param accessor - Accessor to load documents with
800
+ * @param snapshots - Query snapshot containing the document references
801
+ * @returns Document instances in the same order as the query results
802
+ */
795
803
  function loadDocumentsForSnapshots(accessor, snapshots) {
796
804
  return snapshots.docs.map((x) => accessor.loadDocument(x.ref));
797
805
  }
806
+ /**
807
+ * Extracts {@link DocumentReference}s from arbitrary values and loads them as {@link FirestoreDocument} instances.
808
+ *
809
+ * Convenience function that maps values through `getRef` then delegates to {@link loadDocumentsForDocumentReferences}.
810
+ *
811
+ * @param accessor - Accessor to load documents with
812
+ * @param values - Source values to extract references from
813
+ * @param getRef - Extracts a document reference from each value
814
+ * @returns Document instances in the same order as the input values
815
+ */
798
816
  function loadDocumentsForDocumentReferencesFromValues(accessor, values, getRef) {
799
817
  return loadDocumentsForDocumentReferences(accessor, values.map(getRef));
800
818
  }
819
+ /**
820
+ * Alias for {@link loadDocumentsForDocumentReferencesFromValues}.
821
+ */
801
822
  const loadDocumentsForValues = loadDocumentsForDocumentReferencesFromValues;
823
+ /**
824
+ * Loads {@link FirestoreDocument} instances from an array of {@link DocumentReference}s.
825
+ *
826
+ * Each reference is passed to `accessor.loadDocument()` to create a document wrapper.
827
+ * No network calls are made; this only creates in-memory document instances bound to the given references.
828
+ *
829
+ * @param accessor - Accessor to load documents with
830
+ * @param refs - Document references to load
831
+ * @returns Document instances in the same order as the input references
832
+ */
802
833
  function loadDocumentsForDocumentReferences(accessor, refs) {
803
834
  return refs.map((x) => accessor.loadDocument(x));
804
835
  }
836
+ /**
837
+ * Extracts {@link FirestoreModelKey}s from arbitrary values and loads them as {@link FirestoreDocument} instances.
838
+ *
839
+ * Convenience function that maps values through `getKey` then delegates to {@link loadDocumentsForKeys}.
840
+ *
841
+ * @param accessor - Accessor to load documents with
842
+ * @param values - Source values to extract keys from
843
+ * @param getKey - Extracts a model key (full Firestore path) from each value
844
+ * @returns Document instances in the same order as the input values
845
+ */
805
846
  function loadDocumentsForKeysFromValues(accessor, values, getKey) {
806
847
  return loadDocumentsForKeys(accessor, values.map(getKey));
807
848
  }
849
+ /**
850
+ * Loads {@link FirestoreDocument} instances from an array of full Firestore document paths (keys).
851
+ *
852
+ * Each key is passed to `accessor.loadDocumentForKey()`. No network calls are made.
853
+ *
854
+ * @param accessor - Accessor to load documents with
855
+ * @param keys - Full Firestore document paths (e.g. `'users/abc123'`)
856
+ * @returns Document instances in the same order as the input keys
857
+ */
808
858
  function loadDocumentsForKeys(accessor, keys) {
809
859
  return keys.map((x) => accessor.loadDocumentForKey(x));
810
860
  }
861
+ /**
862
+ * Extracts {@link FirestoreModelId}s from arbitrary values and loads them as {@link FirestoreDocument} instances.
863
+ *
864
+ * Convenience function that maps values through `getId` then delegates to {@link loadDocumentsForIds}.
865
+ * Requires a full {@link FirestoreDocumentAccessor} (not limited) because loading by ID requires collection context.
866
+ *
867
+ * @param accessor - Accessor to load documents with (must have collection context for ID resolution)
868
+ * @param values - Source values to extract IDs from
869
+ * @param getId - Extracts a model ID from each value
870
+ * @returns Document instances in the same order as the input values
871
+ */
811
872
  function loadDocumentsForIdsFromValues(accessor, values, getId) {
812
873
  return loadDocumentsForIds(accessor, values.map(getId));
813
874
  }
875
+ /**
876
+ * Loads {@link FirestoreDocument} instances from an array of document IDs relative to the accessor's collection.
877
+ *
878
+ * Each ID is passed to `accessor.loadDocumentForId()`. Requires a full {@link FirestoreDocumentAccessor}
879
+ * because ID-based loading needs the collection reference to resolve the full path. No network calls are made.
880
+ *
881
+ * @param accessor - Accessor to load documents with (must have collection context)
882
+ * @param ids - Document IDs within the accessor's collection
883
+ * @returns Document instances in the same order as the input IDs
884
+ */
814
885
  function loadDocumentsForIds(accessor, ids) {
815
886
  return ids.map((x) => accessor.loadDocumentForId(x));
816
887
  }
817
888
  /**
818
- * Used to make a FirestoreDocumentLoader.
889
+ * Creates a {@link FirestoreDocumentLoader} from a {@link LimitedFirestoreDocumentAccessorContextExtension}.
819
890
  *
820
- * @param accessorContext
821
- * @returns
891
+ * The returned loader resolves the appropriate accessor based on whether a transaction is provided,
892
+ * then delegates to {@link loadDocumentsForDocumentReferences}.
893
+ *
894
+ * @param accessorContext - Context that provides accessors for both default and transactional use
895
+ * @returns A loader function that converts document references to document instances
822
896
  */
823
897
  function firestoreDocumentLoader(accessorContext) {
824
898
  return (references, transaction) => {
@@ -827,10 +901,16 @@ function firestoreDocumentLoader(accessorContext) {
827
901
  };
828
902
  }
829
903
  /**
830
- * Used to make a FirestoreDocumentSnapshotPairsLoader.
904
+ * Creates a {@link FirestoreDocumentSnapshotPairsLoader} from a {@link LimitedFirestoreDocumentAccessorContextExtension}.
831
905
  *
832
- * @param accessorContext
833
- * @returns
906
+ * The returned loader resolves the appropriate accessor based on whether a transaction is provided,
907
+ * then maps each snapshot to a {@link FirestoreDocumentSnapshotDataPair} using {@link firestoreDocumentSnapshotPairsLoaderInstance}.
908
+ *
909
+ * Also satisfies the {@link FirestoreQueryDocumentSnapshotPairsLoader} type since the implementation
910
+ * handles both {@link DocumentSnapshot} and {@link QueryDocumentSnapshot} inputs.
911
+ *
912
+ * @param accessorContext - Context that provides accessors for both default and transactional use
913
+ * @returns A loader function that converts snapshots to document-snapshot-data pairs
834
914
  */
835
915
  function firestoreDocumentSnapshotPairsLoader(accessorContext) {
836
916
  return (snapshots, transaction) => {
@@ -840,10 +920,15 @@ function firestoreDocumentSnapshotPairsLoader(accessorContext) {
840
920
  };
841
921
  }
842
922
  /**
843
- * Used to make a FirestoreDocumentSnapshotPairsLoader.
923
+ * Creates a {@link FirestoreDocumentSnapshotPairsLoaderInstance} bound to a specific accessor.
844
924
  *
845
- * @param accessorContext
846
- * @returns
925
+ * The returned function converts a snapshot into a {@link FirestoreDocumentSnapshotDataPair} by:
926
+ * 1. Extracting data with `id`/`key` fields via {@link documentDataWithIdAndKey}
927
+ * 2. Loading the document from the snapshot's reference via `accessor.loadDocument()`
928
+ * 3. Combining all three into a single pair object
929
+ *
930
+ * @param accessor - The accessor to bind for document loading
931
+ * @returns A reusable function that converts snapshots to pairs using the bound accessor
847
932
  */
848
933
  function firestoreDocumentSnapshotPairsLoaderInstance(accessor) {
849
934
  const fn = ((snapshot) => {
@@ -860,10 +945,10 @@ function firestoreDocumentSnapshotPairsLoaderInstance(accessor) {
860
945
  return fn;
861
946
  }
862
947
  /**
863
- * Used to make a FirestoreQueryDocumentSnapshotPairsLoader.
948
+ * Alias for {@link firestoreDocumentSnapshotPairsLoader}, typed specifically as a {@link FirestoreQueryDocumentSnapshotPairsLoader}.
864
949
  *
865
- * @param accessorContext
866
- * @returns
950
+ * Use this when you know all input snapshots are from a query and want the stronger return type
951
+ * that guarantees `data` is non-nullish.
867
952
  */
868
953
  const firestoreQueryDocumentSnapshotPairsLoader = firestoreDocumentSnapshotPairsLoader;
869
954
  function documentData(snapshot, withId = false) {
@@ -885,11 +970,14 @@ function documentDataWithIdAndKey(snapshot) {
885
970
  return data;
886
971
  }
887
972
  /**
888
- * Sets the id and key values from the snapshot onto the input data.
973
+ * Mutates the input data object to include `id` and `key` fields from a {@link DocumentSnapshot}.
889
974
  *
890
- * @param data
891
- * @param snapshot
892
- * @returns
975
+ * Sets `data.id` to `snapshot.id` and `data.key` to `snapshot.ref.path`. The data object
976
+ * is modified in-place and also returned for chaining convenience.
977
+ *
978
+ * @param data - The data object to augment (mutated in-place)
979
+ * @param snapshot - Source of the `id` and `key` values
980
+ * @returns The same data object, now typed as {@link DocumentDataWithIdAndKey}
893
981
  */
894
982
  function setIdAndKeyFromSnapshotOnDocumentData(data, snapshot) {
895
983
  const target = data;
@@ -898,11 +986,15 @@ function setIdAndKeyFromSnapshotOnDocumentData(data, snapshot) {
898
986
  return target;
899
987
  }
900
988
  /**
901
- * Sets the id and key values from the snapshot onto the input data.
989
+ * Mutates the input data object to include `id` and `key` fields from a model reference.
902
990
  *
903
- * @param data
904
- * @param snapshot
905
- * @returns
991
+ * Similar to {@link setIdAndKeyFromSnapshotOnDocumentData}, but sources the values from a
992
+ * {@link FirestoreModelKeyRef} & {@link FirestoreModelIdRef} instead of a snapshot.
993
+ * The data object is modified in-place and also returned for chaining convenience.
994
+ *
995
+ * @param data - The data object to augment (mutated in-place)
996
+ * @param modelRef - Source of the `id` and `key` values
997
+ * @returns The same data object, now typed as {@link DocumentDataWithIdAndKey}
906
998
  */
907
999
  function setIdAndKeyFromKeyIdRefOnDocumentData(data, modelRef) {
908
1000
  const target = data;
@@ -911,47 +1003,156 @@ function setIdAndKeyFromKeyIdRefOnDocumentData(data, modelRef) {
911
1003
  return target;
912
1004
  }
913
1005
  /**
914
- * MappedUseAsyncFunction to load a snapshot from the input document and use it.
1006
+ * Fetches a document's snapshot and passes it to a `use` callback, following the {@link UseAsync} pattern.
915
1007
  *
916
- * @param document
917
- * @param use
918
- * @param defaultValue
919
- * @returns
1008
+ * If `document` is nullish, the `use` callback is not invoked and `defaultValue` is returned instead.
1009
+ * If `document` exists but the snapshot is nullish (shouldn't happen in practice), `defaultValue` is also used.
1010
+ *
1011
+ * @param document - The document to fetch, or nullish to skip
1012
+ * @param use - Callback that receives the fetched snapshot and returns a result
1013
+ * @param defaultValue - Fallback value when `document` is nullish or the snapshot is unavailable
1014
+ * @returns The result of `use`, or the default value
920
1015
  */
921
1016
  async function useDocumentSnapshot(document, use, defaultValue) {
922
1017
  const snapshot = await document?.accessor.get();
923
1018
  return useAsync(snapshot, use, defaultValue);
924
1019
  }
925
1020
  /**
926
- * MappedUseAsyncFunction to load snapshot data from the input document and use it.
1021
+ * Fetches a document's snapshot data (via `snapshot.data()`) and passes it to a `use` callback.
1022
+ *
1023
+ * Wraps {@link useDocumentSnapshot} with a mapping step that extracts raw data from the snapshot.
1024
+ * If the document doesn't exist (data is `undefined`), the `use` callback is not invoked
1025
+ * and `defaultValue` is returned instead.
1026
+ *
1027
+ * @param document - The document to fetch, or nullish to skip
1028
+ * @param use - Callback that receives the snapshot data and returns a result
1029
+ * @param defaultValue - Fallback value when the document is nullish or doesn't exist
1030
+ * @returns The result of `use`, or the default value
927
1031
  */
928
1032
  const useDocumentSnapshotData = wrapUseAsyncFunction(useDocumentSnapshot, (x) => x.data());
929
1033
  // MARK: Key Accessors
1034
+ /**
1035
+ * Extracts the document ID ({@link FirestoreModelId}) from a {@link FirestoreDocument}.
1036
+ *
1037
+ * Useful as a mapper function, e.g. `documents.map(firestoreModelIdFromDocument)`.
1038
+ *
1039
+ * @param document - The document to extract the ID from
1040
+ * @returns The document's ID (the last segment of its Firestore path)
1041
+ */
930
1042
  function firestoreModelIdFromDocument(document) {
931
1043
  return document.id;
932
1044
  }
1045
+ /**
1046
+ * Extracts document IDs from an array of {@link FirestoreDocument}s.
1047
+ *
1048
+ * @param documents - Documents to extract IDs from
1049
+ * @returns Array of document IDs in the same order as the input
1050
+ */
933
1051
  function firestoreModelIdsFromDocuments(documents) {
934
1052
  return documents.map(firestoreModelIdFromDocument);
935
1053
  }
1054
+ /**
1055
+ * Extracts the full Firestore path ({@link FirestoreModelKey}) from a {@link FirestoreDocument}.
1056
+ *
1057
+ * Useful as a mapper function, e.g. `documents.map(firestoreModelKeyFromDocument)`.
1058
+ *
1059
+ * @param document - The document to extract the key from
1060
+ * @returns The document's full Firestore path (e.g. `'users/abc123'`)
1061
+ */
936
1062
  function firestoreModelKeyFromDocument(document) {
937
1063
  return document.key;
938
1064
  }
1065
+ /**
1066
+ * Extracts full Firestore paths from an array of {@link FirestoreDocument}s.
1067
+ *
1068
+ * @param documents - Documents to extract keys from
1069
+ * @returns Array of full Firestore paths in the same order as the input
1070
+ */
939
1071
  function firestoreModelKeysFromDocuments(documents) {
940
1072
  return documents.map(firestoreModelKeyFromDocument);
941
1073
  }
1074
+ /**
1075
+ * Extracts the {@link DocumentReference} from a {@link FirestoreDocument}.
1076
+ *
1077
+ * Useful as a mapper function, e.g. `documents.map(documentReferenceFromDocument)`.
1078
+ *
1079
+ * @param document - The document to extract the reference from
1080
+ * @returns The underlying Firestore document reference
1081
+ */
942
1082
  function documentReferenceFromDocument(document) {
943
1083
  return document.documentRef;
944
1084
  }
1085
+ /**
1086
+ * Extracts {@link DocumentReference}s from an array of {@link FirestoreDocument}s.
1087
+ *
1088
+ * @param documents - Documents to extract references from
1089
+ * @returns Array of document references in the same order as the input
1090
+ */
945
1091
  function documentReferencesFromDocuments(documents) {
946
1092
  return documents.map(documentReferenceFromDocument);
947
1093
  }
1094
+ /**
1095
+ * Creates a {@link LimitedFirestoreDocumentAccessorSnapshotCache} that wraps the given accessor
1096
+ * with an in-memory {@link Map} cache so that repeated loads for the same key return the cached
1097
+ * promise instead of re-reading from Firestore.
1098
+ *
1099
+ * The cache stores the promise itself (not the resolved value), which means concurrent requests
1100
+ * for the same key that arrive before the first read completes will also be deduplicated.
1101
+ *
1102
+ * The cache lives for the lifetime of the returned object and is never invalidated, so this is
1103
+ * best suited for short-lived scopes (e.g. a single request or batch operation) where stale reads
1104
+ * are acceptable.
1105
+ *
1106
+ * @param accessor - The accessor to wrap with caching behavior
1107
+ * @returns A {@link LimitedFirestoreDocumentAccessorSnapshotCache} backed by the given accessor
1108
+ *
1109
+ * @example
1110
+ * ```typescript
1111
+ * const cache = limitedFirestoreDocumentAccessorSnapshotCache(accessor);
1112
+ *
1113
+ * // First call reads from Firestore; second call returns cached result
1114
+ * const pair = await cache.getDocumentSnapshotDataPairForKey('users/abc123');
1115
+ * const samePair = await cache.getDocumentSnapshotDataPairForKey('users/abc123');
1116
+ *
1117
+ * // Batch fetch with automatic deduplication
1118
+ * const pairs = await cache.getDocumentSnapshotDataPairsWithDataForKeys(['users/abc', 'users/def']);
1119
+ *
1120
+ * // Access the underlying accessor directly
1121
+ * const doc = cache.accessor.loadDocumentForKey('users/xyz');
1122
+ * ```
1123
+ */
1124
+ function limitedFirestoreDocumentAccessorSnapshotCache(accessor) {
1125
+ const cache = new Map();
1126
+ function getDocumentSnapshotDataPairForKey(key) {
1127
+ let cached = cache.get(key);
1128
+ if (!cached) {
1129
+ const document = accessor.loadDocumentForKey(key);
1130
+ cached = getDocumentSnapshotDataPair(document);
1131
+ cache.set(key, cached);
1132
+ }
1133
+ return cached;
1134
+ }
1135
+ async function getDocumentSnapshotDataPairsForKeys(keys) {
1136
+ return Promise.all(keys.map((key) => getDocumentSnapshotDataPairForKey(key)));
1137
+ }
1138
+ async function getDocumentSnapshotDataPairsWithDataForKeys(keys) {
1139
+ const pairs = await getDocumentSnapshotDataPairsForKeys(keys);
1140
+ return filterMaybeArrayValues(pairs.map((pair) => (pair.data != null ? pair : undefined)));
1141
+ }
1142
+ return {
1143
+ accessor,
1144
+ getDocumentSnapshotDataPairForKey,
1145
+ getDocumentSnapshotDataPairsForKeys,
1146
+ getDocumentSnapshotDataPairsWithDataForKeys
1147
+ };
1148
+ }
948
1149
 
949
1150
  /**
950
1151
  * Creates an Observable that emits arrays of document snapshots for multiple documents.
951
1152
  *
952
1153
  * This function streams the latest snapshots for each document in the provided array.
953
1154
  * Each time any document in the array changes, a new array containing the latest snapshots
954
- * of all documents is emitted. Results are shared with multiple subscribers through shareReplay.
1155
+ * of all documents is emitted.
955
1156
  *
956
1157
  * If the input array is empty, an Observable that emits an empty array is returned.
957
1158
  *
@@ -960,7 +1161,25 @@ function documentReferencesFromDocuments(documents) {
960
1161
  * @returns Observable that emits arrays of DocumentSnapshots whenever any document changes
961
1162
  */
962
1163
  function latestSnapshotsFromDocuments(documents) {
963
- return documents.length ? combineLatest(documents.map((x) => x.accessor.stream())).pipe(shareReplay(1)) : of([]);
1164
+ return mapLatestSnapshotsFromDocuments(documents, map(MAP_IDENTITY));
1165
+ }
1166
+ /**
1167
+ * Creates an Observable that streams and transforms snapshots for multiple documents using `combineLatest`.
1168
+ *
1169
+ * Pipes each document's `accessor.stream()` through the provided `operator` before combining.
1170
+ * This ensures the transformation runs per-document when only one document changes, rather than
1171
+ * re-mapping all snapshots on every emission.
1172
+ *
1173
+ * {@link latestSnapshotsFromDocuments} delegates to this function with an identity operator.
1174
+ *
1175
+ * Returns `of([])` for an empty input array.
1176
+ *
1177
+ * @param documents - Documents to stream from
1178
+ * @param operator - RxJS operator applied to each document's snapshot stream individually
1179
+ * @returns Observable emitting an array of transformed values whenever any document changes
1180
+ */
1181
+ function mapLatestSnapshotsFromDocuments(documents, operator) {
1182
+ return documents.length ? combineLatest(documents.map((x) => x.accessor.stream().pipe(operator))) : of([]);
964
1183
  }
965
1184
  /**
966
1185
  * Creates an Observable that emits arrays of document data for multiple documents.
@@ -968,7 +1187,7 @@ function latestSnapshotsFromDocuments(documents) {
968
1187
  * This function streams the latest data for each document in the provided array.
969
1188
  * Each time any document in the array changes, a new array containing the latest data
970
1189
  * of all documents is emitted. Document data includes both the document content and
971
- * metadata like document ID and key. Results are shared with multiple subscribers.
1190
+ * metadata like document ID and key.
972
1191
  *
973
1192
  * Non-existent documents are filtered out of the results automatically.
974
1193
  *
@@ -976,8 +1195,8 @@ function latestSnapshotsFromDocuments(documents) {
976
1195
  * @param documents - Array of document instances to stream data for
977
1196
  * @returns Observable that emits arrays of document data whenever any document changes
978
1197
  */
979
- function latestDataFromDocuments(documents) {
980
- return latestSnapshotsFromDocuments(documents).pipe(dataFromDocumentSnapshots(), shareReplay(1));
1198
+ function streamDocumentSnapshotsData(documents) {
1199
+ return latestSnapshotsFromDocuments(documents).pipe(dataFromDocumentSnapshots());
981
1200
  }
982
1201
  /**
983
1202
  * Creates an RxJS operator that transforms arrays of DocumentSnapshots into arrays of document data.
@@ -992,6 +1211,53 @@ function latestDataFromDocuments(documents) {
992
1211
  function dataFromDocumentSnapshots() {
993
1212
  return map((x) => getDataFromDocumentSnapshots(x));
994
1213
  }
1214
+ // MARK: Streaming Document Snapshot Pairs
1215
+ /**
1216
+ * Streams {@link FirestoreDocumentSnapshotDataPair}s for multiple documents using `combineLatest`.
1217
+ *
1218
+ * Each document's `accessor.stream()` is individually piped to produce a `{ document, snapshot, data }` triplet,
1219
+ * then all streams are combined via `combineLatest`. This ensures the mapping only runs for the document
1220
+ * that actually changed. The `data` field has `id` and `key` fields injected via {@link documentDataWithIdAndKey},
1221
+ * and will be `undefined` for documents that don't exist in Firestore.
1222
+ *
1223
+ * Returns `of([])` for an empty input array.
1224
+ *
1225
+ * This is the streaming equivalent of {@link import('./document.utility').getDocumentSnapshotDataPairs}.
1226
+ *
1227
+ * @param documents - Documents to stream snapshot-data pairs for
1228
+ * @returns Observable emitting snapshot-data pairs whenever any document changes
1229
+ */
1230
+ function streamDocumentSnapshotDataPairs(documents) {
1231
+ return documents.length
1232
+ ? combineLatest(documents.map((document) => document.accessor.stream().pipe(map((snapshot) => ({
1233
+ document,
1234
+ snapshot,
1235
+ data: documentDataWithIdAndKey(snapshot)
1236
+ })))))
1237
+ : of([]);
1238
+ }
1239
+ /**
1240
+ * Streams {@link FirestoreDocumentSnapshotDataPairWithData}s for multiple documents, filtering out non-existent documents.
1241
+ *
1242
+ * Builds on {@link streamDocumentSnapshotDataPairs} and filters each emission to include only pairs where
1243
+ * `data` is non-nullish (i.e., the document exists in Firestore). The filtered array may be shorter than
1244
+ * the input `documents` array and may change length over time as documents are created or deleted.
1245
+ *
1246
+ * Returns `of([])` for an empty input array.
1247
+ *
1248
+ * This is the streaming equivalent of {@link import('./document.utility').getDocumentSnapshotDataPairsWithData}.
1249
+ *
1250
+ * @param documents - Documents to stream snapshot-data pairs for
1251
+ * @returns Observable emitting snapshot-data pairs for existing documents only, whenever any document changes
1252
+ */
1253
+ function streamDocumentSnapshotDataPairsWithData(documents) {
1254
+ return streamDocumentSnapshotDataPairs(documents).pipe(map((pairs) => pairs.filter((pair) => pair.data != null)));
1255
+ }
1256
+ // MARK: Compat
1257
+ /**
1258
+ * @deprecated Use {@link streamDocumentSnapshotsData} instead.
1259
+ */
1260
+ const latestDataFromDocuments = streamDocumentSnapshotsData;
995
1261
 
996
1262
  // A set of copied types from @google-cloud/firestore and firebase/firestore to allow cross-compatability.
997
1263
  /* eslint-disable */
@@ -2147,20 +2413,14 @@ function firebaseQueryItemAccumulator(iteration, mapItem) {
2147
2413
  }
2148
2414
 
2149
2415
  /**
2150
- * Creates a Firestore query constraint.
2416
+ * Creates a {@link FirestoreQueryConstraint} with the given type identifier and data.
2151
2417
  *
2152
- * @template T - Type of data stored in the constraint
2153
- * @param type - The constraint type identifier
2154
- * @param data - The constraint data
2155
- * @returns A Firestore query constraint object
2156
- */
2157
- /**
2158
- * Creates a Firestore query constraint.
2418
+ * This is the low-level factory used by all constraint builder functions (e.g., {@link where},
2419
+ * {@link limit}, {@link orderBy}). Most callers should use those typed builders instead.
2159
2420
  *
2160
- * @template T - Type of data stored in the constraint
2161
- * @param type - The constraint type identifier
2162
- * @param data - The constraint data
2163
- * @returns A Firestore query constraint object
2421
+ * @param type - The constraint type identifier (e.g., 'where', 'limit')
2422
+ * @param data - The constraint-specific configuration data
2423
+ * @returns A typed constraint object
2164
2424
  */
2165
2425
  function firestoreQueryConstraint(type, data) {
2166
2426
  return {
@@ -2660,6 +2920,17 @@ function filterDisallowedFirestoreItemPageIteratorInputConstraints(constraints)
2660
2920
  * This value is used when no itemsPerPage is explicitly specified in the configuration.
2661
2921
  */
2662
2922
  const DEFAULT_FIRESTORE_ITEM_PAGE_ITERATOR_ITEMS_PER_PAGE = 50;
2923
+ /**
2924
+ * Creates a {@link FirestoreItemPageIteratorDelegate} that handles cursor-based Firestore pagination.
2925
+ *
2926
+ * The delegate implements `loadItemsForPage` by:
2927
+ * 1. Retrieving the cursor document from the previous page's results
2928
+ * 2. Building a query with the configured constraints, `startAfter` cursor, and `limit`
2929
+ * 3. Executing the query and wrapping the results in a {@link FirestoreItemPageQueryResult}
2930
+ * with `reload()` and `stream()` capabilities
2931
+ *
2932
+ * @returns A delegate instance for use with {@link ItemPageIterator}
2933
+ */
2663
2934
  function makeFirestoreItemPageIteratorDelegate() {
2664
2935
  return {
2665
2936
  loadItemsForPage: (request) => {
@@ -2817,7 +3088,14 @@ function _firestoreItemPageIterationWithSnapshotIteration(snapshotIteration) {
2817
3088
  return result;
2818
3089
  }
2819
3090
  /**
2820
- * Creates a FirestoreFixedItemPageIterationFactoryFunction.
3091
+ * Creates a factory function for generating fixed-set Firestore pagination instances.
3092
+ *
3093
+ * The returned factory takes an array of document references and an optional filter,
3094
+ * producing a pagination instance that iterates over those specific documents in pages.
3095
+ *
3096
+ * @param baseConfig - Base pagination configuration (query reference, driver, page size)
3097
+ * @param documentAccessor - Accessor used to load document snapshots from the references
3098
+ * @returns A factory function that creates fixed-set pagination instances
2821
3099
  */
2822
3100
  function firestoreFixedItemPageIterationFactory(baseConfig, documentAccessor) {
2823
3101
  return (items, filter) => {
@@ -2834,7 +3112,17 @@ function firestoreFixedItemPageIterationFactory(baseConfig, documentAccessor) {
2834
3112
  };
2835
3113
  }
2836
3114
  /**
2837
- * Creates a FirestoreItemPageIterationInstance that iterates over the fixed
3115
+ * Creates a pagination instance that iterates over a fixed set of document references.
3116
+ *
3117
+ * Unlike {@link firestoreItemPageIteration} which queries Firestore dynamically, this function
3118
+ * paginates through a pre-determined list of document references. Each page loads the next
3119
+ * slice of references via the document accessor and produces a synthetic {@link QuerySnapshot}.
3120
+ *
3121
+ * This is useful for paginating over known document sets (e.g., from a pre-computed list
3122
+ * of references) without executing Firestore queries.
3123
+ *
3124
+ * @param config - Configuration including the document references, accessor, and pagination settings
3125
+ * @returns A pagination instance that pages through the fixed reference set
2838
3126
  */
2839
3127
  function firestoreFixedItemPageIteration(config) {
2840
3128
  const { items, documentAccessor } = config;
@@ -3051,24 +3339,47 @@ function readFirestoreModelKeyFromDocumentSnapshot(snapshot) {
3051
3339
  /**
3052
3340
  * @module Firestore Query Iteration
3053
3341
  *
3054
- * This module provides a comprehensive system for iterating through Firestore query results
3055
- * with support for pagination, batching, and parallelism. It enables efficient processing of
3056
- * large result sets by using cursor-based pagination (via "checkpoints") and various iteration
3057
- * strategies.
3342
+ * Provides a layered system for iterating through Firestore query results using
3343
+ * cursor-based pagination ("checkpoints"). Each layer adds convenience on top of the
3344
+ * one below:
3345
+ *
3346
+ * 1. **Checkpoints** ({@link iterateFirestoreDocumentSnapshotCheckpoints}) — core pagination engine
3347
+ * 2. **Batches** ({@link iterateFirestoreDocumentSnapshotBatches}) — subdivides checkpoints into fixed-size batches
3348
+ * 3. **Snapshots** ({@link iterateFirestoreDocumentSnapshots}) — processes individual snapshots
3349
+ * 4. **Pairs** ({@link iterateFirestoreDocumentSnapshotPairs}) — loads typed document wrappers per snapshot
3350
+ *
3351
+ * Batch variants with document pairs are also available:
3352
+ * - {@link iterateFirestoreDocumentSnapshotPairBatches} — batch processing with typed document access
3353
+ *
3354
+ * All functions support configurable limits (`limitPerCheckpoint`, `totalSnapshotsLimit`),
3355
+ * concurrency (`maxParallelCheckpoints`), rate limiting (`waitBetweenCheckpoints`),
3356
+ * snapshot filtering, and repeat cursor detection.
3058
3357
  */
3059
3358
  /**
3060
- * Iterates through the results of a Firestore query by each FirestoreDocumentSnapshotDataPairWithData.
3359
+ * Iterates through Firestore query results, loading each snapshot as a
3360
+ * {@link FirestoreDocumentSnapshotDataPairWithData} before processing.
3061
3361
  *
3062
- * This function efficiently handles pagination through potentially large result sets by using
3063
- * the checkpoint system to load documents in batches. For each document snapshot, it loads the
3064
- * associated data using the provided document accessor, then passes the combined pair to the
3065
- * processing function.
3362
+ * Built on {@link iterateFirestoreDocumentSnapshots}, this adds an automatic document
3363
+ * loading step: each raw snapshot is resolved through the `documentAccessor` to produce
3364
+ * a pair containing both the typed {@link FirestoreDocument} and its snapshot data.
3365
+ * This is the highest-level iteration function — use it when your callback needs
3366
+ * document-level operations (updates, deletes) alongside the snapshot data.
3066
3367
  *
3067
- * @template T - The document data type
3068
- * @template R - The result type of processing each snapshot pair
3069
- * @template D - The FirestoreDocument implementation type (defaults to FirestoreDocument<T>)
3070
- * @param config - Configuration for the iteration, including the document accessor and processing function
3071
- * @returns A promise that resolves to the result of the iteration, including statistics about checkpoints and snapshots processed
3368
+ * @param config - Iteration config including the document accessor and per-pair callback
3369
+ * @returns Checkpoint-level statistics (total checkpoints, snapshots visited, limit status)
3370
+ *
3371
+ * @example
3372
+ * ```typescript
3373
+ * const result = await iterateFirestoreDocumentSnapshotPairs({
3374
+ * queryFactory,
3375
+ * constraintsFactory: [where('status', '==', 'pending')],
3376
+ * limitPerCheckpoint: 100,
3377
+ * documentAccessor: collection.documentAccessor(),
3378
+ * iterateSnapshotPair: async (pair) => {
3379
+ * await pair.document.accessor.set({ ...pair.data, status: 'processed' });
3380
+ * }
3381
+ * });
3382
+ * ```
3072
3383
  */
3073
3384
  async function iterateFirestoreDocumentSnapshotPairs(config) {
3074
3385
  const { iterateSnapshotPair, documentAccessor } = config;
@@ -3082,16 +3393,32 @@ async function iterateFirestoreDocumentSnapshotPairs(config) {
3082
3393
  });
3083
3394
  }
3084
3395
  /**
3085
- * Iterates through the results of a Firestore query by each document snapshot by itself.
3396
+ * Iterates through Firestore query results, processing each document snapshot individually.
3086
3397
  *
3087
- * This function efficiently handles pagination through potentially large result sets by using
3088
- * the checkpoint system to load documents in batches. Each document snapshot is then processed
3089
- * individually using the provided processing function.
3398
+ * Built on {@link iterateFirestoreDocumentSnapshotBatches} with `maxParallelCheckpoints: 1`,
3399
+ * this unwraps each checkpoint's snapshots and processes them one-by-one via
3400
+ * {@link performAsyncTasks} (sequential by default). Use `snapshotsPerformTasksConfig`
3401
+ * to enable parallel snapshot processing within each checkpoint.
3090
3402
  *
3091
- * @template T - The document data type
3092
- * @template R - The result type of processing each snapshot
3093
- * @param config - Configuration for the iteration, including the snapshot processing function
3094
- * @returns A promise that resolves to the result of the iteration, including statistics about checkpoints and snapshots processed
3403
+ * For document-level operations (needing the typed {@link FirestoreDocument} wrapper),
3404
+ * use {@link iterateFirestoreDocumentSnapshotPairs} instead.
3405
+ *
3406
+ * @param config - Iteration config including the per-snapshot callback
3407
+ * @returns Checkpoint-level statistics (total checkpoints, snapshots visited, limit status)
3408
+ *
3409
+ * @example
3410
+ * ```typescript
3411
+ * const result = await iterateFirestoreDocumentSnapshots({
3412
+ * queryFactory,
3413
+ * constraintsFactory: [where('active', '==', true)],
3414
+ * limitPerCheckpoint: 200,
3415
+ * totalSnapshotsLimit: 1000,
3416
+ * iterateSnapshot: async (snapshot) => {
3417
+ * const data = snapshot.data();
3418
+ * await externalApi.sync(data);
3419
+ * }
3420
+ * });
3421
+ * ```
3095
3422
  */
3096
3423
  async function iterateFirestoreDocumentSnapshots(config) {
3097
3424
  const { iterateSnapshot, performTasksConfig, snapshotsPerformTasksConfig } = config;
@@ -3108,10 +3435,32 @@ async function iterateFirestoreDocumentSnapshots(config) {
3108
3435
  });
3109
3436
  }
3110
3437
  /**
3111
- * Iterates through the results of a Firestore query by each FirestoreDocumentSnapshotDataPair.
3438
+ * Iterates through Firestore query results in batches, loading each batch as
3439
+ * {@link FirestoreDocumentSnapshotDataPairWithData} instances before processing.
3112
3440
  *
3113
- * @param config
3114
- * @returns
3441
+ * Built on {@link iterateFirestoreDocumentSnapshotBatches} with `maxParallelCheckpoints: 1`.
3442
+ * Each batch of raw snapshots is resolved through the `documentAccessor` to produce
3443
+ * typed document-snapshot pairs. Use this when you need batch-level operations with
3444
+ * typed document access (e.g., bulk updates, batch writes).
3445
+ *
3446
+ * @param config - Iteration config including the document accessor and per-batch callback
3447
+ * @returns Checkpoint-level statistics (total checkpoints, snapshots visited, limit status)
3448
+ *
3449
+ * @example
3450
+ * ```typescript
3451
+ * const result = await iterateFirestoreDocumentSnapshotPairBatches({
3452
+ * queryFactory,
3453
+ * constraintsFactory: [where('needsMigration', '==', true)],
3454
+ * limitPerCheckpoint: 500,
3455
+ * batchSize: 50,
3456
+ * documentAccessor: collection.documentAccessor(),
3457
+ * iterateSnapshotPairsBatch: async (pairs, batchIndex) => {
3458
+ * const writeBatch = firestore.batch();
3459
+ * pairs.forEach((pair) => writeBatch.update(pair.document.documentRef, { migrated: true }));
3460
+ * await writeBatch.commit();
3461
+ * }
3462
+ * });
3463
+ * ```
3115
3464
  */
3116
3465
  async function iterateFirestoreDocumentSnapshotPairBatches(config) {
3117
3466
  const { iterateSnapshotPairsBatch, documentAccessor } = config;
@@ -3132,10 +3481,32 @@ async function iterateFirestoreDocumentSnapshotPairBatches(config) {
3132
3481
  */
3133
3482
  const DEFAULT_ITERATE_FIRESTORE_DOCUMENT_SNAPSHOT_BATCHES_BATCH_SIZE = 25;
3134
3483
  /**
3135
- * Iterates through the results of a Firestore query by each document snapshot.
3484
+ * Iterates through Firestore query results by subdividing each checkpoint into smaller batches.
3136
3485
  *
3137
- * @param config
3138
- * @returns
3486
+ * Built on {@link iterateFirestoreDocumentSnapshotCheckpoints}, this function takes each
3487
+ * checkpoint's snapshots and splits them into batches (default size: 25). Batches are
3488
+ * processed via {@link performAsyncTasks}, sequential by default. Use this when operations
3489
+ * have size limits (e.g., Firestore batch writes) or benefit from controlled chunk sizes.
3490
+ *
3491
+ * For per-snapshot processing, use {@link iterateFirestoreDocumentSnapshots}.
3492
+ * For batch processing with typed document pairs, use {@link iterateFirestoreDocumentSnapshotPairBatches}.
3493
+ *
3494
+ * @param config - Iteration config including batch size and per-batch callback
3495
+ * @returns Checkpoint-level statistics (total checkpoints, snapshots visited, limit status)
3496
+ *
3497
+ * @example
3498
+ * ```typescript
3499
+ * const result = await iterateFirestoreDocumentSnapshotBatches({
3500
+ * queryFactory,
3501
+ * constraintsFactory: [where('type', '==', 'order')],
3502
+ * limitPerCheckpoint: 500,
3503
+ * batchSize: 100,
3504
+ * iterateSnapshotBatch: async (snapshots, batchIndex) => {
3505
+ * const data = snapshots.map((s) => s.data());
3506
+ * await analytics.trackBatch(data);
3507
+ * }
3508
+ * });
3509
+ * ```
3139
3510
  */
3140
3511
  async function iterateFirestoreDocumentSnapshotBatches(config) {
3141
3512
  const { iterateSnapshotBatch, batchSizeForSnapshots: inputBatchSizeForSnapshots, performTasksConfig, batchSize: inputBatchSize } = config;
@@ -3161,29 +3532,75 @@ async function iterateFirestoreDocumentSnapshotBatches(config) {
3161
3532
  });
3162
3533
  }
3163
3534
  /**
3164
- * Creates a IterateFirestoreDocumentSnapshotCheckpointsFilterCheckpointSnapshotsFunction that filters out any repeat documents.
3535
+ * Creates a checkpoint filter that deduplicates documents across checkpoints.
3165
3536
  *
3166
- * Repeat documents can occur in cases where the document is updated and the query matches it again for a different reason.
3167
- * This utility function creates a filter that prevents processing the same document multiple times.
3537
+ * Repeat documents can appear when a document is updated during iteration and
3538
+ * re-matches the query in a subsequent checkpoint. This factory returns a stateful
3539
+ * filter that tracks seen document keys and removes duplicates.
3168
3540
  *
3169
- * @param readKeyFunction - Function that extracts a unique key from a document snapshot, defaults to document ID
3170
- * @returns A filter function that prevents duplicate document processing
3541
+ * The filter maintains state across checkpoints use a single instance for the
3542
+ * entire iteration run. Pair with `handleRepeatCursor: false` to also terminate
3543
+ * iteration when cursor-level repeats are detected.
3544
+ *
3545
+ * @param readKeyFunction - Extracts a unique key from each snapshot; defaults to `snapshot.id`
3546
+ * @returns A stateful filter function suitable for `filterCheckpointSnapshots`
3547
+ *
3548
+ * @example
3549
+ * ```typescript
3550
+ * const result = await iterateFirestoreDocumentSnapshotCheckpoints({
3551
+ * queryFactory,
3552
+ * constraintsFactory: [orderBy('updatedAt')],
3553
+ * limitPerCheckpoint: 100,
3554
+ * filterCheckpointSnapshots: filterRepeatCheckpointSnapshots(),
3555
+ * handleRepeatCursor: false,
3556
+ * iterateCheckpoint: async (snapshots) => {
3557
+ * return snapshots.map((s) => s.data());
3558
+ * }
3559
+ * });
3560
+ * ```
3171
3561
  */
3172
3562
  function filterRepeatCheckpointSnapshots(readKeyFunction = (x) => x.id) {
3173
3563
  const allowOnceFilter = allowValueOnceFilter(readKeyFunction);
3174
3564
  return async (snapshots) => snapshots.filter(allowOnceFilter);
3175
3565
  }
3176
3566
  /**
3177
- * Iterates through the results of a Firestore query in several batches.
3567
+ * Core cursor-based pagination engine for iterating through Firestore query results.
3178
3568
  *
3179
- * This is the core pagination function that handles cursor-based iteration through
3180
- * potentially large Firestore query results. It manages cursor documents, checkpoint
3181
- * processing, parallel execution, and various limit controls.
3569
+ * This is the foundational function in the Firestore iteration hierarchy. It drives
3570
+ * sequential cursor-based pagination: each "checkpoint" executes a Firestore query,
3571
+ * uses the last document as a `startAfter` cursor for the next query, and passes
3572
+ * results to the `iterateCheckpoint` callback.
3182
3573
  *
3183
- * @template T - The document data type
3184
- * @template R - The result type of the iteration
3185
- * @param config - Complete configuration for the pagination and processing behavior
3186
- * @returns Promise resolving to statistics about the iteration
3574
+ * The iteration loop continues until one of these conditions is met:
3575
+ * - A query returns no results (no more matching documents)
3576
+ * - The `totalSnapshotsLimit` is reached
3577
+ * - A repeat cursor is detected and `handleRepeatCursor` returns `false`
3578
+ * - The effective `limitPerCheckpoint` calculates to 0 remaining
3579
+ *
3580
+ * Higher-level functions build on this:
3581
+ * - {@link iterateFirestoreDocumentSnapshotBatches} — subdivides checkpoints into smaller batches
3582
+ * - {@link iterateFirestoreDocumentSnapshots} — processes one snapshot at a time
3583
+ * - {@link iterateFirestoreDocumentSnapshotPairs} — loads typed document wrappers per snapshot
3584
+ *
3585
+ * @param config - Complete configuration for pagination, processing, and termination behavior
3586
+ * @returns Statistics including total checkpoints executed, snapshots visited, and whether the limit was hit
3587
+ *
3588
+ * @example
3589
+ * ```typescript
3590
+ * const result = await iterateFirestoreDocumentSnapshotCheckpoints({
3591
+ * queryFactory,
3592
+ * constraintsFactory: [where('createdAt', '<=', cutoffDate), orderBy('createdAt')],
3593
+ * limitPerCheckpoint: 200,
3594
+ * totalSnapshotsLimit: 5000,
3595
+ * handleRepeatCursor: false,
3596
+ * iterateCheckpoint: async (snapshots, querySnapshot) => {
3597
+ * return snapshots.map((s) => ({ id: s.id, data: s.data() }));
3598
+ * },
3599
+ * useCheckpointResult: (result) => {
3600
+ * console.log(`Checkpoint ${result.i}: processed ${result.docSnapshots.length} docs`);
3601
+ * }
3602
+ * });
3603
+ * ```
3187
3604
  */
3188
3605
  async function iterateFirestoreDocumentSnapshotCheckpoints(config) {
3189
3606
  const { iterateCheckpoint, filterCheckpointSnapshots: inputFilterCheckpointSnapshot, handleRepeatCursor: inputHandleRepeatCursor, waitBetweenCheckpoints, useCheckpointResult, constraintsFactory: inputConstraintsFactory, dynamicConstraints: inputDynamicConstraints, queryFactory, maxParallelCheckpoints = 1, limitPerCheckpoint: inputLimitPerCheckpoint, totalSnapshotsLimit: inputTotalSnapshotsLimit } = config;
@@ -3286,13 +3703,20 @@ async function iterateFirestoreDocumentSnapshotCheckpoints(config) {
3286
3703
  }
3287
3704
  // MARK: Utility
3288
3705
  /**
3289
- * Creates a filter that allows each document snapshot to be processed only once based on its path.
3706
+ * Creates a stateful filter that allows each document snapshot through only once,
3707
+ * keyed by its full Firestore model path.
3290
3708
  *
3291
- * This utility helps prevent duplicate processing of documents by tracking which ones have
3292
- * already been seen based on their path.
3709
+ * Unlike {@link filterRepeatCheckpointSnapshots} which uses document ID by default,
3710
+ * this filter uses the full document path ({@link readFirestoreModelKeyFromDocumentSnapshot}),
3711
+ * making it suitable for cross-collection iteration where document IDs alone may collide.
3293
3712
  *
3294
- * @template T - The document snapshot type
3295
- * @returns A filter function that only allows each unique document to pass once
3713
+ * @returns A reusable filter function that passes each unique document path exactly once
3714
+ *
3715
+ * @example
3716
+ * ```typescript
3717
+ * const onceFilter = allowDocumentSnapshotWithPathOnceFilter();
3718
+ * const uniqueSnapshots = allSnapshots.filter(onceFilter);
3719
+ * ```
3296
3720
  */
3297
3721
  function allowDocumentSnapshotWithPathOnceFilter() {
3298
3722
  return allowValueOnceFilter(readFirestoreModelKeyFromDocumentSnapshot);
@@ -9249,5 +9673,5 @@ function systemStateFirestoreCollection(firestoreContext, converters) {
9249
9673
  });
9250
9674
  }
9251
9675
 
9252
- export { ALL_STORAGE_FILE_NOTIFICATION_TASK_TYPES, ALL_USER_UPLOADS_FOLDER_NAME, ALL_USER_UPLOADS_FOLDER_PATH, AbstractFirestoreDocument, AbstractFirestoreDocumentDataAccessorWrapper, AbstractFirestoreDocumentWithParent, AbstractSubscribeOrUnsubscribeToNotificationBoxParams, AbstractSubscribeToNotificationBoxParams, AppNotificationTemplateTypeInfoRecordService, BASE_MODEL_STORAGE_FILE_PATH, CALL_MODEL_APP_FUNCTION_KEY, COPY_USER_RELATED_DATA_ACCESSOR_FACTORY_FUNCTION, CREATE_NOTIFICATION_ID_REQUIRED_ERROR_CODE, CleanupSentNotificationsParams, ContextGrantedModelRolesReaderInstance, CreateNotificationBoxParams, CreateNotificationSummaryParams, CreateNotificationUserParams, CreateStorageFileGroupParams, CreateStorageFileParams, DBX_FIREBASE_SERVER_NO_AUTH_ERROR_CODE, DBX_FIREBASE_SERVER_NO_UID_ERROR_CODE, DEFAULT_DATE_CELL_RANGE_VALUE, DEFAULT_FIRESTORE_DATE_CELL_SCHEDULE_VALUE, DEFAULT_FIRESTORE_ITEM_PAGE_ITERATOR_ITEMS_PER_PAGE, DEFAULT_FIRESTORE_STRING_FIELD_VALUE, DEFAULT_FIRESTORE_UNITED_STATES_ADDRESS_VALUE, DEFAULT_FIRESTORE_WEBSITE_FILE_LINK_VALUE, DEFAULT_ITERATE_FIRESTORE_DOCUMENT_SNAPSHOT_BATCHES_BATCH_SIZE, DEFAULT_NOTIFICATION_TASK_NOTIFICATION_MODEL_KEY, DEFAULT_NOTIFICATION_TASK_SUBTASK_CLEANUP_RETRY_ATTEMPTS, DEFAULT_NOTIFICATION_TASK_SUBTASK_CLEANUP_RETRY_DELAY, DEFAULT_NOTIFICATION_TEMPLATE_TYPE, DEFAULT_QUERY_CHANGE_WATCHER_DELAY, DEFAULT_SINGLE_ITEM_FIRESTORE_COLLECTION_DOCUMENT_IDENTIFIER, DEFAULT_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, DEFAULT_WEBSITE_LINK, DeleteAllQueuedStorageFilesParams, DeleteStorageFileParams, DownloadStorageFileParams, EMPTY_STORAGE_FILE_PURPOSE_SUBGROUP, EXACT_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, FIREBASE_AUTH_NETWORK_REQUEST_ERROR, FIREBASE_AUTH_NETWORK_REQUEST_FAILED, FIREBASE_AUTH_PASSWORD_MAX_LENGTH, FIREBASE_AUTH_PASSWORD_MIN_LENGTH, FIREBASE_AUTH_USER_NOT_FOUND_ERROR, FIREBASE_AUTH_WRONG_PASSWORD, FIREBASE_DEVELOPMENT_FUNCTIONS_MAP_KEY, FIREBASE_SERVER_AUTH_CLAIMS_RESET_LAST_COM_DATE_KEY, FIREBASE_SERVER_AUTH_CLAIMS_RESET_PASSWORD_KEY, FIREBASE_SERVER_AUTH_CLAIMS_SETUP_LAST_COM_DATE_KEY, FIREBASE_SERVER_AUTH_CLAIMS_SETUP_PASSWORD_KEY, FIRESTORE_CLIENT_QUERY_CONSTRAINT_HANDLER_MAPPING, FIRESTORE_COLLECTION_NAME_SEPARATOR, FIRESTORE_DUMMY_MODEL_KEY, FIRESTORE_EMPTY_VALUE, FIRESTORE_END_AT_QUERY_CONSTRAINT_TYPE, FIRESTORE_END_AT_VALUE_QUERY_CONSTRAINT_TYPE, FIRESTORE_END_BEFORE_QUERY_CONSTRAINT_TYPE, FIRESTORE_ITEM_PAGE_ITERATOR, FIRESTORE_ITEM_PAGE_ITERATOR_DELEGATE, FIRESTORE_LIMIT_QUERY_CONSTRAINT_TYPE, FIRESTORE_LIMIT_TO_LAST_QUERY_CONSTRAINT_TYPE, FIRESTORE_MAX_WHERE_IN_FILTER_ARGS_COUNT, FIRESTORE_MODEL_ID_REGEX, FIRESTORE_MODEL_KEY_REGEX, FIRESTORE_MODEL_KEY_REGEX_STRICT, FIRESTORE_OFFSET_QUERY_CONSTRAINT_TYPE, FIRESTORE_ORDER_BY_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE, FIRESTORE_ORDER_BY_QUERY_CONSTRAINT_TYPE, FIRESTORE_PASSTHROUGH_FIELD, FIRESTORE_PERMISSION_DENIED_ERROR_CODE, FIRESTORE_START_AFTER_QUERY_CONSTRAINT_TYPE, FIRESTORE_START_AT_QUERY_CONSTRAINT_TYPE, FIRESTORE_START_AT_VALUE_QUERY_CONSTRAINT_TYPE, FIRESTORE_WHERE_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE, FIRESTORE_WHERE_QUERY_CONSTRAINT_TYPE, FirebaseDevelopmentFunctions, FirebaseModelPermissionServiceInstance, FirebaseServerError, FirestoreAccessorStreamMode, FirestoreDocumentContextType, HIGH_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, InferredTargetModelIdParams, InferredTargetModelParams, InitializeAllApplicableNotificationBoxesParams, InitializeAllApplicableNotificationSummariesParams, InitializeAllApplicableStorageFileGroupsParams, InitializeAllStorageFilesFromUploadsParams, InitializeNotificationModelParams, InitializeStorageFileFromUploadParams, InitializeStorageFileModelParams, IsFirestoreModelId, IsFirestoreModelIdOrKey, IsFirestoreModelKey, LOW_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, MAX_FIRESTORE_MAP_ZOOM_LEVEL_VALUE, MIN_FIRESTORE_MAP_ZOOM_LEVEL_VALUE, MODEL_FUNCTION_FIREBASE_CRUD_FUNCTION_SPECIFIER_DEFAULT, MODEL_FUNCTION_FIREBASE_CRUD_FUNCTION_SPECIFIER_SPLITTER, MODEL_STORAGE_FILE_SLASH_PATH_FACTORY, ModifyBeforeSetFirestoreDocumentDataAccessorWrapper, NOTIFICATION_BOX_DOES_NOT_EXIST_ERROR_CODE, NOTIFICATION_BOX_EXCLUSION_TARGET_INVALID_ERROR_CODE, NOTIFICATION_BOX_EXISTS_FOR_MODEL_ERROR_CODE, NOTIFICATION_BOX_RECIPIENT_DOES_NOT_EXIST_ERROR_CODE, NOTIFICATION_MESSAGE_MAX_LENGTH, NOTIFICATION_MESSAGE_MIN_LENGTH, NOTIFICATION_MODEL_ALREADY_INITIALIZED_ERROR_CODE, NOTIFICATION_RECIPIENT_NAME_MAX_LENGTH, NOTIFICATION_RECIPIENT_NAME_MIN_LENGTH, NOTIFICATION_SUBJECT_MAX_LENGTH, NOTIFICATION_SUBJECT_MIN_LENGTH, NOTIFICATION_SUMMARY_EMBEDDED_NOTIFICATION_ITEM_MESSAGE_MAX_LENGTH, NOTIFICATION_SUMMARY_EMBEDDED_NOTIFICATION_ITEM_SUBJECT_MAX_LENGTH, NOTIFICATION_SUMMARY_ITEM_LIMIT, NOTIFICATION_TASK_SUBTASK_CHECKPOINT_CLEANUP, NOTIFICATION_TASK_SUBTASK_CHECKPOINT_PROCESSING, NOTIFICATION_USER_BLOCKED_FROM_BEING_ADD_TO_RECIPIENTS_ERROR_CODE, NOTIFICATION_USER_INVALID_UID_FOR_CREATE_ERROR_CODE, NOTIFICATION_USER_LOCKED_CONFIG_FROM_BEING_UPDATED_ERROR_CODE, NOTIFICATION_WEEK_NOTIFICATION_ITEM_LIMIT, NotificationBoxDocument, NotificationBoxRecipientFlag, NotificationBoxRecipientTemplateConfigArrayEntryParam, NotificationBoxRecipientTemplateConfigBoolean, NotificationDocument, NotificationFirestoreCollections, NotificationFunctions, NotificationMessageFlag, NotificationRecipientParams, NotificationRecipientSendFlag, NotificationSendState, NotificationSendType, NotificationSummaryDocument, NotificationUserDocument, NotificationWeekDocument, ProcessAllQueuedStorageFilesParams, ProcessStorageFileParams, RUN_DEV_FUNCTION_APP_FUNCTION_KEY, RegenerateAllFlaggedStorageFileGroupsContentParams, RegenerateStorageFileGroupContentParams, ResyncAllNotificationUserParams, ResyncNotificationUserParams, SCHEDULED_FUNCTION_DEV_FUNCTION_SPECIFIER, STORAGEFILE_RELATED_FILE_METADATA_KEY, STORAGE_FILE_ALREADY_PROCESSED_ERROR_CODE, STORAGE_FILE_CANNOT_BE_DELETED_YET_ERROR_CODE, STORAGE_FILE_GROUP_CREATE_INPUT_ERROR_CODE, STORAGE_FILE_GROUP_QUEUED_FOR_INITIALIZATION_ERROR_CODE, STORAGE_FILE_GROUP_ROOT_FOLDER_PATH, STORAGE_FILE_GROUP_ZIP_FILE_PATH, STORAGE_FILE_GROUP_ZIP_INFO_JSON_FILE_NAME, STORAGE_FILE_GROUP_ZIP_STORAGE_FILE_PURPOSE, STORAGE_FILE_GROUP_ZIP_STORAGE_FILE_PURPOSE_CREATE_ZIP_SUBTASK, STORAGE_FILE_MODEL_ALREADY_INITIALIZED_ERROR_CODE, STORAGE_FILE_NOT_FLAGGED_FOR_DELETION_ERROR_CODE, STORAGE_FILE_NOT_FLAGGED_FOR_GROUPS_SYNC_ERROR_CODE, STORAGE_FILE_PROCESSING_NOTIFICATION_TASK_TYPE, STORAGE_FILE_PROCESSING_NOT_ALLOWED_FOR_INVALID_STATE_ERROR_CODE, STORAGE_FILE_PROCESSING_NOT_AVAILABLE_FOR_TYPE_ERROR_CODE, STORAGE_FILE_PROCESSING_NOT_QUEUED_FOR_PROCESSING_ERROR_CODE, STORAGE_FILE_PROCESSING_STUCK_THROTTLE_CHECK_MS, STORAGE_FILE_UPLOAD_USER_ROLE, ScheduledFunctionDevelopmentFirebaseFunctionListEntry, ScheduledFunctionDevelopmentFirebaseFunctionParams, ScheduledFunctionDevelopmentFunctionTypeEnum, SendNotificationParams, SendQueuedNotificationsParams, StorageFileCreationType, StorageFileDocument, StorageFileFirestoreCollections, StorageFileFunctions, StorageFileGroupDocument, StorageFileProcessingState, StorageFileState, StorageFileUploadStreamUnsupportedError, SyncAllFlaggedStorageFilesWithGroupsParams, SyncStorageFileWithGroupsParams, SystemStateDocument, SystemStateFirestoreCollections, TargetModelIdParams, TargetModelParams, UPLOADED_FILE_DOES_NOT_EXIST_ERROR_CODE, UPLOADED_FILE_INITIALIZATION_DISCARDED_ERROR_CODE, UPLOADED_FILE_INITIALIZATION_FAILED_ERROR_CODE, UPLOADED_FILE_NOT_ALLOWED_TO_BE_INITIALIZED_ERROR_CODE, UPLOADS_FOLDER_PATH, UpdateNotificationBoxParams, UpdateNotificationBoxRecipientLikeParams, UpdateNotificationBoxRecipientParams, UpdateNotificationSummaryParams, UpdateNotificationUserDefaultNotificationBoxRecipientConfigParams, UpdateNotificationUserNotificationBoxRecipientParams, UpdateNotificationUserParams, UpdateStorageFileGroupEntryParams, UpdateStorageFileGroupParams, UpdateStorageFileParams, _createNotificationDocumentFromPair, addConstraintToBuilder, addOrReplaceLimitInConstraints, allChildDocumentsUnderParent, allChildDocumentsUnderParentPath, allChildDocumentsUnderRelativePath, allowDocumentSnapshotWithPathOnceFilter, allowedNotificationRecipients, appNotificationTemplateTypeInfoRecordService, applyExclusionsToNotificationUserNotificationBoxRecipientConfigs, arrayUpdateWithAccessorFunction, asTopLevelFieldPath, asTopLevelFieldPaths, assertFirestoreUpdateHasData, assertStorageUploadOptionsStringFormat, assignDateCellRangeFunction, assignDateCellScheduleFunction, assignUnitedStatesAddressFunction, assignWebsiteFileLinkFunction, assignWebsiteLinkFunction, buildFirebaseCollectionTypeModelTypeMap, calculateNsForNotificationUserNotificationBoxRecipientConfigs, calculateStorageFileGroupEmbeddedFileUpdate, calculateStorageFileGroupRegeneration, callModelFirebaseFunctionMapFactory, canQueueStorageFileForProcessing, childFirestoreModelKey, childFirestoreModelKeyPath, childFirestoreModelKeys, clientFirebaseFirestoreContextFactory, clientFirebaseStorageContextFactory, combineUploadFileTypeDeterminers, completeSubtaskProcessingAndScheduleCleanupTaskResult, contextGrantedModelRolesReader, contextGrantedModelRolesReaderDoesNotExistErrorMessage, contextGrantedModelRolesReaderPermissionErrorMessage, convertHttpsCallableErrorToReadableError, copyDocumentIdForUserRelatedModifierFunction, copyDocumentIdToFieldModifierFunction, copyStoragePath, copyUserRelatedDataAccessorFactoryFunction, copyUserRelatedDataModifierConfig, createNotificationDocument, createNotificationDocumentIfSending, createNotificationDocumentPair, createNotificationTaskTemplate, createNotificationTemplate, createStorageFileDocumentPair, createStorageFileDocumentPairFactory, dataFromDocumentSnapshots, dataFromSnapshotStream, delayCompletion, determineByFileName, determineByFilePath, determineByFolderName, determineUserByFolder, determineUserByFolderWrapperFunction, determineUserByUserUploadsFolderWrapperFunction, developmentFirebaseFunctionMapFactory, directDataHttpsCallable, documentData, documentDataFunction, documentDataWithIdAndKey, documentReferenceFromDocument, documentReferencesFromDocuments, documentReferencesFromSnapshot, effectiveNotificationBoxRecipientConfig, effectiveNotificationBoxRecipientTemplateConfig, endAt, endAtValue, endBefore, extendFirestoreCollectionWithSingleDocumentAccessor, filterConstraintsOfType, filterDisallowedFirestoreItemPageIteratorInputConstraints, filterRepeatCheckpointSnapshots, filterWithDateRange, firebaseAuthErrorToReadableError, firebaseFirestoreClientDrivers, firebaseFirestoreQueryConstraintFunctionsDriver, firebaseFirestoreQueryDriver, firebaseFunctionMapFactory, firebaseModelLoader, firebaseModelPermissionService, firebaseModelService, firebaseModelServiceFactory, firebaseModelsService, firebaseQueryItemAccumulator, firebaseQuerySnapshotAccumulator, firebaseStorageBucketFolderPath, firebaseStorageClientAccessorDriver, firebaseStorageClientAccessorFile, firebaseStorageClientAccessorFolder, firebaseStorageClientDrivers, firebaseStorageClientListFilesResultFactory, firebaseStorageContextFactory, firebaseStorageFileExists, firebaseStorageFilePathFromStorageFilePath, firebaseStorageRefForStorageFilePath, firestoreArray, firestoreArrayMap, firestoreBitwiseObjectMap, firestoreBitwiseSet, firestoreBitwiseSetMap, firestoreBoolean, firestoreClientAccessorDriver, firestoreClientArrayUpdateToUpdateData, firestoreClientIncrementUpdateToUpdateData, firestoreCollectionQueryFactory, firestoreContextFactory, firestoreDate, firestoreDateCellRange, firestoreDateCellRangeArray, firestoreDateCellRangeAssignFn, firestoreDateCellSchedule, firestoreDateCellScheduleAssignFn, firestoreDateNumber, firestoreDencoderArray, firestoreDencoderMap, firestoreDencoderStringArray, firestoreDocumentAccessorContextExtension, firestoreDocumentAccessorFactory, firestoreDocumentLoader, firestoreDocumentSnapshotPairsLoader, firestoreDocumentSnapshotPairsLoaderInstance, firestoreDummyKey, firestoreEncodedArray, firestoreEncodedObjectMap, firestoreEnum, firestoreEnumArray, firestoreField, firestoreFieldConfigToModelMapFunctionsRef, firestoreFixedItemPageIteration, firestoreFixedItemPageIterationFactory, firestoreIdBatchVerifierFactory, firestoreIdentityTypeArray, firestoreIdentityTypeArrayName, firestoreItemPageIteration, firestoreItemPageIterationFactory, firestoreLatLngString, firestoreMap, firestoreMapZoomLevel, firestoreModelId, firestoreModelIdArrayField, firestoreModelIdFromDocument, firestoreModelIdFromEmail, firestoreModelIdGrantedRoleArrayMap, firestoreModelIdGrantedRoleMap, firestoreModelIdString, firestoreModelIdentity, firestoreModelIdentityTypeMap, firestoreModelIdsFromDocuments, firestoreModelIdsFromKey, firestoreModelKey, firestoreModelKeyArrayField, firestoreModelKeyCollectionName, firestoreModelKeyCollectionType, firestoreModelKeyCollectionTypeArray, firestoreModelKeyCollectionTypeArrayName, firestoreModelKeyCollectionTypePair, firestoreModelKeyEncodedGrantedRoleMap, firestoreModelKeyFactory, firestoreModelKeyFromDocument, firestoreModelKeyGrantedRoleArrayMap, firestoreModelKeyGrantedRoleMap, firestoreModelKeyPairObject, firestoreModelKeyParentKey, firestoreModelKeyParentKeyPartPairs, firestoreModelKeyPart, firestoreModelKeyPartPairs, firestoreModelKeyPartPairsKeyPath, firestoreModelKeyPartPairsPaths, firestoreModelKeyPath, firestoreModelKeyString, firestoreModelKeyTypePair, firestoreModelKeys, firestoreModelKeysFromDocuments, firestoreModelType, firestoreNotificationBoxRecipient, firestoreNotificationBoxRecipientTemplateConfigRecord, firestoreNotificationItem, firestoreNotificationRecipientWithConfig, firestoreNotificationUserDefaultNotificationBoxRecipientConfig, firestoreNotificationUserNotificationBoxRecipientConfig, firestoreNumber, firestoreObjectArray, firestorePassThroughField, firestoreQueryConstraint, firestoreQueryConstraintFactory, firestoreQueryDocumentSnapshotPairsLoader, firestoreQueryFactory, firestoreSingleDocumentAccessor, firestoreString, firestoreSubObject, firestoreTimezoneString, firestoreUID, firestoreUniqueArray, firestoreUniqueKeyedArray, firestoreUniqueNumberArray, firestoreUniqueStringArray, firestoreUnitedStatesAddress, firestoreUnitedStatesAddressAssignFn, firestoreUnixDateTimeSecondsNumber, firestoreUpdateWithNoDataError, firestoreWebsiteFileLink, firestoreWebsiteFileLinkAssignFn, firestoreWebsiteFileLinkEncodedArray, firestoreWebsiteFileLinkObjectArray, firestoreWebsiteLink, firestoreWebsiteLinkArray, firestoreWebsiteLinkAssignFn, flatFirestoreModelKey, getDataFromDocumentSnapshots, getDocumentSnapshotData, getDocumentSnapshotDataPair, getDocumentSnapshotDataPairs, getDocumentSnapshotDataPairsWithData, getDocumentSnapshotDataTuples, getDocumentSnapshotPair, getDocumentSnapshotPairs, getDocumentSnapshots, getDocumentSnapshotsData, grantFullAccessIfAdmin, grantFullAccessIfAuthUserRelated, grantModelRolesIfAdmin, grantModelRolesIfAdminFunction, grantModelRolesIfAuthUserRelatedModelFunction, grantModelRolesIfFunction, grantModelRolesIfHasAuthRolesFactory, grantModelRolesIfHasAuthRolesFunction, grantModelRolesOnlyIfFunction, grantStorageFileRolesForUserAuthFunction, inContextFirebaseModelServiceFactory, inContextFirebaseModelsServiceFactory, incrementUpdateWithAccessorFunction, inferKeyFromTwoWayFlatFirestoreModelKey, inferNotificationBoxRelatedModelKey, inferStorageFileGroupRelatedModelKey, interceptAccessorFactoryFunction, isAdminInFirebaseModelContext, isClientFirebaseError, isCompleteNotificationSendState, isFirebaseStorageObjectNotFoundError, isFirestoreModelId, isFirestoreModelIdOrKey, isFirestoreModelKey, isOwnerOfUserRelatedModelInFirebaseModelContext, iterateFirestoreDocumentSnapshotBatches, iterateFirestoreDocumentSnapshotCheckpoints, iterateFirestoreDocumentSnapshotPairBatches, iterateFirestoreDocumentSnapshotPairs, iterateFirestoreDocumentSnapshots, iterateStorageListFiles, iterateStorageListFilesByEachFile, iterateStorageListFilesFactory, iterationQueryDocChangeWatcher, iterationQueryDocChangeWatcherChangeTypeForGroup, latestDataFromDocuments, latestSnapshotsFromDocuments, lazyFirebaseFunctionsFactory, limit, limitToLast, limitUploadFileTypeDeterminer, limitedFirestoreDocumentAccessorFactory, loadAllFirestoreDocumentSnapshot, loadAllFirestoreDocumentSnapshotPairs, loadDocumentsForDocumentReferences, loadDocumentsForDocumentReferencesFromValues, loadDocumentsForIds, loadDocumentsForIdsFromValues, loadDocumentsForKeys, loadDocumentsForKeysFromValues, loadDocumentsForSnapshots, loadDocumentsForValues, loadNotificationBoxDocumentForReferencePair, loadStorageFileGroupDocumentForReferencePair, makeDocuments, makeFirestoreCollection, makeFirestoreCollectionGroup, makeFirestoreCollectionWithParent, makeFirestoreItemPageIteratorDelegate, makeFirestoreQueryConstraintFunctionsDriver, makeRootSingleItemFirestoreCollection, makeSingleItemFirestoreCollection, mapDataFromSnapshot, mapHttpsCallable, mergeNotificationBoxRecipientTemplateConfigRecords, mergeNotificationBoxRecipientTemplateConfigs, mergeNotificationBoxRecipients, mergeNotificationSendMessagesResult, mergeNotificationUserDefaultNotificationBoxRecipientConfig, mergeNotificationUserNotificationBoxRecipientConfigs, modelStorageSlashPathFactory, modifyBeforeSetInterceptAccessorFactoryFunction, newDocuments, newNotificationBoxRecipientForUid, noContentNotificationMessageFunctionFactory, noStringFormatInStorageUploadOptionsError, notificationBoxCollectionReference, notificationBoxConverter, notificationBoxFirestoreCollection, notificationBoxIdForModel, notificationBoxIdentity, notificationBoxModelCrudFunctionsConfig, notificationBoxRecipientTemplateConfigArrayToRecord, notificationBoxRecipientTemplateConfigRecordToArray, notificationBoxesFlaggedForNeedsInitializationQuery, notificationBoxesFlaggedInvalidQuery, notificationCollectionReference, notificationCollectionReferenceFactory, notificationConverter, notificationFirestoreCollectionFactory, notificationFirestoreCollectionGroup, notificationFunctionMap, notificationFunctionTypeConfigMap, notificationIdentity, notificationMessageFunction, notificationSendExclusionCanSendFunction, notificationSendFlagsImplyIsComplete, notificationSubtaskComplete, notificationSummariesFlaggedForNeedsInitializationQuery, notificationSummaryCollectionReference, notificationSummaryConverter, notificationSummaryFirestoreCollection, notificationSummaryIdForModel, notificationSummaryIdForUidFunctionForRootFirestoreModelIdentity, notificationSummaryIdentity, notificationTaskCanRunNextCheckpoint, notificationTaskComplete, notificationTaskDelayRetry, notificationTaskFailed, notificationTaskPartiallyComplete, notificationTaskUniqueId, notificationTemplateTypeInfoRecord, notificationUserCollectionReference, notificationUserConverter, notificationUserFirestoreCollection, notificationUserHasExclusionQuery, notificationUserIdentity, notificationUsersFlaggedForNeedsSyncQuery, notificationWeekCollectionReference, notificationWeekCollectionReferenceFactory, notificationWeekConverter, notificationWeekFirestoreCollectionFactory, notificationWeekFirestoreCollectionGroup, notificationWeekIdentity, notificationsPastSendAtTimeQuery, notificationsReadyForCleanupQuery, offset, onCallCreateModelParams, onCallCreateModelResult, onCallCreateModelResultWithDocs, onCallDeleteModelParams, onCallDevelopmentParams, onCallReadModelParams, onCallTypedModelParams, onCallTypedModelParamsFunction, onCallUpdateModelParams, optionalFirestoreArray, optionalFirestoreBoolean, optionalFirestoreDate, optionalFirestoreDateNumber, optionalFirestoreEnum, optionalFirestoreField, optionalFirestoreNumber, optionalFirestoreString, optionalFirestoreUID, optionalFirestoreUnitedStatesAddress, optionalFirestoreUnixDateTimeSecondsNumber, orderBy, orderByDocumentId, readFirestoreModelKey, readFirestoreModelKeyFromDocumentSnapshot, replaceConstraints, selectFromFirebaseModelsService, separateConstraints, setIdAndKeyFromKeyIdRefOnDocumentData, setIdAndKeyFromSnapshotOnDocumentData, shouldSaveNotificationToNotificationWeek, shouldSendCreatedNotificationInput, snapshotConverterFunctions, snapshotStreamDataForAccessor, snapshotStreamForAccessor, sortNotificationItemsFunction, startAfter, startAt, startAtValue, storageFileCollectionReference, storageFileConverter, storageFileFirestoreCollection, storageFileFlaggedForSyncWithGroupsQuery, storageFileFunctionMap, storageFileFunctionTypeConfigMap, storageFileGroupCollectionReference, storageFileGroupConverter, storageFileGroupCreateStorageFileKeyFactory, storageFileGroupCreatedStorageFileKey, storageFileGroupEmbeddedFile, storageFileGroupFirestoreCollection, storageFileGroupFolderPath, storageFileGroupIdForModel, storageFileGroupIdentity, storageFileGroupZipFileStoragePath, storageFileGroupZipStorageFileKey, storageFileGroupsFlaggedForContentRegenerationQuery, storageFileGroupsFlaggedForNeedsInitializationQuery, storageFileGroupsFlaggedInvalidQuery, storageFileIdentity, storageFileModelCrudFunctionsConfig, storageFileProcessingNotificationTaskTemplate, storageFilePurposeAndUserQuery, storageFileUploadUserSimpleClaimsConfiguration, storageFilesQueuedForDeleteQuery, storageFilesQueuedForProcessingQuery, storageListFilesResultFactory, storageListFilesResultHasNoNextError, storagePathFactory, storedFileReaderFactory, streamFromOnSnapshot, systemStateCollectionReference, systemStateConverter, systemStateFirestoreCollection, systemStateIdentity, twoWayFlatFirestoreModelKey, unreadNotificationItems, unsupportedFirestoreDriverFunctionError, updateNotificationBoxRecipientTemplateConfigRecord, updateNotificationRecipient, updateNotificationUserDefaultNotificationBoxRecipientConfig, updateNotificationUserNotificationBoxRecipientConfigIfChanged, updateNotificationUserNotificationBoxRecipientConfigs, updateNotificationUserNotificationSendExclusions, updateWithAccessorUpdateAndConverterFunction, uploadFileWithStream, useContextAuth, useContextAuthUid, useDocumentSnapshot, useDocumentSnapshotData, useFirebaseModelsService, userUploadsFolderSlashPathFactory, userUploadsFolderStoragePathFactory, where, whereDateIsAfter, whereDateIsAfterWithSort, whereDateIsBefore, whereDateIsBeforeWithSort, whereDateIsBetween, whereDateIsInRange, whereDateIsOnOrAfter, whereDateIsOnOrAfterWithSort, whereDateIsOnOrBefore, whereDateIsOnOrBeforeWithSort, whereDocumentId, whereStringHasRootIdentityModelKey, whereStringValueHasPrefix };
9676
+ export { ALL_STORAGE_FILE_NOTIFICATION_TASK_TYPES, ALL_USER_UPLOADS_FOLDER_NAME, ALL_USER_UPLOADS_FOLDER_PATH, AbstractFirestoreDocument, AbstractFirestoreDocumentDataAccessorWrapper, AbstractFirestoreDocumentWithParent, AbstractSubscribeOrUnsubscribeToNotificationBoxParams, AbstractSubscribeToNotificationBoxParams, AppNotificationTemplateTypeInfoRecordService, BASE_MODEL_STORAGE_FILE_PATH, CALL_MODEL_APP_FUNCTION_KEY, COPY_USER_RELATED_DATA_ACCESSOR_FACTORY_FUNCTION, CREATE_NOTIFICATION_ID_REQUIRED_ERROR_CODE, CleanupSentNotificationsParams, ContextGrantedModelRolesReaderInstance, CreateNotificationBoxParams, CreateNotificationSummaryParams, CreateNotificationUserParams, CreateStorageFileGroupParams, CreateStorageFileParams, DBX_FIREBASE_SERVER_NO_AUTH_ERROR_CODE, DBX_FIREBASE_SERVER_NO_UID_ERROR_CODE, DEFAULT_DATE_CELL_RANGE_VALUE, DEFAULT_FIRESTORE_DATE_CELL_SCHEDULE_VALUE, DEFAULT_FIRESTORE_ITEM_PAGE_ITERATOR_ITEMS_PER_PAGE, DEFAULT_FIRESTORE_STRING_FIELD_VALUE, DEFAULT_FIRESTORE_UNITED_STATES_ADDRESS_VALUE, DEFAULT_FIRESTORE_WEBSITE_FILE_LINK_VALUE, DEFAULT_ITERATE_FIRESTORE_DOCUMENT_SNAPSHOT_BATCHES_BATCH_SIZE, DEFAULT_NOTIFICATION_TASK_NOTIFICATION_MODEL_KEY, DEFAULT_NOTIFICATION_TASK_SUBTASK_CLEANUP_RETRY_ATTEMPTS, DEFAULT_NOTIFICATION_TASK_SUBTASK_CLEANUP_RETRY_DELAY, DEFAULT_NOTIFICATION_TEMPLATE_TYPE, DEFAULT_QUERY_CHANGE_WATCHER_DELAY, DEFAULT_SINGLE_ITEM_FIRESTORE_COLLECTION_DOCUMENT_IDENTIFIER, DEFAULT_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, DEFAULT_WEBSITE_LINK, DeleteAllQueuedStorageFilesParams, DeleteStorageFileParams, DownloadStorageFileParams, EMPTY_STORAGE_FILE_PURPOSE_SUBGROUP, EXACT_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, FIREBASE_AUTH_NETWORK_REQUEST_ERROR, FIREBASE_AUTH_NETWORK_REQUEST_FAILED, FIREBASE_AUTH_PASSWORD_MAX_LENGTH, FIREBASE_AUTH_PASSWORD_MIN_LENGTH, FIREBASE_AUTH_USER_NOT_FOUND_ERROR, FIREBASE_AUTH_WRONG_PASSWORD, FIREBASE_DEVELOPMENT_FUNCTIONS_MAP_KEY, FIREBASE_SERVER_AUTH_CLAIMS_RESET_LAST_COM_DATE_KEY, FIREBASE_SERVER_AUTH_CLAIMS_RESET_PASSWORD_KEY, FIREBASE_SERVER_AUTH_CLAIMS_SETUP_LAST_COM_DATE_KEY, FIREBASE_SERVER_AUTH_CLAIMS_SETUP_PASSWORD_KEY, FIRESTORE_CLIENT_QUERY_CONSTRAINT_HANDLER_MAPPING, FIRESTORE_COLLECTION_NAME_SEPARATOR, FIRESTORE_DUMMY_MODEL_KEY, FIRESTORE_EMPTY_VALUE, FIRESTORE_END_AT_QUERY_CONSTRAINT_TYPE, FIRESTORE_END_AT_VALUE_QUERY_CONSTRAINT_TYPE, FIRESTORE_END_BEFORE_QUERY_CONSTRAINT_TYPE, FIRESTORE_ITEM_PAGE_ITERATOR, FIRESTORE_ITEM_PAGE_ITERATOR_DELEGATE, FIRESTORE_LIMIT_QUERY_CONSTRAINT_TYPE, FIRESTORE_LIMIT_TO_LAST_QUERY_CONSTRAINT_TYPE, FIRESTORE_MAX_WHERE_IN_FILTER_ARGS_COUNT, FIRESTORE_MODEL_ID_REGEX, FIRESTORE_MODEL_KEY_REGEX, FIRESTORE_MODEL_KEY_REGEX_STRICT, FIRESTORE_OFFSET_QUERY_CONSTRAINT_TYPE, FIRESTORE_ORDER_BY_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE, FIRESTORE_ORDER_BY_QUERY_CONSTRAINT_TYPE, FIRESTORE_PASSTHROUGH_FIELD, FIRESTORE_PERMISSION_DENIED_ERROR_CODE, FIRESTORE_START_AFTER_QUERY_CONSTRAINT_TYPE, FIRESTORE_START_AT_QUERY_CONSTRAINT_TYPE, FIRESTORE_START_AT_VALUE_QUERY_CONSTRAINT_TYPE, FIRESTORE_WHERE_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE, FIRESTORE_WHERE_QUERY_CONSTRAINT_TYPE, FirebaseDevelopmentFunctions, FirebaseModelPermissionServiceInstance, FirebaseServerError, FirestoreAccessorStreamMode, FirestoreDocumentContextType, HIGH_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, InferredTargetModelIdParams, InferredTargetModelParams, InitializeAllApplicableNotificationBoxesParams, InitializeAllApplicableNotificationSummariesParams, InitializeAllApplicableStorageFileGroupsParams, InitializeAllStorageFilesFromUploadsParams, InitializeNotificationModelParams, InitializeStorageFileFromUploadParams, InitializeStorageFileModelParams, IsFirestoreModelId, IsFirestoreModelIdOrKey, IsFirestoreModelKey, LOW_UPLOADED_FILE_TYPE_DETERMINATION_LEVEL, MAX_FIRESTORE_MAP_ZOOM_LEVEL_VALUE, MIN_FIRESTORE_MAP_ZOOM_LEVEL_VALUE, MODEL_FUNCTION_FIREBASE_CRUD_FUNCTION_SPECIFIER_DEFAULT, MODEL_FUNCTION_FIREBASE_CRUD_FUNCTION_SPECIFIER_SPLITTER, MODEL_STORAGE_FILE_SLASH_PATH_FACTORY, ModifyBeforeSetFirestoreDocumentDataAccessorWrapper, NOTIFICATION_BOX_DOES_NOT_EXIST_ERROR_CODE, NOTIFICATION_BOX_EXCLUSION_TARGET_INVALID_ERROR_CODE, NOTIFICATION_BOX_EXISTS_FOR_MODEL_ERROR_CODE, NOTIFICATION_BOX_RECIPIENT_DOES_NOT_EXIST_ERROR_CODE, NOTIFICATION_MESSAGE_MAX_LENGTH, NOTIFICATION_MESSAGE_MIN_LENGTH, NOTIFICATION_MODEL_ALREADY_INITIALIZED_ERROR_CODE, NOTIFICATION_RECIPIENT_NAME_MAX_LENGTH, NOTIFICATION_RECIPIENT_NAME_MIN_LENGTH, NOTIFICATION_SUBJECT_MAX_LENGTH, NOTIFICATION_SUBJECT_MIN_LENGTH, NOTIFICATION_SUMMARY_EMBEDDED_NOTIFICATION_ITEM_MESSAGE_MAX_LENGTH, NOTIFICATION_SUMMARY_EMBEDDED_NOTIFICATION_ITEM_SUBJECT_MAX_LENGTH, NOTIFICATION_SUMMARY_ITEM_LIMIT, NOTIFICATION_TASK_SUBTASK_CHECKPOINT_CLEANUP, NOTIFICATION_TASK_SUBTASK_CHECKPOINT_PROCESSING, NOTIFICATION_USER_BLOCKED_FROM_BEING_ADD_TO_RECIPIENTS_ERROR_CODE, NOTIFICATION_USER_INVALID_UID_FOR_CREATE_ERROR_CODE, NOTIFICATION_USER_LOCKED_CONFIG_FROM_BEING_UPDATED_ERROR_CODE, NOTIFICATION_WEEK_NOTIFICATION_ITEM_LIMIT, NotificationBoxDocument, NotificationBoxRecipientFlag, NotificationBoxRecipientTemplateConfigArrayEntryParam, NotificationBoxRecipientTemplateConfigBoolean, NotificationDocument, NotificationFirestoreCollections, NotificationFunctions, NotificationMessageFlag, NotificationRecipientParams, NotificationRecipientSendFlag, NotificationSendState, NotificationSendType, NotificationSummaryDocument, NotificationUserDocument, NotificationWeekDocument, ProcessAllQueuedStorageFilesParams, ProcessStorageFileParams, RUN_DEV_FUNCTION_APP_FUNCTION_KEY, RegenerateAllFlaggedStorageFileGroupsContentParams, RegenerateStorageFileGroupContentParams, ResyncAllNotificationUserParams, ResyncNotificationUserParams, SCHEDULED_FUNCTION_DEV_FUNCTION_SPECIFIER, STORAGEFILE_RELATED_FILE_METADATA_KEY, STORAGE_FILE_ALREADY_PROCESSED_ERROR_CODE, STORAGE_FILE_CANNOT_BE_DELETED_YET_ERROR_CODE, STORAGE_FILE_GROUP_CREATE_INPUT_ERROR_CODE, STORAGE_FILE_GROUP_QUEUED_FOR_INITIALIZATION_ERROR_CODE, STORAGE_FILE_GROUP_ROOT_FOLDER_PATH, STORAGE_FILE_GROUP_ZIP_FILE_PATH, STORAGE_FILE_GROUP_ZIP_INFO_JSON_FILE_NAME, STORAGE_FILE_GROUP_ZIP_STORAGE_FILE_PURPOSE, STORAGE_FILE_GROUP_ZIP_STORAGE_FILE_PURPOSE_CREATE_ZIP_SUBTASK, STORAGE_FILE_MODEL_ALREADY_INITIALIZED_ERROR_CODE, STORAGE_FILE_NOT_FLAGGED_FOR_DELETION_ERROR_CODE, STORAGE_FILE_NOT_FLAGGED_FOR_GROUPS_SYNC_ERROR_CODE, STORAGE_FILE_PROCESSING_NOTIFICATION_TASK_TYPE, STORAGE_FILE_PROCESSING_NOT_ALLOWED_FOR_INVALID_STATE_ERROR_CODE, STORAGE_FILE_PROCESSING_NOT_AVAILABLE_FOR_TYPE_ERROR_CODE, STORAGE_FILE_PROCESSING_NOT_QUEUED_FOR_PROCESSING_ERROR_CODE, STORAGE_FILE_PROCESSING_STUCK_THROTTLE_CHECK_MS, STORAGE_FILE_UPLOAD_USER_ROLE, ScheduledFunctionDevelopmentFirebaseFunctionListEntry, ScheduledFunctionDevelopmentFirebaseFunctionParams, ScheduledFunctionDevelopmentFunctionTypeEnum, SendNotificationParams, SendQueuedNotificationsParams, StorageFileCreationType, StorageFileDocument, StorageFileFirestoreCollections, StorageFileFunctions, StorageFileGroupDocument, StorageFileProcessingState, StorageFileState, StorageFileUploadStreamUnsupportedError, SyncAllFlaggedStorageFilesWithGroupsParams, SyncStorageFileWithGroupsParams, SystemStateDocument, SystemStateFirestoreCollections, TargetModelIdParams, TargetModelParams, UPLOADED_FILE_DOES_NOT_EXIST_ERROR_CODE, UPLOADED_FILE_INITIALIZATION_DISCARDED_ERROR_CODE, UPLOADED_FILE_INITIALIZATION_FAILED_ERROR_CODE, UPLOADED_FILE_NOT_ALLOWED_TO_BE_INITIALIZED_ERROR_CODE, UPLOADS_FOLDER_PATH, UpdateNotificationBoxParams, UpdateNotificationBoxRecipientLikeParams, UpdateNotificationBoxRecipientParams, UpdateNotificationSummaryParams, UpdateNotificationUserDefaultNotificationBoxRecipientConfigParams, UpdateNotificationUserNotificationBoxRecipientParams, UpdateNotificationUserParams, UpdateStorageFileGroupEntryParams, UpdateStorageFileGroupParams, UpdateStorageFileParams, _createNotificationDocumentFromPair, addConstraintToBuilder, addOrReplaceLimitInConstraints, allChildDocumentsUnderParent, allChildDocumentsUnderParentPath, allChildDocumentsUnderRelativePath, allowDocumentSnapshotWithPathOnceFilter, allowedNotificationRecipients, appNotificationTemplateTypeInfoRecordService, applyExclusionsToNotificationUserNotificationBoxRecipientConfigs, arrayUpdateWithAccessorFunction, asTopLevelFieldPath, asTopLevelFieldPaths, assertFirestoreUpdateHasData, assertStorageUploadOptionsStringFormat, assignDateCellRangeFunction, assignDateCellScheduleFunction, assignUnitedStatesAddressFunction, assignWebsiteFileLinkFunction, assignWebsiteLinkFunction, buildFirebaseCollectionTypeModelTypeMap, calculateNsForNotificationUserNotificationBoxRecipientConfigs, calculateStorageFileGroupEmbeddedFileUpdate, calculateStorageFileGroupRegeneration, callModelFirebaseFunctionMapFactory, canQueueStorageFileForProcessing, childFirestoreModelKey, childFirestoreModelKeyPath, childFirestoreModelKeys, clientFirebaseFirestoreContextFactory, clientFirebaseStorageContextFactory, combineUploadFileTypeDeterminers, completeSubtaskProcessingAndScheduleCleanupTaskResult, contextGrantedModelRolesReader, contextGrantedModelRolesReaderDoesNotExistErrorMessage, contextGrantedModelRolesReaderPermissionErrorMessage, convertHttpsCallableErrorToReadableError, copyDocumentIdForUserRelatedModifierFunction, copyDocumentIdToFieldModifierFunction, copyStoragePath, copyUserRelatedDataAccessorFactoryFunction, copyUserRelatedDataModifierConfig, createNotificationDocument, createNotificationDocumentIfSending, createNotificationDocumentPair, createNotificationTaskTemplate, createNotificationTemplate, createStorageFileDocumentPair, createStorageFileDocumentPairFactory, dataFromDocumentSnapshots, dataFromSnapshotStream, delayCompletion, determineByFileName, determineByFilePath, determineByFolderName, determineUserByFolder, determineUserByFolderWrapperFunction, determineUserByUserUploadsFolderWrapperFunction, developmentFirebaseFunctionMapFactory, directDataHttpsCallable, documentData, documentDataFunction, documentDataWithIdAndKey, documentReferenceFromDocument, documentReferencesFromDocuments, documentReferencesFromSnapshot, effectiveNotificationBoxRecipientConfig, effectiveNotificationBoxRecipientTemplateConfig, endAt, endAtValue, endBefore, extendFirestoreCollectionWithSingleDocumentAccessor, filterConstraintsOfType, filterDisallowedFirestoreItemPageIteratorInputConstraints, filterRepeatCheckpointSnapshots, filterWithDateRange, firebaseAuthErrorToReadableError, firebaseFirestoreClientDrivers, firebaseFirestoreQueryConstraintFunctionsDriver, firebaseFirestoreQueryDriver, firebaseFunctionMapFactory, firebaseModelLoader, firebaseModelPermissionService, firebaseModelService, firebaseModelServiceFactory, firebaseModelsService, firebaseQueryItemAccumulator, firebaseQuerySnapshotAccumulator, firebaseStorageBucketFolderPath, firebaseStorageClientAccessorDriver, firebaseStorageClientAccessorFile, firebaseStorageClientAccessorFolder, firebaseStorageClientDrivers, firebaseStorageClientListFilesResultFactory, firebaseStorageContextFactory, firebaseStorageFileExists, firebaseStorageFilePathFromStorageFilePath, firebaseStorageRefForStorageFilePath, firestoreArray, firestoreArrayMap, firestoreBitwiseObjectMap, firestoreBitwiseSet, firestoreBitwiseSetMap, firestoreBoolean, firestoreClientAccessorDriver, firestoreClientArrayUpdateToUpdateData, firestoreClientIncrementUpdateToUpdateData, firestoreCollectionQueryFactory, firestoreContextFactory, firestoreDate, firestoreDateCellRange, firestoreDateCellRangeArray, firestoreDateCellRangeAssignFn, firestoreDateCellSchedule, firestoreDateCellScheduleAssignFn, firestoreDateNumber, firestoreDencoderArray, firestoreDencoderMap, firestoreDencoderStringArray, firestoreDocumentAccessorContextExtension, firestoreDocumentAccessorFactory, firestoreDocumentLoader, firestoreDocumentSnapshotPairsLoader, firestoreDocumentSnapshotPairsLoaderInstance, firestoreDummyKey, firestoreEncodedArray, firestoreEncodedObjectMap, firestoreEnum, firestoreEnumArray, firestoreField, firestoreFieldConfigToModelMapFunctionsRef, firestoreFixedItemPageIteration, firestoreFixedItemPageIterationFactory, firestoreIdBatchVerifierFactory, firestoreIdentityTypeArray, firestoreIdentityTypeArrayName, firestoreItemPageIteration, firestoreItemPageIterationFactory, firestoreLatLngString, firestoreMap, firestoreMapZoomLevel, firestoreModelId, firestoreModelIdArrayField, firestoreModelIdFromDocument, firestoreModelIdFromEmail, firestoreModelIdGrantedRoleArrayMap, firestoreModelIdGrantedRoleMap, firestoreModelIdString, firestoreModelIdentity, firestoreModelIdentityTypeMap, firestoreModelIdsFromDocuments, firestoreModelIdsFromKey, firestoreModelKey, firestoreModelKeyArrayField, firestoreModelKeyCollectionName, firestoreModelKeyCollectionType, firestoreModelKeyCollectionTypeArray, firestoreModelKeyCollectionTypeArrayName, firestoreModelKeyCollectionTypePair, firestoreModelKeyEncodedGrantedRoleMap, firestoreModelKeyFactory, firestoreModelKeyFromDocument, firestoreModelKeyGrantedRoleArrayMap, firestoreModelKeyGrantedRoleMap, firestoreModelKeyPairObject, firestoreModelKeyParentKey, firestoreModelKeyParentKeyPartPairs, firestoreModelKeyPart, firestoreModelKeyPartPairs, firestoreModelKeyPartPairsKeyPath, firestoreModelKeyPartPairsPaths, firestoreModelKeyPath, firestoreModelKeyString, firestoreModelKeyTypePair, firestoreModelKeys, firestoreModelKeysFromDocuments, firestoreModelType, firestoreNotificationBoxRecipient, firestoreNotificationBoxRecipientTemplateConfigRecord, firestoreNotificationItem, firestoreNotificationRecipientWithConfig, firestoreNotificationUserDefaultNotificationBoxRecipientConfig, firestoreNotificationUserNotificationBoxRecipientConfig, firestoreNumber, firestoreObjectArray, firestorePassThroughField, firestoreQueryConstraint, firestoreQueryConstraintFactory, firestoreQueryDocumentSnapshotPairsLoader, firestoreQueryFactory, firestoreSingleDocumentAccessor, firestoreString, firestoreSubObject, firestoreTimezoneString, firestoreUID, firestoreUniqueArray, firestoreUniqueKeyedArray, firestoreUniqueNumberArray, firestoreUniqueStringArray, firestoreUnitedStatesAddress, firestoreUnitedStatesAddressAssignFn, firestoreUnixDateTimeSecondsNumber, firestoreUpdateWithNoDataError, firestoreWebsiteFileLink, firestoreWebsiteFileLinkAssignFn, firestoreWebsiteFileLinkEncodedArray, firestoreWebsiteFileLinkObjectArray, firestoreWebsiteLink, firestoreWebsiteLinkArray, firestoreWebsiteLinkAssignFn, flatFirestoreModelKey, getDataFromDocumentSnapshots, getDocumentSnapshotData, getDocumentSnapshotDataPair, getDocumentSnapshotDataPairs, getDocumentSnapshotDataPairsWithData, getDocumentSnapshotDataTuples, getDocumentSnapshotPair, getDocumentSnapshotPairs, getDocumentSnapshots, getDocumentSnapshotsData, grantFullAccessIfAdmin, grantFullAccessIfAuthUserRelated, grantModelRolesIfAdmin, grantModelRolesIfAdminFunction, grantModelRolesIfAuthUserRelatedModelFunction, grantModelRolesIfFunction, grantModelRolesIfHasAuthRolesFactory, grantModelRolesIfHasAuthRolesFunction, grantModelRolesOnlyIfFunction, grantStorageFileRolesForUserAuthFunction, inContextFirebaseModelServiceFactory, inContextFirebaseModelsServiceFactory, incrementUpdateWithAccessorFunction, inferKeyFromTwoWayFlatFirestoreModelKey, inferNotificationBoxRelatedModelKey, inferStorageFileGroupRelatedModelKey, interceptAccessorFactoryFunction, isAdminInFirebaseModelContext, isClientFirebaseError, isCompleteNotificationSendState, isFirebaseStorageObjectNotFoundError, isFirestoreModelId, isFirestoreModelIdOrKey, isFirestoreModelKey, isOwnerOfUserRelatedModelInFirebaseModelContext, iterateFirestoreDocumentSnapshotBatches, iterateFirestoreDocumentSnapshotCheckpoints, iterateFirestoreDocumentSnapshotPairBatches, iterateFirestoreDocumentSnapshotPairs, iterateFirestoreDocumentSnapshots, iterateStorageListFiles, iterateStorageListFilesByEachFile, iterateStorageListFilesFactory, iterationQueryDocChangeWatcher, iterationQueryDocChangeWatcherChangeTypeForGroup, latestDataFromDocuments, latestSnapshotsFromDocuments, lazyFirebaseFunctionsFactory, limit, limitToLast, limitUploadFileTypeDeterminer, limitedFirestoreDocumentAccessorFactory, limitedFirestoreDocumentAccessorSnapshotCache, loadAllFirestoreDocumentSnapshot, loadAllFirestoreDocumentSnapshotPairs, loadDocumentsForDocumentReferences, loadDocumentsForDocumentReferencesFromValues, loadDocumentsForIds, loadDocumentsForIdsFromValues, loadDocumentsForKeys, loadDocumentsForKeysFromValues, loadDocumentsForSnapshots, loadDocumentsForValues, loadNotificationBoxDocumentForReferencePair, loadStorageFileGroupDocumentForReferencePair, makeDocuments, makeFirestoreCollection, makeFirestoreCollectionGroup, makeFirestoreCollectionWithParent, makeFirestoreItemPageIteratorDelegate, makeFirestoreQueryConstraintFunctionsDriver, makeRootSingleItemFirestoreCollection, makeSingleItemFirestoreCollection, mapDataFromSnapshot, mapHttpsCallable, mapLatestSnapshotsFromDocuments, mergeNotificationBoxRecipientTemplateConfigRecords, mergeNotificationBoxRecipientTemplateConfigs, mergeNotificationBoxRecipients, mergeNotificationSendMessagesResult, mergeNotificationUserDefaultNotificationBoxRecipientConfig, mergeNotificationUserNotificationBoxRecipientConfigs, modelStorageSlashPathFactory, modifyBeforeSetInterceptAccessorFactoryFunction, newDocuments, newNotificationBoxRecipientForUid, noContentNotificationMessageFunctionFactory, noStringFormatInStorageUploadOptionsError, notificationBoxCollectionReference, notificationBoxConverter, notificationBoxFirestoreCollection, notificationBoxIdForModel, notificationBoxIdentity, notificationBoxModelCrudFunctionsConfig, notificationBoxRecipientTemplateConfigArrayToRecord, notificationBoxRecipientTemplateConfigRecordToArray, notificationBoxesFlaggedForNeedsInitializationQuery, notificationBoxesFlaggedInvalidQuery, notificationCollectionReference, notificationCollectionReferenceFactory, notificationConverter, notificationFirestoreCollectionFactory, notificationFirestoreCollectionGroup, notificationFunctionMap, notificationFunctionTypeConfigMap, notificationIdentity, notificationMessageFunction, notificationSendExclusionCanSendFunction, notificationSendFlagsImplyIsComplete, notificationSubtaskComplete, notificationSummariesFlaggedForNeedsInitializationQuery, notificationSummaryCollectionReference, notificationSummaryConverter, notificationSummaryFirestoreCollection, notificationSummaryIdForModel, notificationSummaryIdForUidFunctionForRootFirestoreModelIdentity, notificationSummaryIdentity, notificationTaskCanRunNextCheckpoint, notificationTaskComplete, notificationTaskDelayRetry, notificationTaskFailed, notificationTaskPartiallyComplete, notificationTaskUniqueId, notificationTemplateTypeInfoRecord, notificationUserCollectionReference, notificationUserConverter, notificationUserFirestoreCollection, notificationUserHasExclusionQuery, notificationUserIdentity, notificationUsersFlaggedForNeedsSyncQuery, notificationWeekCollectionReference, notificationWeekCollectionReferenceFactory, notificationWeekConverter, notificationWeekFirestoreCollectionFactory, notificationWeekFirestoreCollectionGroup, notificationWeekIdentity, notificationsPastSendAtTimeQuery, notificationsReadyForCleanupQuery, offset, onCallCreateModelParams, onCallCreateModelResult, onCallCreateModelResultWithDocs, onCallDeleteModelParams, onCallDevelopmentParams, onCallReadModelParams, onCallTypedModelParams, onCallTypedModelParamsFunction, onCallUpdateModelParams, optionalFirestoreArray, optionalFirestoreBoolean, optionalFirestoreDate, optionalFirestoreDateNumber, optionalFirestoreEnum, optionalFirestoreField, optionalFirestoreNumber, optionalFirestoreString, optionalFirestoreUID, optionalFirestoreUnitedStatesAddress, optionalFirestoreUnixDateTimeSecondsNumber, orderBy, orderByDocumentId, readFirestoreModelKey, readFirestoreModelKeyFromDocumentSnapshot, replaceConstraints, selectFromFirebaseModelsService, separateConstraints, setIdAndKeyFromKeyIdRefOnDocumentData, setIdAndKeyFromSnapshotOnDocumentData, shouldSaveNotificationToNotificationWeek, shouldSendCreatedNotificationInput, snapshotConverterFunctions, snapshotStreamDataForAccessor, snapshotStreamForAccessor, sortNotificationItemsFunction, startAfter, startAt, startAtValue, storageFileCollectionReference, storageFileConverter, storageFileFirestoreCollection, storageFileFlaggedForSyncWithGroupsQuery, storageFileFunctionMap, storageFileFunctionTypeConfigMap, storageFileGroupCollectionReference, storageFileGroupConverter, storageFileGroupCreateStorageFileKeyFactory, storageFileGroupCreatedStorageFileKey, storageFileGroupEmbeddedFile, storageFileGroupFirestoreCollection, storageFileGroupFolderPath, storageFileGroupIdForModel, storageFileGroupIdentity, storageFileGroupZipFileStoragePath, storageFileGroupZipStorageFileKey, storageFileGroupsFlaggedForContentRegenerationQuery, storageFileGroupsFlaggedForNeedsInitializationQuery, storageFileGroupsFlaggedInvalidQuery, storageFileIdentity, storageFileModelCrudFunctionsConfig, storageFileProcessingNotificationTaskTemplate, storageFilePurposeAndUserQuery, storageFileUploadUserSimpleClaimsConfiguration, storageFilesQueuedForDeleteQuery, storageFilesQueuedForProcessingQuery, storageListFilesResultFactory, storageListFilesResultHasNoNextError, storagePathFactory, storedFileReaderFactory, streamDocumentSnapshotDataPairs, streamDocumentSnapshotDataPairsWithData, streamDocumentSnapshotsData, streamFromOnSnapshot, systemStateCollectionReference, systemStateConverter, systemStateFirestoreCollection, systemStateIdentity, twoWayFlatFirestoreModelKey, unreadNotificationItems, unsupportedFirestoreDriverFunctionError, updateNotificationBoxRecipientTemplateConfigRecord, updateNotificationRecipient, updateNotificationUserDefaultNotificationBoxRecipientConfig, updateNotificationUserNotificationBoxRecipientConfigIfChanged, updateNotificationUserNotificationBoxRecipientConfigs, updateNotificationUserNotificationSendExclusions, updateWithAccessorUpdateAndConverterFunction, uploadFileWithStream, useContextAuth, useContextAuthUid, useDocumentSnapshot, useDocumentSnapshotData, useFirebaseModelsService, userUploadsFolderSlashPathFactory, userUploadsFolderStoragePathFactory, where, whereDateIsAfter, whereDateIsAfterWithSort, whereDateIsBefore, whereDateIsBeforeWithSort, whereDateIsBetween, whereDateIsInRange, whereDateIsOnOrAfter, whereDateIsOnOrAfterWithSort, whereDateIsOnOrBefore, whereDateIsOnOrBeforeWithSort, whereDocumentId, whereStringHasRootIdentityModelKey, whereStringValueHasPrefix };
9253
9677
  //# sourceMappingURL=index.esm.js.map