@dereekb/firebase 13.32.0 → 13.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/test/index.esm.js CHANGED
@@ -1,14 +1,17 @@
1
1
  import { performAsyncTasks, cachedGetter, bitwiseObjectDencoder, modelFieldConversions, compareStrings, waitForMs, isEvenNumber, unique, arrayFactory, mapGetter, randomNumberFactory, randomFromArrayFactory, idBatchFactory, arrayContainsDuplicateValue, useCallback, readableStreamToBuffer, SLASH_PATH_SEPARATOR } from '@dereekb/util';
2
2
  import { initializeTestEnvironment } from '@firebase/rules-unit-testing';
3
+ export { assertFails, assertSucceeds } from '@firebase/rules-unit-testing';
3
4
  import { firebaseStorageContextFactory, firestoreContextFactory, firebaseFirestoreClientDrivers, firebaseStorageClientDrivers, firestoreModelIdentity, snapshotConverterFunctions, firestoreBoolean, optionalFirestoreNumber, optionalFirestoreDate, optionalFirestoreArray, optionalFirestoreString, firestoreDate, firestoreBitwiseObjectMap, firestoreUniqueStringArray, firestoreNumber, firestoreString, firestoreUID, copyUserRelatedDataAccessorFactoryFunction, firestoreSubObject, defaultPagedItemPageDataConverter, AbstractFirestoreDocument, AbstractFirestoreDocumentWithParent, firebaseModelServiceFactory, grantFullAccessIfAdmin, firebaseModelsService, systemStateFirestoreCollection, allChildDocumentsUnderParent, where, makeDocuments, getDocumentSnapshotPairs, useDocumentSnapshot, useDocumentSnapshotData, firestoreIdBatchVerifierFactory, limit, orderBy, limitToLast, whereDocumentId, loadAllFirestoreDocumentSnapshotPairs, loadAllFirestoreDocumentSnapshot, iterateFirestoreDocumentSnapshotPairs, iterateFirestoreDocumentSnapshots, iterateFirestoreDocumentSnapshotPairBatches, iterateFirestoreDocumentSnapshotBatches, whereStringHasRootIdentityModelKey, whereStringValueHasPrefix, whereDateIsAfterWithSort, whereDateIsBeforeWithSort, whereDateIsOnOrAfterWithSort, whereDateIsOnOrBeforeWithSort, whereDateIsInRange, whereDateIsBetween, startAt, orderByDocumentId, startAtValue, startAfter, endAt, endAtValue, endBefore, streamFromOnSnapshot, latestSnapshotsFromDocuments, newDocuments, loadDocumentsForDocumentReferences, loadDocumentsForDocumentReferencesFromValues, loadDocumentsForKeys, loadDocumentsForKeysFromValues, loadDocumentsForIds, loadDocumentsForIdsFromValues, firestoreDocumentLoader, setIdAndKeyFromKeyIdRefOnDocumentData, firestoreModelIdFromDocument, firestoreModelIdsFromDocuments, firestoreModelKeyFromDocument, firestoreModelKeysFromDocuments, documentReferenceFromDocument, documentReferencesFromDocuments, limitedFirestoreDocumentAccessorSnapshotCache, mapLatestSnapshotsFromDocuments, streamDocumentSnapshotsData, dataFromDocumentSnapshots, streamDocumentSnapshotDataPairs, streamDocumentSnapshotDataPairsWithData, getDocumentSnapshots, getDocumentSnapshotPair, getDocumentSnapshotDataPair, getDocumentSnapshotDataPairs, getDocumentSnapshotDataPairsWithData, getDocumentSnapshotDataTuples, getDocumentSnapshotData, getDocumentSnapshotsData, getDataFromDocumentSnapshots, loadDocumentsForSnapshots, firestoreDocumentSnapshotPairsLoader, documentData, documentDataFunction, documentDataWithIdAndKey, setIdAndKeyFromSnapshotOnDocumentData, firebaseQuerySnapshotAccumulator, firebaseQueryItemAccumulator, uploadFileWithStream, iterateStorageListFilesByEachFile } from '@dereekb/firebase';
4
5
  import { setLogLevel } from 'firebase/firestore';
5
6
  import { AbstractTestContextFixture, instanceWrapTestContextFactory, AbstractWrappedFixtureWithInstance, itShouldFail, callbackTest, expectFail } from '@dereekb/util/test';
7
+ import { existsSync, readFileSync, createReadStream } from 'node:fs';
8
+ import { dirname, join } from 'node:path';
9
+ import { fileURLToPath } from 'node:url';
6
10
  import { firstValueFrom, filter, skip, from, first, map, switchMap } from 'rxjs';
7
11
  import { SubscriptionObject, isLoadingStateFinishedLoading, flattenAccumulatorResultItemArray, iteratorNextPageUntilPage, accumulatorCurrentPageListLoadingState, accumulatorFlattenPageListLoadingState } from '@dereekb/rxjs';
8
12
  import { addDays, startOfDay, addHours } from 'date-fns';
9
13
  import { DateRangeType } from '@dereekb/date';
10
14
  import { Readable } from 'node:stream';
11
- import { createReadStream } from 'node:fs';
12
15
 
