@dereekb/firebase 13.11.2 → 13.11.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/index.cjs.js +2467 -568
  2. package/index.esm.js +2443 -572
  3. package/package.json +5 -5
  4. package/src/lib/client/firestore/array.d.ts +1 -0
  5. package/src/lib/client/firestore/driver.accessor.batch.d.ts +1 -0
  6. package/src/lib/client/firestore/driver.accessor.create.d.ts +1 -0
  7. package/src/lib/client/firestore/driver.accessor.d.ts +1 -0
  8. package/src/lib/client/firestore/driver.accessor.default.d.ts +1 -0
  9. package/src/lib/client/firestore/driver.accessor.transaction.d.ts +1 -0
  10. package/src/lib/client/firestore/increment.d.ts +1 -0
  11. package/src/lib/client/function/development.function.factory.d.ts +1 -0
  12. package/src/lib/client/function/function.factory.d.ts +2 -0
  13. package/src/lib/client/function/model.function.factory.d.ts +1 -0
  14. package/src/lib/common/firestore/accessor/accessor.d.ts +1 -0
  15. package/src/lib/common/firestore/accessor/accessor.wrap.d.ts +1 -0
  16. package/src/lib/common/firestore/accessor/accessor.wrap.modify.d.ts +4 -0
  17. package/src/lib/common/firestore/accessor/array.d.ts +1 -0
  18. package/src/lib/common/firestore/accessor/document.d.ts +4 -0
  19. package/src/lib/common/firestore/accessor/document.paged.d.ts +134 -0
  20. package/src/lib/common/firestore/accessor/document.utility.d.ts +195 -0
  21. package/src/lib/common/firestore/accessor/increment.d.ts +1 -0
  22. package/src/lib/common/firestore/accessor/index.d.ts +1 -0
  23. package/src/lib/common/firestore/cache/cache.d.ts +1 -0
  24. package/src/lib/common/firestore/cache/cache.memory.d.ts +3 -0
  25. package/src/lib/common/firestore/collection/collection.d.ts +29 -2
  26. package/src/lib/common/firestore/collection/collection.group.d.ts +1 -0
  27. package/src/lib/common/firestore/collection/collection.query.d.ts +1 -0
  28. package/src/lib/common/firestore/collection/collection.single.d.ts +1 -0
  29. package/src/lib/common/firestore/collection/collection.util.d.ts +1 -0
  30. package/src/lib/common/firestore/collection/index.d.ts +1 -0
  31. package/src/lib/common/firestore/collection/subcollection.d.ts +1 -0
  32. package/src/lib/common/firestore/collection/subcollection.paged.d.ts +226 -0
  33. package/src/lib/common/firestore/collection/subcollection.single.d.ts +1 -0
  34. package/src/lib/common/firestore/context.d.ts +37 -1
  35. package/src/lib/common/firestore/driver/query.handler.d.ts +1 -0
  36. package/src/lib/common/firestore/error.d.ts +1 -0
  37. package/src/lib/common/firestore/query/constraint.d.ts +2 -0
  38. package/src/lib/common/firestore/query/iterator.d.ts +5 -0
  39. package/src/lib/common/firestore/query/query.d.ts +1 -0
  40. package/src/lib/common/firestore/snapshot/snapshot.d.ts +1 -0
  41. package/src/lib/common/firestore/snapshot/snapshot.field.d.ts +262 -0
  42. package/src/lib/common/firestore/util/id.batch.d.ts +1 -0
  43. package/src/lib/common/model/function.d.ts +1 -0
  44. package/src/lib/common/model/model.service.d.ts +8 -0
  45. package/src/lib/common/model/permission/permission.service.d.ts +1 -0
  46. package/src/lib/common/model/permission/permission.service.grant.d.ts +6 -0
  47. package/src/lib/common/storage/accessor/path.model.d.ts +1 -0
  48. package/src/lib/common/storage/context.d.ts +1 -0
  49. package/src/lib/common/storage/driver/accessor.iterate.d.ts +1 -0
  50. package/src/lib/common/storage/driver/list.d.ts +1 -0
  51. package/src/lib/common/storage/storage.d.ts +1 -0
  52. package/src/lib/model/notification/index.d.ts +2 -0
  53. package/src/lib/model/notification/notification.api.d.ts +36 -1
  54. package/src/lib/model/notification/notification.config.d.ts +1 -0
  55. package/src/lib/model/notification/notification.create.d.ts +2 -0
  56. package/src/lib/model/notification/notification.create.loggedevent.d.ts +33 -0
  57. package/src/lib/model/notification/notification.create.task.d.ts +1 -0
  58. package/src/lib/model/notification/notification.d.ts +179 -3
  59. package/src/lib/model/notification/notification.details.d.ts +1 -0
  60. package/src/lib/model/notification/notification.id.d.ts +23 -1
  61. package/src/lib/model/notification/notification.loggedevent.loader.d.ts +82 -0
  62. package/src/lib/model/notification/notification.message.d.ts +2 -0
  63. package/src/lib/model/notification/notification.query.d.ts +17 -0
  64. package/src/lib/model/notification/notification.util.d.ts +12 -1
  65. package/src/lib/model/oidcmodel/oidcmodel.api.d.ts +23 -0
  66. package/src/lib/model/oidcmodel/oidcmodel.d.ts +18 -0
  67. package/src/lib/model/oidcmodel/oidcmodel.data.d.ts +26 -0
  68. package/src/lib/model/oidcmodel/oidcmodel.query.d.ts +18 -0
  69. package/src/lib/model/storagefile/storagefile.create.d.ts +1 -0
  70. package/src/lib/model/storagefile/storagefile.d.ts +1 -0
  71. package/src/lib/model/storagefile/storagefile.file.d.ts +1 -0
  72. package/src/lib/model/storagefile/storagefile.permission.d.ts +1 -0
  73. package/src/lib/model/storagefile/storagefile.upload.d.ts +2 -0
  74. package/src/lib/model/storagefile/storagefile.upload.determiner.d.ts +2 -0
  75. package/test/index.cjs.js +1038 -1
  76. package/test/index.esm.js +1031 -3
  77. package/test/package.json +6 -6
  78. package/test/src/lib/common/mock/mock.item.d.ts +119 -2
  79. package/test/src/lib/common/mock/mock.item.service.d.ts +21 -1
package/test/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@dereekb/firebase/test",
3
- "version": "13.11.2",
3
+ "version": "13.11.4",
4
4
  "peerDependencies": {
5
- "@dereekb/date": "13.11.2",
6
- "@dereekb/firebase": "13.11.2",
7
- "@dereekb/model": "13.11.2",
8
- "@dereekb/rxjs": "13.11.2",
9
- "@dereekb/util": "13.11.2",
5
+ "@dereekb/date": "13.11.4",
6
+ "@dereekb/firebase": "13.11.4",
7
+ "@dereekb/model": "13.11.4",
8
+ "@dereekb/rxjs": "13.11.4",
9
+ "@dereekb/util": "13.11.4",
10
10
  "@firebase/rules-unit-testing": "5.0.0",
11
11
  "date-fns": "^4.1.0",
12
12
  "firebase": "^12.12.1",
@@ -1,5 +1,5 @@
1
1
  import { type Maybe } from '@dereekb/util';
2
- import { type CollectionReference, type FirestoreCollection, type FirestoreContext, AbstractFirestoreDocument, type SingleItemFirestoreCollection, type FirestoreCollectionWithParent, AbstractFirestoreDocumentWithParent, type ExpectedFirestoreModelData, type FirestoreModelData, type CollectionGroup, type FirestoreCollectionGroup, type UserRelated, type UserRelatedById, type SystemStateStoredData, type SystemStateStoredDataConverterMap, type SystemStateStoredDataFieldConverterConfig } from '@dereekb/firebase';
2
+ import { type CollectionReference, type FirestoreCollection, type FirestoreContext, AbstractFirestoreDocument, type SingleItemFirestoreCollection, type FirestoreCollectionWithParent, AbstractFirestoreDocumentWithParent, type ExpectedFirestoreModelData, type FirestoreModelData, type CollectionGroup, type FirestoreCollectionGroup, type UserRelated, type UserRelatedById, type SystemStateStoredData, type SystemStateStoredDataConverterMap, type SystemStateStoredDataFieldConverterConfig, type PagedItemConverter, type PagedItemDistributionScheme, type PagedItemFirestoreCollection, type PagedItemPageData } from '@dereekb/firebase';
3
3
  import { type GrantedReadRole } from '@dereekb/model';
4
4
  /**
5
5
  * Union of all mock model identity types used in the test suite.
@@ -7,7 +7,7 @@ import { type GrantedReadRole } from '@dereekb/model';
7
7
  * Each member corresponds to one of the mock Firestore models defined in this file.
8
8
  * Useful for generic constraints that need to accept any mock model identity.
9
9
  */
10
- export type MockItemTypes = typeof mockItemIdentity | typeof mockItemPrivateIdentity | typeof mockItemUserIdentity | typeof mockItemSubItemIdentity | typeof mockItemSubItemDeepIdentity;
10
+ export type MockItemTypes = typeof mockItemIdentity | typeof mockItemPrivateIdentity | typeof mockItemUserIdentity | typeof mockItemSubItemIdentity | typeof mockItemSubItemDeepIdentity | typeof mockItemPagedIdentity;
11
11
  /**
12
12
  * {@link firestoreModelIdentity} for the root-level mock item collection (`mockItem` / `mi`).
13
13
  */
@@ -459,6 +459,123 @@ export type MockItemSubItemDeepFirestoreCollectionGroup = FirestoreCollectionGro
459
459
  * @returns A typed {@link MockItemSubItemDeepFirestoreCollectionGroup} wired with the {@link mockItemSubItemDeepConverter}.
460
460
  */
461
461
  export declare function mockItemSubItemDeepFirestoreCollectionGroup(firestoreContext: FirestoreContext): MockItemSubItemDeepFirestoreCollectionGroup;
462
+ /**
463
+ * {@link firestoreModelIdentity} for the MockItemPaged subcollection (`mockItemPaged` / `mip2`).
464
+ *
465
+ * Child of {@link mockItemIdentity}. Stores a logical {@link MockItemPagedEntry} array distributed
466
+ * across multiple page documents, plus an index document that summarizes the layout. See
467
+ * {@link PagedItemFirestoreCollection} for the underlying mechanism.
468
+ */
469
+ export declare const mockItemPagedIdentity: import("@dereekb/firebase").FirestoreModelIdentityWithParent<import("@dereekb/firebase").RootFirestoreModelIdentity<"mockItem", "mi">, "mockItemPaged", "mip2">;
470
+ /**
471
+ * Single entry stored inside a paged subcollection page.
472
+ *
473
+ * Items are grouped by {@link group} when using static distribution and treated as opaque
474
+ * payloads when using dynamic (count-based) paging.
475
+ */
476
+ export interface MockItemPagedEntry {
477
+ readonly id: string;
478
+ readonly group: string;
479
+ readonly value: number;
480
+ }
481
+ /**
482
+ * Possible granted roles for {@link MockItemPagedEntry} pages.
483
+ */
484
+ export type MockItemPagedRoles = GrantedReadRole | 'admin';
485
+ /**
486
+ * Page-document model shape for {@link MockItemPagedEntry}. The paged collection stores entries
487
+ * inside this envelope (`i` = items, `c` = count). The standalone index document
488
+ * (`{@link DEFAULT_PAGED_ITEM_INDEX_DOCUMENT_ID}`) lives in the same collection but uses a
489
+ * different shape ({@link PagedItemIndexData}); from the model service's perspective only the
490
+ * page envelope is the canonical document.
491
+ */
492
+ export type MockItemPagedDocumentData = PagedItemPageData<MockItemPagedEntry>;
493
+ /**
494
+ * {@link AbstractFirestoreDocumentWithParent} implementation for a single page document inside a
495
+ * {@link MockItemPagedFirestoreCollection}. Used by the model service factory to address pages
496
+ * the same way other subcollection documents are addressed.
497
+ */
498
+ export declare class MockItemPagedDocument extends AbstractFirestoreDocumentWithParent<MockItem, MockItemPagedDocumentData, MockItemPagedDocument, typeof mockItemPagedIdentity> {
499
+ get modelIdentity(): import("@dereekb/firebase").FirestoreModelIdentityWithParent<import("@dereekb/firebase").RootFirestoreModelIdentity<"mockItem", "mi">, "mockItemPaged", "mip2">;
500
+ }
501
+ /**
502
+ * Per-item converter for {@link MockItemPagedEntry} used by the paged accessor.
503
+ *
504
+ * The mock entry shape is already Firestore-safe, so the converter is an identity
505
+ * pass-through. Production usage may wrap a real converter (e.g. for date fields).
506
+ */
507
+ export declare const mockItemPagedEntryConverter: PagedItemConverter<MockItemPagedEntry>;
508
+ /**
509
+ * Static distribution scheme for {@link MockItemPagedEntry} that buckets items by their
510
+ * {@link MockItemPagedEntry.group} field across three page IDs (`a`, `b`, `c`).
511
+ */
512
+ export declare const mockItemPagedAlphaDistributionScheme: PagedItemDistributionScheme<MockItemPagedEntry>;
513
+ /**
514
+ * Default `maxItemsPerPage` used by the dynamic mock paged collection factory. Kept small to
515
+ * exercise multi-page boundary conditions in tests without writing many entries.
516
+ */
517
+ export declare const MOCK_ITEM_PAGED_DEFAULT_MAX_ITEMS_PER_PAGE = 3;
518
+ /**
519
+ * Typed {@link PagedItemFirestoreCollection} for {@link MockItemPagedEntry} items under a
520
+ * {@link MockItem} parent.
521
+ */
522
+ export type MockItemPagedFirestoreCollection = PagedItemFirestoreCollection<MockItemPagedEntry, MockItem, MockItemPagedDocument, MockItemDocument>;
523
+ /**
524
+ * Factory function type that creates a {@link MockItemPagedFirestoreCollection} for a given parent.
525
+ */
526
+ export type MockItemPagedFirestoreCollectionFactory = (parent: MockItemDocument) => MockItemPagedFirestoreCollection;
527
+ /**
528
+ * Configuration for {@link mockItemPagedFirestoreCollection}.
529
+ */
530
+ export interface MockItemPagedFirestoreCollectionConfig {
531
+ /**
532
+ * When provided, the factory produces a statically-distributed paged collection using the
533
+ * given scheme. When omitted, the factory produces a dynamic (count-based) paged collection
534
+ * using {@link maxItemsPerPage}.
535
+ */
536
+ readonly distributionScheme?: PagedItemDistributionScheme<MockItemPagedEntry>;
537
+ /**
538
+ * Maximum items per page document in dynamic mode. Defaults to
539
+ * {@link MOCK_ITEM_PAGED_DEFAULT_MAX_ITEMS_PER_PAGE}.
540
+ */
541
+ readonly maxItemsPerPage?: number;
542
+ }
543
+ /**
544
+ * Creates a factory for producing {@link MockItemPagedFirestoreCollection} instances bound to a
545
+ * parent {@link MockItemDocument}.
546
+ *
547
+ * @param firestoreContext - The Firestore context used to resolve the underlying subcollection.
548
+ * @param config - Optional config selecting between dynamic (default) and static distribution.
549
+ * @returns A factory that, given a parent {@link MockItemDocument}, returns a paged subcollection
550
+ * wired with {@link mockItemPagedEntryConverter}.
551
+ */
552
+ export declare function mockItemPagedFirestoreCollection(firestoreContext: FirestoreContext, config?: MockItemPagedFirestoreCollectionConfig): MockItemPagedFirestoreCollectionFactory;
553
+ /**
554
+ * Creates a {@link CollectionGroup} reference for querying all {@link MockItemPagedDocumentData}
555
+ * page documents across parents.
556
+ *
557
+ * Note: the index document (`_index`) lives in the same Firestore collection but has a different
558
+ * shape ({@link PagedItemIndexData}); collection-group queries will surface both. Consumers
559
+ * should filter by document id when only pages are desired.
560
+ *
561
+ * @param context - The Firestore context used to resolve the collection group.
562
+ * @returns A typed {@link CollectionGroup} reference for the MockItemPaged collection name.
563
+ */
564
+ export declare function mockItemPagedCollectionReference(context: FirestoreContext): CollectionGroup<MockItemPagedDocumentData>;
565
+ /**
566
+ * Typed {@link FirestoreCollectionGroup} for querying {@link MockItemPagedDocumentData} page
567
+ * documents across all parents. Used by the model service factory to address paged page
568
+ * documents in a parent-agnostic way.
569
+ */
570
+ export type MockItemPagedFirestoreCollectionGroup = FirestoreCollectionGroup<MockItemPagedDocumentData, MockItemPagedDocument>;
571
+ /**
572
+ * Creates a {@link MockItemPagedFirestoreCollectionGroup} for cross-parent access to paged
573
+ * page documents.
574
+ *
575
+ * @param firestoreContext - The Firestore context used to resolve the underlying collection group reference.
576
+ * @returns A typed {@link MockItemPagedFirestoreCollectionGroup}.
577
+ */
578
+ export declare function mockItemPagedFirestoreCollectionGroup(firestoreContext: FirestoreContext): MockItemPagedFirestoreCollectionGroup;
462
579
  /**
463
580
  * System state type identifier for mock system state data.
464
581
  *
@@ -1,4 +1,4 @@
1
- import { type MockItem, type MockItemSubItemDeep, type MockItemSubItemDeepDocument, type MockItemSubItemDeepFirestoreCollectionFactory, type MockItemSubItemDeepFirestoreCollectionGroup, type MockItemSubItemDeepRoles, type MockItemDocument, type MockItemFirestoreCollection, type MockItemPrivate, type MockItemPrivateDocument, type MockItemPrivateFirestoreCollectionFactory, type MockItemPrivateFirestoreCollectionGroup, type MockItemPrivateRoles, type MockItemRoles, type MockItemSubItem, type MockItemSubItemDocument, type MockItemSubItemFirestoreCollectionFactory, type MockItemSubItemFirestoreCollectionGroup, type MockItemSubItemRoles, type MockItemTypes, type MockItemUser, type MockItemUserDocument, type MockItemUserFirestoreCollectionFactory, type MockItemUserFirestoreCollectionGroup, type MockItemUserRoles } from './mock.item';
1
+ import { type MockItem, type MockItemSubItemDeep, type MockItemSubItemDeepDocument, type MockItemSubItemDeepFirestoreCollectionFactory, type MockItemSubItemDeepFirestoreCollectionGroup, type MockItemSubItemDeepRoles, type MockItemDocument, type MockItemFirestoreCollection, type MockItemPrivate, type MockItemPrivateDocument, type MockItemPrivateFirestoreCollectionFactory, type MockItemPrivateFirestoreCollectionGroup, type MockItemPrivateRoles, type MockItemRoles, type MockItemSubItem, type MockItemSubItemDocument, type MockItemSubItemFirestoreCollectionFactory, type MockItemSubItemFirestoreCollectionGroup, type MockItemSubItemRoles, type MockItemTypes, type MockItemUser, type MockItemUserDocument, type MockItemUserFirestoreCollectionFactory, type MockItemUserFirestoreCollectionGroup, type MockItemUserRoles, type MockItemPagedDocument, type MockItemPagedDocumentData, type MockItemPagedFirestoreCollectionConfig, type MockItemPagedFirestoreCollectionFactory, type MockItemPagedFirestoreCollectionGroup, type MockItemPagedRoles } from './mock.item';
2
2
  import { type FirebaseAppModelContext, type FirestoreContext, type SystemStateFirestoreCollection, type SystemState, type SystemStateDocument, type SystemStateTypes } from '@dereekb/firebase';
3
3
  import { type GrantedRoleMap } from '@dereekb/model';
4
4
  /**
@@ -18,6 +18,16 @@ export declare abstract class MockItemCollections {
18
18
  abstract readonly mockItemSubItemCollectionGroup: MockItemSubItemFirestoreCollectionGroup;
19
19
  abstract readonly mockItemSubItemDeepCollectionFactory: MockItemSubItemDeepFirestoreCollectionFactory;
20
20
  abstract readonly mockItemSubItemDeepCollectionGroup: MockItemSubItemDeepFirestoreCollectionGroup;
21
+ abstract readonly mockItemPagedCollectionFactory: MockItemPagedFirestoreCollectionFactory;
22
+ abstract readonly mockItemPagedStaticCollectionFactory: MockItemPagedFirestoreCollectionFactory;
23
+ /**
24
+ * Builds a {@link MockItemPagedFirestoreCollectionFactory} with a caller-supplied
25
+ * configuration. Use this in tests that need to exercise non-default settings such as a
26
+ * smaller {@link MockItemPagedFirestoreCollectionConfig.maxItemsPerPage} or a custom
27
+ * distribution scheme without adding another pre-baked factory to {@link MockItemCollections}.
28
+ */
29
+ abstract readonly mockItemPagedCollectionFactoryWithConfig: (config: MockItemPagedFirestoreCollectionConfig) => MockItemPagedFirestoreCollectionFactory;
30
+ abstract readonly mockItemPagedCollectionGroup: MockItemPagedFirestoreCollectionGroup;
21
31
  abstract readonly mockItemSystemStateCollection: SystemStateFirestoreCollection;
22
32
  }