13
16
  function _array_like_to_array$2(arr, len) {
14
17
  if (len == null || len > arr.length) len = arr.length;
@@ -21,7 +24,7 @@ function _array_with_holes$1(arr) {
21
24
  function _array_without_holes$2(arr) {
22
25
  if (Array.isArray(arr)) return _array_like_to_array$2(arr);
23
26
  }
24
- function asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, key, arg) {
27
+ function asyncGeneratorStep$7(gen, resolve, reject, _next, _throw, key, arg) {
25
28
  try {
26
29
  var info = gen[key](arg);
27
30
  var value = info.value;
@@ -35,22 +38,22 @@ function asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, key, arg) {
35
38
  Promise.resolve(value).then(_next, _throw);
36
39
  }
37
40
  }
38
- function _async_to_generator$6(fn) {
41
+ function _async_to_generator$7(fn) {
39
42
  return function() {
40
43
  var self = this, args = arguments;
41
44
  return new Promise(function(resolve, reject) {
42
45
  var gen = fn.apply(self, args);
43
46
  function _next(value) {
44
- asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, "next", value);
47
+ asyncGeneratorStep$7(gen, resolve, reject, _next, _throw, "next", value);
45
48
  }
46
49
  function _throw(err) {
47
- asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, "throw", err);
50
+ asyncGeneratorStep$7(gen, resolve, reject, _next, _throw, "throw", err);
48
51
  }
49
52
  _next(undefined);
50
53
  });
51
54
  };
52
55
  }
53
- function _define_property$9(obj, key, value) {
56
+ function _define_property$a(obj, key, value) {
54
57
  if (key in obj) {
55
58
  Object.defineProperty(obj, key, {
56
59
  value: value,
@@ -96,7 +99,7 @@ function _non_iterable_rest$1() {
96
99
  function _non_iterable_spread$2() {
97
100
  throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
98
101
  }
99
- function _object_spread$3(target) {
102
+ function _object_spread$4(target) {
100
103
  for(var i = 1; i < arguments.length; i++){
101
104
  var source = arguments[i] != null ? arguments[i] : {};
102
105
  var ownKeys = Object.keys(source);
@@ -106,7 +109,7 @@ function _object_spread$3(target) {
106
109
  }));
107
110
  }
108
111
  ownKeys.forEach(function(key) {
109
- _define_property$9(target, key, source[key]);
112
+ _define_property$a(target, key, source[key]);
110
113
  });
111
114
  }
112
115
  return target;
@@ -144,7 +147,7 @@ function _unsupported_iterable_to_array$2(o, minLen) {
144
147
  if (n === "Map" || n === "Set") return Array.from(n);
145
148
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array$2(o, minLen);
146
149
  }
147
- function _ts_generator$6(thisArg, body) {
150
+ function _ts_generator$7(thisArg, body) {
148
151
  var f, y, t, _ = {
149
152
  label: 0,
150
153
  sent: function() {
@@ -300,7 +303,7 @@ function _ts_generator$6(thisArg, body) {
300
303
  });
301
304
  return fuzzedMap;
302
305
  };
303
- var injectedDriver = _object_spread_props$2(_object_spread$3({}, driver), {
306
+ var injectedDriver = _object_spread_props$2(_object_spread$4({}, driver), {
304
307
  collection: fuzzedCollection,
305
308
  collectionGroup: fuzzedCollectionGroup,
306
309
  subcollection: fuzzedSubcollection,
@@ -318,7 +321,7 @@ function _ts_generator$6(thisArg, body) {
318
321
  * @param drivers - The base Firestore drivers to wrap.
319
322
  * @returns A {@link TestingFirestoreDrivers} marked with `firestoreDriverType: 'testing'` and a wrapped accessor driver from {@link makeTestingFirestoreAccesorDriver}.
320
323
  */ function makeTestingFirestoreDrivers(drivers) {
321
- return _object_spread_props$2(_object_spread$3({}, drivers), {
324
+ return _object_spread_props$2(_object_spread$4({}, drivers), {
322
325
  firestoreDriverType: 'testing',
323
326
  firestoreAccessorDriver: makeTestingFirestoreAccesorDriver(drivers.firestoreAccessorDriver)
324
327
  });
@@ -331,9 +334,9 @@ function _ts_generator$6(thisArg, body) {
331
334
  * @param context - The test context whose fuzzed collections should be cleared.
332
335
  * @param clearCollection - Callback that performs the actual deletion for a single collection.
333
336
  */ function clearTestFirestoreContextCollections(context, clearCollection) {
334
- return _async_to_generator$6(function() {
337
+ return _async_to_generator$7(function() {
335
338
  var names, tuples;
336
- return _ts_generator$6(this, function(_state) {
339
+ return _ts_generator$7(this, function(_state) {
337
340
  switch(_state.label){
338
341
  case 0:
339
342
  names = context.drivers.firestoreAccessorDriver.getFuzzedCollectionsNameMap();
@@ -355,7 +358,7 @@ function _ts_generator$6(thisArg, body) {
355
358
  })();
356
359
  }
357
360
 
358
- function _define_property$8(obj, key, value) {
361
+ function _define_property$9(obj, key, value) {
359
362
  if (key in obj) {
360
363
  Object.defineProperty(obj, key, {
361
364
  value: value,
@@ -368,7 +371,7 @@ function _define_property$8(obj, key, value) {
368
371
  }
369
372
  return obj;
370
373
  }
371
- function _object_spread$2(target) {
374
+ function _object_spread$3(target) {
372
375
  for(var i = 1; i < arguments.length; i++){
373
376
  var source = arguments[i] != null ? arguments[i] : {};
374
377
  var ownKeys = Object.keys(source);
@@ -378,7 +381,7 @@ function _object_spread$2(target) {
378
381
  }));
379
382
  }
380
383
  ownKeys.forEach(function(key) {
381
- _define_property$8(target, key, source[key]);
384
+ _define_property$9(target, key, source[key]);
382
385
  });
383
386
  }
384
387
  return target;
@@ -421,7 +424,7 @@ var bucketTestNameKey = 0;
421
424
  var random = Math.ceil(Math.random() * 999999) % 999999;
422
425
  return "test-bucket-".concat(time, "-").concat(random, "-").concat(bucketTestNameKey += 1);
423
426
  }) : driver.getDefaultBucket;
424
- var injectedDriver = _object_spread_props$1(_object_spread$2({}, driver), {
427
+ var injectedDriver = _object_spread_props$1(_object_spread$3({}, driver), {
425
428
  getDefaultBucket: defaultBucket
426
429
  });
427
430
  return injectedDriver;
@@ -433,7 +436,7 @@ var bucketTestNameKey = 0;
433
436
  * @param config - Optional config forwarded to {@link makeTestingFirebaseStorageAccesorDriver}; controls test-bucket override behavior.
434
437
  * @returns A {@link TestingFirebaseStorageDrivers} marked with `storageDriverType: 'testing'` and a wrapped accessor driver.
435
438
  */ function makeTestingFirebaseStorageDrivers(drivers, config) {
436
- return _object_spread_props$1(_object_spread$2({}, drivers), {
439
+ return _object_spread_props$1(_object_spread$3({}, drivers), {
437
440
  storageDriverType: 'testing',
438
441
  storageAccessorDriver: makeTestingFirebaseStorageAccesorDriver(drivers.storageAccessorDriver, config)
439
442
  });
@@ -467,7 +470,7 @@ function _create_class$6(Constructor, protoProps, staticProps) {
467
470
  if (protoProps) _defineProperties$6(Constructor.prototype, protoProps);
468
471
  return Constructor;
469
472
  }
470
- function _define_property$7(obj, key, value) {
473
+ function _define_property$8(obj, key, value) {
471
474
  if (key in obj) {
472
475
  Object.defineProperty(obj, key, {
473
476
  value: value,
@@ -533,8 +536,8 @@ function _is_native_reflect_construct$6() {
533
536
  */ var TestFirebaseInstance = /*#__PURE__*/ function() {
534
537
  function TestFirebaseInstance(firestoreContext, storageContext) {
535
538
  _class_call_check$7(this, TestFirebaseInstance);
536
- _define_property$7(this, "firestoreContext", void 0);
537
- _define_property$7(this, "storageContext", void 0);
539
+ _define_property$8(this, "firestoreContext", void 0);
540
+ _define_property$8(this, "storageContext", void 0);
538
541
  this.firestoreContext = firestoreContext;
539
542
  this.storageContext = storageContext;
540
543
  }
@@ -603,7 +606,7 @@ function _assert_this_initialized$5(self) {
603
606
  }
604
607
  return self;
605
608
  }
606
- function asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, key, arg) {
609
+ function asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, key, arg) {
607
610
  try {
608
611
  var info = gen[key](arg);
609
612
  var value = info.value;
@@ -617,16 +620,16 @@ function asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, key, arg) {
617
620
  Promise.resolve(value).then(_next, _throw);
618
621
  }
619
622
  }
620
- function _async_to_generator$5(fn) {
623
+ function _async_to_generator$6(fn) {
621
624
  return function() {
622
625
  var self = this, args = arguments;
623
626
  return new Promise(function(resolve, reject) {
624
627
  var gen = fn.apply(self, args);
625
628
  function _next(value) {
626
- asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, "next", value);
629
+ asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, "next", value);
627
630
  }
628
631
  function _throw(err) {
629
- asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, "throw", err);
632
+ asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, "throw", err);
630
633
  }
631
634
  _next(undefined);
632
635
  });
@@ -654,7 +657,7 @@ function _create_class$5(Constructor, protoProps, staticProps) {
654
657
  if (protoProps) _defineProperties$5(Constructor.prototype, protoProps);
655
658
  return Constructor;
656
659
  }
657
- function _define_property$6(obj, key, value) {
660
+ function _define_property$7(obj, key, value) {
658
661
  if (key in obj) {
659
662
  Object.defineProperty(obj, key, {
660
663
  value: value,
@@ -686,7 +689,7 @@ function _inherits$5(subClass, superClass) {
686
689
  });
687
690
  if (superClass) _set_prototype_of$5(subClass, superClass);
688
691
  }
689
- function _object_spread$1(target) {
692
+ function _object_spread$2(target) {
690
693
  for(var i = 1; i < arguments.length; i++){
691
694
  var source = arguments[i] != null ? arguments[i] : {};
692
695
  var ownKeys = Object.keys(source);
@@ -696,7 +699,7 @@ function _object_spread$1(target) {
696
699
  }));
697
700
  }
698
701
  ownKeys.forEach(function(key) {
699
- _define_property$6(target, key, source[key]);
702
+ _define_property$7(target, key, source[key]);
700
703
  });
701
704
  }
702
705
  return target;
@@ -745,7 +748,7 @@ function _is_native_reflect_construct$5() {
745
748
  return !!result;
746
749
  })();
747
750
  }
748
- function _ts_generator$5(thisArg, body) {
751
+ function _ts_generator$6(thisArg, body) {
749
752
  var f, y, t, _ = {
750
753
  label: 0,
751
754
  sent: function() {
@@ -855,7 +858,7 @@ function _ts_generator$5(thisArg, body) {
855
858
  * @param rulesTestContext - The per-test rules context (authenticated or unauthenticated) used to obtain the Firestore instance.
856
859
  * @returns A {@link RulesUnitTestTestFirestoreContext} that exposes the rules-test environment and context alongside the standard Firestore context.
857
860
  */ function makeRulesTestFirestoreContext(drivers, rulesTestEnvironment, rulesTestContext) {
858
- var context = _object_spread_props(_object_spread$1({}, firestoreContextFactory(drivers)(rulesTestContext.firestore())), {
861
+ var context = _object_spread_props(_object_spread$2({}, firestoreContextFactory(drivers)(rulesTestContext.firestore())), {
859
862
  drivers: drivers,
860
863
  rulesTestContext: rulesTestContext,
861
864
  rulesTestEnvironment: rulesTestEnvironment
@@ -873,7 +876,7 @@ function _ts_generator$5(thisArg, body) {
873
876
  * @param rulesTestContext - The per-test rules context used to obtain the Storage instance.
874
877
  * @returns A {@link RulesUnitTestTestFirebaseStorageContext} that exposes the rules-test environment and context alongside the standard Storage context.
875
878
  */ function makeRulesTestFirebaseStorageContext(drivers, rulesTestEnvironment, rulesTestContext) {
876
- var context = _object_spread_props(_object_spread$1({}, firebaseStorageContextFactory(drivers)(rulesTestContext.storage())), {
879
+ var context = _object_spread_props(_object_spread$2({}, firebaseStorageContextFactory(drivers)(rulesTestContext.storage())), {
877
880
  drivers: drivers,
878
881
  rulesTestContext: rulesTestContext,
879
882
  rulesTestEnvironment: rulesTestEnvironment
@@ -890,13 +893,13 @@ function _ts_generator$5(thisArg, body) {
890
893
  function RulesUnitTestTestFirebaseInstance(drivers, rulesTestEnvironment, rulesTestContext) {
891
894
  var _this = this;
892
895
  _class_call_check$6(this, RulesUnitTestTestFirebaseInstance);
893
- _define_property$6(this, "drivers", void 0);
894
- _define_property$6(this, "rulesTestEnvironment", void 0);
895
- _define_property$6(this, "rulesTestContext", void 0);
896
- _define_property$6(this, "_firestoreContext", cachedGetter(function() {
896
+ _define_property$7(this, "drivers", void 0);
897
+ _define_property$7(this, "rulesTestEnvironment", void 0);
898
+ _define_property$7(this, "rulesTestContext", void 0);
899
+ _define_property$7(this, "_firestoreContext", cachedGetter(function() {
897
900
  return makeRulesTestFirestoreContext(_this.drivers, _this.rulesTestEnvironment, _this.rulesTestContext);
898
901
  }));
899
- _define_property$6(this, "_storageContext", cachedGetter(function() {
902
+ _define_property$7(this, "_storageContext", cachedGetter(function() {
900
903
  return makeRulesTestFirebaseStorageContext(_this.drivers, _this.rulesTestEnvironment, _this.rulesTestContext);
901
904
  }));
902
905
  this.drivers = drivers;
@@ -970,8 +973,8 @@ function _ts_generator$5(thisArg, body) {
970
973
  // Initialize the emulator environment once per test suite.
971
974
  // This is the expensive operation that hits the emulator's REST API (e.g. PUT /internal/setRules).
972
975
  beforeAll(function() {
973
- return _async_to_generator$5(function() {
974
- return _ts_generator$5(this, function(_state) {
976
+ return _async_to_generator$6(function() {
977
+ return _ts_generator$6(this, function(_state) {
975
978
  switch(_state.label){
976
979
  case 0:
977
980
  return [
@@ -989,8 +992,8 @@ function _ts_generator$5(thisArg, body) {
989
992
  });
990
993
  // Clean up the emulator environment once after all tests complete.
991
994
  afterAll(function() {
992
- return _async_to_generator$5(function() {
993
- return _ts_generator$5(this, function(_state) {
995
+ return _async_to_generator$6(function() {
996
+ return _ts_generator$6(this, function(_state) {
994
997
  switch(_state.label){
995
998
  case 0:
996
999
  if (!rulesTestEnvironment) return [
@@ -1020,11 +1023,11 @@ function _ts_generator$5(thisArg, body) {
1020
1023
  // (via makeTestingFirestoreAccesorDriver) to provide data isolation between tests.
1021
1024
  var clearInstance = null;
1022
1025
  beforeEach(function() {
1023
- return _async_to_generator$5(function() {
1026
+ return _async_to_generator$6(function() {
1024
1027
  var drivers, rulesTestContext, instance;
1025
- return _ts_generator$5(this, function(_state) {
1028
+ return _ts_generator$6(this, function(_state) {
1026
1029
  try {
1027
- drivers = _object_spread$1({}, makeTestingFirestoreDrivers(firebaseFirestoreClientDrivers()), makeTestingFirebaseStorageDrivers(firebaseStorageClientDrivers(), {
1030
+ drivers = _object_spread$2({}, makeTestingFirestoreDrivers(firebaseFirestoreClientDrivers()), makeTestingFirebaseStorageDrivers(firebaseStorageClientDrivers(), {
1028
1031
  useTestDefaultBucket: true
1029
1032
  }));
1030
1033
  if (config.testEnvironment.collectionNames) {
@@ -1172,7 +1175,7 @@ function _create_class$4(Constructor, protoProps, staticProps) {
1172
1175
  if (protoProps) _defineProperties$4(Constructor.prototype, protoProps);
1173
1176
  return Constructor;
1174
1177
  }
1175
- function _define_property$5(obj, key, value) {
1178
+ function _define_property$6(obj, key, value) {
1176
1179
  if (key in obj) {
1177
1180
  Object.defineProperty(obj, key, {
1178
1181
  value: value,
@@ -1854,7 +1857,7 @@ function _is_native_reflect_construct$4() {
1854
1857
  *
1855
1858
  * Used when creating the mock system state Firestore collection to register
1856
1859
  * the {@link MockSystemData} converter under the {@link MOCK_SYSTEM_STATE_TYPE} key.
1857
- */ var MOCK_ITEM_SYSTEM_STATE_STORED_DATA_CONVERTER_MAP = _define_property$5({}, MOCK_SYSTEM_STATE_TYPE, mockItemSystemDataConverter);
1860
+ */ var MOCK_ITEM_SYSTEM_STATE_STORED_DATA_CONVERTER_MAP = _define_property$6({}, MOCK_SYSTEM_STATE_TYPE, mockItemSystemDataConverter);
1858
1861
 
1859
1862
  function _class_call_check$4(instance, Constructor) {
1860
1863
  if (!(instance instanceof Constructor)) {
@@ -2049,7 +2052,7 @@ function _create_class$3(Constructor, protoProps, staticProps) {
2049
2052
  if (protoProps) _defineProperties$3(Constructor.prototype, protoProps);
2050
2053
  return Constructor;
2051
2054
  }
2052
- function _define_property$4(obj, key, value) {
2055
+ function _define_property$5(obj, key, value) {
2053
2056
  if (key in obj) {
2054
2057
  Object.defineProperty(obj, key, {
2055
2058
  value: value,
@@ -2115,8 +2118,8 @@ function _is_native_reflect_construct$3() {
2115
2118
  */ var MockItemCollectionFixtureInstance = /*#__PURE__*/ function() {
2116
2119
  function MockItemCollectionFixtureInstance(fixture) {
2117
2120
  _class_call_check$3(this, MockItemCollectionFixtureInstance);
2118
- _define_property$4(this, "fixture", void 0);
2119
- _define_property$4(this, "collections", void 0);
2121
+ _define_property$5(this, "fixture", void 0);
2122
+ _define_property$5(this, "collections", void 0);
2120
2123
  this.fixture = fixture;
2121
2124
  this.collections = makeMockItemCollections(fixture.parent.firestoreContext);
2122
2125
  }
@@ -2266,7 +2269,7 @@ function _create_class$2(Constructor, protoProps, staticProps) {
2266
2269
  if (protoProps) _defineProperties$2(Constructor.prototype, protoProps);
2267
2270
  return Constructor;
2268
2271
  }
2269
- function _define_property$3(obj, key, value) {
2272
+ function _define_property$4(obj, key, value) {
2270
2273
  if (key in obj) {
2271
2274
  Object.defineProperty(obj, key, {
2272
2275
  value: value,
@@ -2331,7 +2334,7 @@ function _is_native_reflect_construct$2() {
2331
2334
  */ var MockItemStorageFixtureInstance = /*#__PURE__*/ function() {
2332
2335
  function MockItemStorageFixtureInstance(fixture) {
2333
2336
  _class_call_check$2(this, MockItemStorageFixtureInstance);
2334
- _define_property$3(this, "fixture", void 0);
2337
+ _define_property$4(this, "fixture", void 0);
2335
2338
  this.fixture = fixture;
2336
2339
  }
2337
2340
  _create_class$2(MockItemStorageFixtureInstance, [
@@ -2421,6 +2424,314 @@ function _is_native_reflect_construct$2() {
2421
2424
  * Uses @firebase/storage. This is ONLY for the client.
2422
2425
  */ var authorizedTestWithMockItemStorage = testWithMockItemStorageFixture()(authorizedFirebaseFactory);
2423
2426
 
2427
+ function asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, key, arg) {
2428
+ try {
2429
+ var info = gen[key](arg);
2430
+ var value = info.value;
2431
+ } catch (error) {
2432
+ reject(error);
2433
+ return;
2434
+ }
2435
+ if (info.done) {
2436
+ resolve(value);
2437
+ } else {
2438
+ Promise.resolve(value).then(_next, _throw);
2439
+ }
2440
+ }
2441
+ function _async_to_generator$5(fn) {
2442
+ return function() {
2443
+ var self = this, args = arguments;
2444
+ return new Promise(function(resolve, reject) {
2445
+ var gen = fn.apply(self, args);
2446
+ function _next(value) {
2447
+ asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, "next", value);
2448
+ }
2449
+ function _throw(err) {
2450
+ asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, "throw", err);
2451
+ }
2452
+ _next(undefined);
2453
+ });
2454
+ };
2455
+ }
2456
+ function _define_property$3(obj, key, value) {
2457
+ if (key in obj) {
2458
+ Object.defineProperty(obj, key, {
2459
+ value: value,
2460
+ enumerable: true,
2461
+ configurable: true,
2462
+ writable: true
2463
+ });
2464
+ } else {
2465
+ obj[key] = value;
2466
+ }
2467
+ return obj;
2468
+ }
2469
+ function _object_spread$1(target) {
2470
+ for(var i = 1; i < arguments.length; i++){
2471
+ var source = arguments[i] != null ? arguments[i] : {};
2472
+ var ownKeys = Object.keys(source);
2473
+ if (typeof Object.getOwnPropertySymbols === "function") {
2474
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
2475
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
2476
+ }));
2477
+ }
2478
+ ownKeys.forEach(function(key) {
2479
+ _define_property$3(target, key, source[key]);
2480
+ });
2481
+ }
2482
+ return target;
2483
+ }
2484
+ function _ts_generator$5(thisArg, body) {
2485
+ var f, y, t, _ = {
2486
+ label: 0,
2487
+ sent: function() {
2488
+ if (t[0] & 1) throw t[1];
2489
+ return t[1];
2490
+ },
2491
+ trys: [],
2492
+ ops: []
2493
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
2494
+ return d(g, "next", {
2495
+ value: verb(0)
2496
+ }), d(g, "throw", {
2497
+ value: verb(1)
2498
+ }), d(g, "return", {
2499
+ value: verb(2)
2500
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
2501
+ value: function() {
2502
+ return this;
2503
+ }
2504
+ }), g;
2505
+ function verb(n) {
2506
+ return function(v) {
2507
+ return step([
2508
+ n,
2509
+ v
2510
+ ]);
2511
+ };
2512
+ }
2513
+ function step(op) {
2514
+ if (f) throw new TypeError("Generator is already executing.");
2515
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
2516
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
2517
+ if (y = 0, t) op = [
2518
+ op[0] & 2,
2519
+ t.value
2520
+ ];
2521
+ switch(op[0]){
2522
+ case 0:
2523
+ case 1:
2524
+ t = op;
2525
+ break;
2526
+ case 4:
2527
+ _.label++;
2528
+ return {
2529
+ value: op[1],
2530
+ done: false
2531
+ };
2532
+ case 5:
2533
+ _.label++;
2534
+ y = op[1];
2535
+ op = [
2536
+ 0
2537
+ ];
2538
+ continue;
2539
+ case 7:
2540
+ op = _.ops.pop();
2541
+ _.trys.pop();
2542
+ continue;
2543
+ default:
2544
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
2545
+ _ = 0;
2546
+ continue;
2547
+ }
2548
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
2549
+ _.label = op[1];
2550
+ break;
2551
+ }
2552
+ if (op[0] === 6 && _.label < t[1]) {
2553
+ _.label = t[1];
2554
+ t = op;
2555
+ break;
2556
+ }
2557
+ if (t && _.label < t[2]) {
2558
+ _.label = t[2];
2559
+ _.ops.push(op);
2560
+ break;
2561
+ }
2562
+ if (t[2]) _.ops.pop();
2563
+ _.trys.pop();
2564
+ continue;
2565
+ }
2566
+ op = body.call(thisArg, _);
2567
+ } catch (e) {
2568
+ op = [
2569
+ 6,
2570
+ e
2571
+ ];
2572
+ y = 0;
2573
+ } finally{
2574
+ f = t = 0;
2575
+ }
2576
+ if (op[0] & 5) throw op[1];
2577
+ return {
2578
+ value: op[0] ? op[1] : void 0,
2579
+ done: true
2580
+ };
2581
+ }
2582
+ }
2583
+ /**
2584
+ * Default file name of the workspace's Firestore security rules.
2585
+ */ var DEFAULT_FIRESTORE_RULES_FILE_NAME = 'firestore.rules';
2586
+ /**
2587
+ * Reads the workspace's Firestore rules file by walking up from the given module/path.
2588
+ *
2589
+ * @param config - The starting location and optional file name.
2590
+ * @returns The contents of the rules file.
2591
+ * @throws {Error} When no rules file is found at or above the starting location.
2592
+ */ function readFirestoreRulesFile(config) {
2593
+ var from = config.from, _config_fileName = config.fileName, fileName = _config_fileName === void 0 ? DEFAULT_FIRESTORE_RULES_FILE_NAME : _config_fileName;
2594
+ var startPath = from.startsWith('file:') ? dirname(fileURLToPath(from)) : from;
2595
+ var directory = startPath;
2596
+ var found = null;
2597
+ // walk up to the filesystem root looking for the rules file.
2598
+ while(!found){
2599
+ var candidate = join(directory, fileName !== null && fileName !== void 0 ? fileName : DEFAULT_FIRESTORE_RULES_FILE_NAME);
2600
+ if (existsSync(candidate)) {
2601
+ found = candidate;
2602
+ } else {
2603
+ var parent = dirname(directory);
2604
+ if (parent === directory) {
2605
+ break;
2606
+ }
2607
+ directory = parent;
2608
+ }
2609
+ }
2610
+ if (!found) {
2611
+ throw new Error('readFirestoreRulesFile(): could not find "'.concat(fileName, '" at or above "').concat(startPath, '".'));
2612
+ }
2613
+ return readFileSync(found, 'utf8');
2614
+ }
2615
+ /**
2616
+ * Registers vitest hooks that initialize a Firestore security-rules test environment, and invokes
2617
+ * the given callback with a {@link FirestoreRulesTestFixture}.
2618
+ *
2619
+ * The environment is created once per suite (`beforeAll`), torn down once (`afterAll`), and the
2620
+ * Firestore data is cleared between tests (`beforeEach`).
2621
+ *
2622
+ * @param config - The project id and rules to load.
2623
+ * @returns A function that takes the test body builder.
2624
+ *
2625
+ * @example
2626
+ * ```ts
2627
+ * const rulesTest = firestoreRulesTestBuilder({
2628
+ * projectId: 'demo-api-rules-test',
2629
+ * rules: readFirestoreRulesFile({ from: import.meta.url })
2630
+ * });
2631
+ *
2632
+ * describe('firestore.rules', () => {
2633
+ * rulesTest((f) => {
2634
+ * it('allows the owner to read their own document', async () => {
2635
+ * await assertSucceeds(getDoc(doc(f.firestoreForUser('a'), 'uec', 'a')));
2636
+ * });
2637
+ * });
2638
+ * });
2639
+ * ```
2640
+ */ function firestoreRulesTestBuilder(config) {
2641
+ var projectId = config.projectId, rules = config.rules, firestore = config.firestore;
2642
+ return function(buildTests) {
2643
+ var rulesTestEnvironment;
2644
+ var contextFirestore = function contextFirestore(context) {
2645
+ return context.firestore();
2646
+ };
2647
+ var fixture = {
2648
+ get rulesTestEnvironment () {
2649
+ return rulesTestEnvironment;
2650
+ },
2651
+ firestoreForUser: function firestoreForUser(userId, tokenOptions) {
2652
+ return contextFirestore(rulesTestEnvironment.authenticatedContext(userId, tokenOptions !== null && tokenOptions !== void 0 ? tokenOptions : undefined));
2653
+ },
2654
+ unauthenticatedFirestore: function unauthenticatedFirestore() {
2655
+ return contextFirestore(rulesTestEnvironment.unauthenticatedContext());
2656
+ },
2657
+ withSecurityRulesDisabled: function withSecurityRulesDisabled(fn) {
2658
+ return rulesTestEnvironment.withSecurityRulesDisabled(function(context) {
2659
+ return fn(contextFirestore(context));
2660
+ });
2661
+ }
2662
+ };
2663
+ beforeAll(function() {
2664
+ return _async_to_generator$5(function() {
2665
+ return _ts_generator$5(this, function(_state) {
2666
+ switch(_state.label){
2667
+ case 0:
2668
+ return [
2669
+ 4,
2670
+ initializeTestEnvironment({
2671
+ projectId: projectId,
2672
+ firestore: _object_spread$1({
2673
+ rules: rules
2674
+ }, firestore)
2675
+ })
2676
+ ];
2677
+ case 1:
2678
+ rulesTestEnvironment = _state.sent();
2679
+ return [
2680
+ 2
2681
+ ];
2682
+ }
2683
+ });
2684
+ })();
2685
+ });
2686
+ afterAll(function() {
2687
+ return _async_to_generator$5(function() {
2688
+ return _ts_generator$5(this, function(_state) {
2689
+ switch(_state.label){
2690
+ case 0:
2691
+ if (!rulesTestEnvironment) return [
2692
+ 3,
2693
+ 2
2694
+ ];
2695
+ return [
2696
+ 4,
2697
+ rulesTestEnvironment.cleanup().catch(function(e) {
2698
+ console.warn('firestoreRulesTestBuilder(): Failed to cleanup rules test environment', e);
2699
+ throw e;
2700
+ })
2701
+ ];
2702
+ case 1:
2703
+ _state.sent();
2704
+ _state.label = 2;
2705
+ case 2:
2706
+ return [
2707
+ 2
2708
+ ];
2709
+ }
2710
+ });
2711
+ })();
2712
+ });
2713
+ beforeEach(function() {
2714
+ return _async_to_generator$5(function() {
2715
+ return _ts_generator$5(this, function(_state) {
2716
+ switch(_state.label){
2717
+ case 0:
2718
+ return [
2719
+ 4,
2720
+ rulesTestEnvironment.clearFirestore()
2721
+ ];
2722
+ case 1:
2723
+ _state.sent();
2724
+ return [
2725
+ 2
2726
+ ];
2727
+ }
2728
+ });
2729
+ })();
2730
+ });
2731
+ buildTests(fixture);
2732
+ };
2733
+ }
2734
+
2424
2735
  function _assert_this_initialized$1(self) {
2425
2736
  if (self === void 0) {
2426
2737
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
@@ -13685,4 +13996,4 @@ function _ts_generator(thisArg, body) {
13685
13996
  });
13686
13997
  }
13687
13998
 
13688
- export { AUTHORIZED_FIRESTORE_RULES, AUTHORIZED_STORAGE_RULES, DEFAULT_MOCK_ITEM_PAGED_MAX_ITEMS_PER_PAGE, MOCK_FIREBASE_MODEL_SERVICE_FACTORIES, MOCK_ITEM_PAGED_ALPHA_DISTRIBUTION_SCHEME, MOCK_ITEM_PAGED_ENTRY_CONVERTER, MOCK_ITEM_SYSTEM_STATE_STORED_DATA_CONVERTER_MAP, MOCK_ITEM_USER_COLLECTION_NAME, MOCK_ITEM_USER_IDENTIFIER, MOCK_SYSTEM_STATE_TYPE, MockItemCollectionFixture, MockItemCollectionFixtureInstance, MockItemCollections, MockItemDocument, MockItemPagedDocument, MockItemPrivateDocument, MockItemSettingsItemEnum, MockItemStorageFixture, MockItemStorageFixtureInstance, MockItemSubItemDeepDocument, MockItemSubItemDocument, MockItemUserDocument, RulesUnitTestFirebaseTestingContextFixture, RulesUnitTestTestFirebaseInstance, TESTING_AUTHORIZED_FIREBASE_USER_ID, TestFirebaseContextFixture, TestFirebaseInstance, TestFirebaseStorageContextFixture, TestFirebaseStorageInstance, TestFirestoreContextFixture, TestFirestoreInstance, allChildMockItemSubItemDeepsWithinMockItem, authorizedFirebaseFactory, authorizedFirestoreOnlyFactory, authorizedTestWithMockItemCollection, authorizedTestWithMockItemStorage, changeFirestoreLogLevelBeforeAndAfterTests, clearTestFirestoreContextCollections, describeFirebaseStorageAccessorDriverTests, describeFirestoreAccessorDriverTests, describeFirestoreDocumentAccessorTests, describeFirestoreDocumentUtilityTests, describeFirestoreIterationTests, describeFirestoreQueryDriverTests, firebaseRulesUnitTestBuilder, makeMockItemCollections, makeRulesTestFirebaseStorageContext, makeRulesTestFirestoreContext, makeTestingFirebaseStorageAccesorDriver, makeTestingFirebaseStorageDrivers, makeTestingFirestoreAccesorDriver, makeTestingFirestoreDrivers, mockFirebaseModelServices, mockItemCollectionReference, mockItemConverter, mockItemFirebaseModelServiceFactory, mockItemFirestoreCollection, mockItemIdentity, mockItemPagedCollectionReference, mockItemPagedFirebaseModelServiceFactory, mockItemPagedFirestoreCollection, mockItemPagedFirestoreCollectionGroup, mockItemPagedIdentity, mockItemPrivateCollectionReference, mockItemPrivateCollectionReferenceFactory, mockItemPrivateConverter, mockItemPrivateFirebaseModelServiceFactory, mockItemPrivateFirestoreCollection, mockItemPrivateFirestoreCollectionGroup, mockItemPrivateIdentity, mockItemSettingsItemDencoder, mockItemSubItemCollectionReference, mockItemSubItemCollectionReferenceFactory, mockItemSubItemConverter, mockItemSubItemDeepCollectionReference, mockItemSubItemDeepCollectionReferenceFactory, mockItemSubItemDeepConverter, mockItemSubItemDeepFirebaseModelServiceFactory, mockItemSubItemDeepFirestoreCollection, mockItemSubItemDeepFirestoreCollectionGroup, mockItemSubItemDeepIdentity, mockItemSubItemFirebaseModelServiceFactory, mockItemSubItemFirestoreCollection, mockItemSubItemFirestoreCollectionGroup, mockItemSubItemIdentity, mockItemSystemDataConverter, mockItemSystemStateFirebaseModelServiceFactory, mockItemUserAccessorFactory, mockItemUserCollectionReference, mockItemUserCollectionReferenceFactory, mockItemUserConverter, mockItemUserFirebaseModelServiceFactory, mockItemUserFirestoreCollection, mockItemUserFirestoreCollectionGroup, mockItemUserIdentity, mockItemWithTestValue, mockItemWithValue, testWithMockItemCollectionFixture, testWithMockItemStorageFixture };
13999
+ export { AUTHORIZED_FIRESTORE_RULES, AUTHORIZED_STORAGE_RULES, DEFAULT_FIRESTORE_RULES_FILE_NAME, DEFAULT_MOCK_ITEM_PAGED_MAX_ITEMS_PER_PAGE, MOCK_FIREBASE_MODEL_SERVICE_FACTORIES, MOCK_ITEM_PAGED_ALPHA_DISTRIBUTION_SCHEME, MOCK_ITEM_PAGED_ENTRY_CONVERTER, MOCK_ITEM_SYSTEM_STATE_STORED_DATA_CONVERTER_MAP, MOCK_ITEM_USER_COLLECTION_NAME, MOCK_ITEM_USER_IDENTIFIER, MOCK_SYSTEM_STATE_TYPE, MockItemCollectionFixture, MockItemCollectionFixtureInstance, MockItemCollections, MockItemDocument, MockItemPagedDocument, MockItemPrivateDocument, MockItemSettingsItemEnum, MockItemStorageFixture, MockItemStorageFixtureInstance, MockItemSubItemDeepDocument, MockItemSubItemDocument, MockItemUserDocument, RulesUnitTestFirebaseTestingContextFixture, RulesUnitTestTestFirebaseInstance, TESTING_AUTHORIZED_FIREBASE_USER_ID, TestFirebaseContextFixture, TestFirebaseInstance, TestFirebaseStorageContextFixture, TestFirebaseStorageInstance, TestFirestoreContextFixture, TestFirestoreInstance, allChildMockItemSubItemDeepsWithinMockItem, authorizedFirebaseFactory, authorizedFirestoreOnlyFactory, authorizedTestWithMockItemCollection, authorizedTestWithMockItemStorage, changeFirestoreLogLevelBeforeAndAfterTests, clearTestFirestoreContextCollections, describeFirebaseStorageAccessorDriverTests, describeFirestoreAccessorDriverTests, describeFirestoreDocumentAccessorTests, describeFirestoreDocumentUtilityTests, describeFirestoreIterationTests, describeFirestoreQueryDriverTests, firebaseRulesUnitTestBuilder, firestoreRulesTestBuilder, makeMockItemCollections, makeRulesTestFirebaseStorageContext, makeRulesTestFirestoreContext, makeTestingFirebaseStorageAccesorDriver, makeTestingFirebaseStorageDrivers, makeTestingFirestoreAccesorDriver, makeTestingFirestoreDrivers, mockFirebaseModelServices, mockItemCollectionReference, mockItemConverter, mockItemFirebaseModelServiceFactory, mockItemFirestoreCollection, mockItemIdentity, mockItemPagedCollectionReference, mockItemPagedFirebaseModelServiceFactory, mockItemPagedFirestoreCollection, mockItemPagedFirestoreCollectionGroup, mockItemPagedIdentity, mockItemPrivateCollectionReference, mockItemPrivateCollectionReferenceFactory, mockItemPrivateConverter, mockItemPrivateFirebaseModelServiceFactory, mockItemPrivateFirestoreCollection, mockItemPrivateFirestoreCollectionGroup, mockItemPrivateIdentity, mockItemSettingsItemDencoder, mockItemSubItemCollectionReference, mockItemSubItemCollectionReferenceFactory, mockItemSubItemConverter, mockItemSubItemDeepCollectionReference, mockItemSubItemDeepCollectionReferenceFactory, mockItemSubItemDeepConverter, mockItemSubItemDeepFirebaseModelServiceFactory, mockItemSubItemDeepFirestoreCollection, mockItemSubItemDeepFirestoreCollectionGroup, mockItemSubItemDeepIdentity, mockItemSubItemFirebaseModelServiceFactory, mockItemSubItemFirestoreCollection, mockItemSubItemFirestoreCollectionGroup, mockItemSubItemIdentity, mockItemSystemDataConverter, mockItemSystemStateFirebaseModelServiceFactory, mockItemUserAccessorFactory, mockItemUserCollectionReference, mockItemUserCollectionReferenceFactory, mockItemUserConverter, mockItemUserFirebaseModelServiceFactory, mockItemUserFirestoreCollection, mockItemUserFirestoreCollectionGroup, mockItemUserIdentity, mockItemWithTestValue, mockItemWithValue, readFirestoreRulesFile, testWithMockItemCollectionFixture, testWithMockItemStorageFixture };