23
33
  /**
@@ -50,6 +60,14 @@ export declare const mockItemSubItemFirebaseModelServiceFactory: import("@dereek
50
60
  * Model service factory for {@link MockItemSubItemDeep}. Returns configurable roles from `context.rolesToReturn`, defaulting to `{ read: true }`.
51
61
  */
52
62
  export declare const mockItemSubItemDeepFirebaseModelServiceFactory: import("@dereekb/firebase").FirebaseModelServiceFactory<MockFirebaseContext, MockItemSubItemDeep, MockItemSubItemDeepDocument, MockItemSubItemDeepRoles>;
63
+ /**
64
+ * Model service factory for {@link MockItemPagedDocumentData} (paged page documents).
65
+ *
66
+ * Returns configurable roles from `context.rolesToReturn`, defaulting to `{ read: true }`. The
67
+ * page document is the framework envelope (`{ i, c }`); per-entry permissions are not modelled
68
+ * because entries live inside the page array, not as standalone documents.
69
+ */
70
+ export declare const mockItemPagedFirebaseModelServiceFactory: import("@dereekb/firebase").FirebaseModelServiceFactory<MockFirebaseContext, MockItemPagedDocumentData, MockItemPagedDocument, MockItemPagedRoles>;
53
71
  /**
54
72
  * Model service factory for {@link SystemState}. Only grants access to system admins via {@link grantFullAccessIfAdmin}.
55
73
  */
@@ -87,6 +105,7 @@ export declare const MOCK_FIREBASE_MODEL_SERVICE_FACTORIES: {
87
105
  mockItemUser: import("@dereekb/firebase").FirebaseModelServiceFactory<MockFirebaseContext, MockItemUser, MockItemUserDocument, MockItemUserRoles>;
88
106
  mockItemSub: import("@dereekb/firebase").FirebaseModelServiceFactory<MockFirebaseContext, MockItemSubItem, MockItemSubItemDocument, MockItemSubItemRoles>;
89
107
  mockItemSubItemDeep: import("@dereekb/firebase").FirebaseModelServiceFactory<MockFirebaseContext, MockItemSubItemDeep, MockItemSubItemDeepDocument, MockItemSubItemDeepRoles>;
108
+ mockItemPaged: import("@dereekb/firebase").FirebaseModelServiceFactory<MockFirebaseContext, MockItemPagedDocumentData, MockItemPagedDocument, MockItemPagedRoles>;
90
109
  };
91
110
  /**
92
111
  * Composite model service built from {@link MOCK_FIREBASE_MODEL_SERVICE_FACTORIES}.
@@ -100,6 +119,7 @@ export declare const mockFirebaseModelServices: import("@dereekb/firebase").Fire
100
119
  mockItemUser: import("@dereekb/firebase").FirebaseModelServiceFactory<MockFirebaseContext, MockItemUser, MockItemUserDocument, MockItemUserRoles>;
101
120
  mockItemSub: import("@dereekb/firebase").FirebaseModelServiceFactory<MockFirebaseContext, MockItemSubItem, MockItemSubItemDocument, MockItemSubItemRoles>;
102
121
  mockItemSubItemDeep: import("@dereekb/firebase").FirebaseModelServiceFactory<MockFirebaseContext, MockItemSubItemDeep, MockItemSubItemDeepDocument, MockItemSubItemDeepRoles>;
122
+ mockItemPaged: import("@dereekb/firebase").FirebaseModelServiceFactory<MockFirebaseContext, MockItemPagedDocumentData, MockItemPagedDocument, MockItemPagedRoles>;
103
123
  }, MockFirebaseContext>;
104
124
  /**
105
125
  * Full mock Firebase context type used throughout the test suite.