@dereekb/firebase 13.32.0 → 13.33.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.cjs.js CHANGED
@@ -5,12 +5,14 @@ var rulesUnitTesting = require('@firebase/rules-unit-testing');
5
5
  var firebase = require('@dereekb/firebase');
6
6
  var firestore = require('firebase/firestore');
7
7
  var test = require('@dereekb/util/test');
8
+ var node_fs = require('node:fs');
9
+ var node_path = require('node:path');
10
+ var node_url = require('node:url');
8
11
  var rxjs$1 = require('rxjs');
9
12
  var rxjs = require('@dereekb/rxjs');
10
13
  var dateFns = require('date-fns');
11
14
  var date = require('@dereekb/date');
12
15
  var node_stream = require('node:stream');
13
- var node_fs = require('node:fs');
14
16
 
15
17
  function _array_like_to_array$2(arr, len) {
16
18
  if (len == null || len > arr.length) len = arr.length;
@@ -23,7 +25,7 @@ function _array_with_holes$1(arr) {
23
25
  function _array_without_holes$2(arr) {
24
26
  if (Array.isArray(arr)) return _array_like_to_array$2(arr);
25
27
  }
26
- function asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, key, arg) {
28
+ function asyncGeneratorStep$7(gen, resolve, reject, _next, _throw, key, arg) {
27
29
  try {
28
30
  var info = gen[key](arg);
29
31
  var value = info.value;
@@ -37,22 +39,22 @@ function asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, key, arg) {
37
39
  Promise.resolve(value).then(_next, _throw);
38
40
  }
39
41
  }
40
- function _async_to_generator$6(fn) {
42
+ function _async_to_generator$7(fn) {
41
43
  return function() {
42
44
  var self = this, args = arguments;
43
45
  return new Promise(function(resolve, reject) {
44
46
  var gen = fn.apply(self, args);
45
47
  function _next(value) {
46
- asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, "next", value);
48
+ asyncGeneratorStep$7(gen, resolve, reject, _next, _throw, "next", value);
47
49
  }
48
50
  function _throw(err) {
49
- asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, "throw", err);
51
+ asyncGeneratorStep$7(gen, resolve, reject, _next, _throw, "throw", err);
50
52
  }
51
53
  _next(undefined);
52
54
  });
53
55
  };
54
56
  }
55
- function _define_property$9(obj, key, value) {
57
+ function _define_property$a(obj, key, value) {
56
58
  if (key in obj) {
57
59
  Object.defineProperty(obj, key, {
58
60
  value: value,
@@ -98,7 +100,7 @@ function _non_iterable_rest$1() {
98
100
  function _non_iterable_spread$2() {
99
101
  throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
100
102
  }
101
- function _object_spread$3(target) {
103
+ function _object_spread$4(target) {
102
104
  for(var i = 1; i < arguments.length; i++){
103
105
  var source = arguments[i] != null ? arguments[i] : {};
104
106
  var ownKeys = Object.keys(source);
@@ -108,7 +110,7 @@ function _object_spread$3(target) {
108
110
  }));
109
111
  }
110
112
  ownKeys.forEach(function(key) {
111
- _define_property$9(target, key, source[key]);
113
+ _define_property$a(target, key, source[key]);
112
114
  });
113
115
  }
114
116
  return target;
@@ -146,7 +148,7 @@ function _unsupported_iterable_to_array$2(o, minLen) {
146
148
  if (n === "Map" || n === "Set") return Array.from(n);
147
149
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array$2(o, minLen);
148
150
  }
149
- function _ts_generator$6(thisArg, body) {
151
+ function _ts_generator$7(thisArg, body) {
150
152
  var f, y, t, _ = {
151
153
  label: 0,
152
154
  sent: function() {
@@ -302,7 +304,7 @@ function _ts_generator$6(thisArg, body) {
302
304
  });
303
305
  return fuzzedMap;
304
306
  };
305
- var injectedDriver = _object_spread_props$2(_object_spread$3({}, driver), {
307
+ var injectedDriver = _object_spread_props$2(_object_spread$4({}, driver), {
306
308
  collection: fuzzedCollection,
307
309
  collectionGroup: fuzzedCollectionGroup,
308
310
  subcollection: fuzzedSubcollection,
@@ -320,7 +322,7 @@ function _ts_generator$6(thisArg, body) {
320
322
  * @param drivers - The base Firestore drivers to wrap.
321
323
  * @returns A {@link TestingFirestoreDrivers} marked with `firestoreDriverType: 'testing'` and a wrapped accessor driver from {@link makeTestingFirestoreAccesorDriver}.
322
324
  */ function makeTestingFirestoreDrivers(drivers) {
323
- return _object_spread_props$2(_object_spread$3({}, drivers), {
325
+ return _object_spread_props$2(_object_spread$4({}, drivers), {
324
326
  firestoreDriverType: 'testing',
325
327
  firestoreAccessorDriver: makeTestingFirestoreAccesorDriver(drivers.firestoreAccessorDriver)
326
328
  });
@@ -333,9 +335,9 @@ function _ts_generator$6(thisArg, body) {
333
335
  * @param context - The test context whose fuzzed collections should be cleared.
334
336
  * @param clearCollection - Callback that performs the actual deletion for a single collection.
335
337
  */ function clearTestFirestoreContextCollections(context, clearCollection) {
336
- return _async_to_generator$6(function() {
338
+ return _async_to_generator$7(function() {
337
339
  var names, tuples;
338
- return _ts_generator$6(this, function(_state) {
340
+ return _ts_generator$7(this, function(_state) {
339
341
  switch(_state.label){
340
342
  case 0:
341
343
  names = context.drivers.firestoreAccessorDriver.getFuzzedCollectionsNameMap();
@@ -357,7 +359,7 @@ function _ts_generator$6(thisArg, body) {
357
359
  })();
358
360
  }
359
361
 
360
- function _define_property$8(obj, key, value) {
362
+ function _define_property$9(obj, key, value) {
361
363
  if (key in obj) {
362
364
  Object.defineProperty(obj, key, {
363
365
  value: value,
@@ -370,7 +372,7 @@ function _define_property$8(obj, key, value) {
370
372
  }
371
373
  return obj;
372
374
  }
373
- function _object_spread$2(target) {
375
+ function _object_spread$3(target) {
374
376
  for(var i = 1; i < arguments.length; i++){
375
377
  var source = arguments[i] != null ? arguments[i] : {};
376
378
  var ownKeys = Object.keys(source);
@@ -380,7 +382,7 @@ function _object_spread$2(target) {
380
382
  }));
381
383
  }
382
384
  ownKeys.forEach(function(key) {
383
- _define_property$8(target, key, source[key]);
385
+ _define_property$9(target, key, source[key]);
384
386
  });
385
387
  }
386
388
  return target;
@@ -423,7 +425,7 @@ var bucketTestNameKey = 0;
423
425
  var random = Math.ceil(Math.random() * 999999) % 999999;
424
426
  return "test-bucket-".concat(time, "-").concat(random, "-").concat(bucketTestNameKey += 1);
425
427
  }) : driver.getDefaultBucket;
426
- var injectedDriver = _object_spread_props$1(_object_spread$2({}, driver), {
428
+ var injectedDriver = _object_spread_props$1(_object_spread$3({}, driver), {
427
429
  getDefaultBucket: defaultBucket
428
430
  });
429
431
  return injectedDriver;
@@ -435,7 +437,7 @@ var bucketTestNameKey = 0;
435
437
  * @param config - Optional config forwarded to {@link makeTestingFirebaseStorageAccesorDriver}; controls test-bucket override behavior.
436
438
  * @returns A {@link TestingFirebaseStorageDrivers} marked with `storageDriverType: 'testing'` and a wrapped accessor driver.
437
439
  */ function makeTestingFirebaseStorageDrivers(drivers, config) {
438
- return _object_spread_props$1(_object_spread$2({}, drivers), {
440
+ return _object_spread_props$1(_object_spread$3({}, drivers), {
439
441
  storageDriverType: 'testing',
440
442
  storageAccessorDriver: makeTestingFirebaseStorageAccesorDriver(drivers.storageAccessorDriver, config)
441
443
  });
@@ -469,7 +471,7 @@ function _create_class$6(Constructor, protoProps, staticProps) {
469
471
  if (protoProps) _defineProperties$6(Constructor.prototype, protoProps);
470
472
  return Constructor;
471
473
  }
472
- function _define_property$7(obj, key, value) {
474
+ function _define_property$8(obj, key, value) {
473
475
  if (key in obj) {
474
476
  Object.defineProperty(obj, key, {
475
477
  value: value,
@@ -535,8 +537,8 @@ function _is_native_reflect_construct$6() {
535
537
  */ var TestFirebaseInstance = /*#__PURE__*/ function() {
536
538
  function TestFirebaseInstance(firestoreContext, storageContext) {
537
539
  _class_call_check$7(this, TestFirebaseInstance);
538
- _define_property$7(this, "firestoreContext", void 0);
539
- _define_property$7(this, "storageContext", void 0);
540
+ _define_property$8(this, "firestoreContext", void 0);
541
+ _define_property$8(this, "storageContext", void 0);
540
542
  this.firestoreContext = firestoreContext;
541
543
  this.storageContext = storageContext;
542
544
  }
@@ -605,7 +607,7 @@ function _assert_this_initialized$5(self) {
605
607
  }
606
608
  return self;
607
609
  }
608
- function asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, key, arg) {
610
+ function asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, key, arg) {
609
611
  try {
610
612
  var info = gen[key](arg);
611
613
  var value = info.value;
@@ -619,16 +621,16 @@ function asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, key, arg) {
619
621
  Promise.resolve(value).then(_next, _throw);
620
622
  }
621
623
  }
622
- function _async_to_generator$5(fn) {
624
+ function _async_to_generator$6(fn) {
623
625
  return function() {
624
626
  var self = this, args = arguments;
625
627
  return new Promise(function(resolve, reject) {
626
628
  var gen = fn.apply(self, args);
627
629
  function _next(value) {
628
- asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, "next", value);
630
+ asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, "next", value);
629
631
  }
630
632
  function _throw(err) {
631
- asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, "throw", err);
633
+ asyncGeneratorStep$6(gen, resolve, reject, _next, _throw, "throw", err);
632
634
  }
633
635
  _next(undefined);
634
636
  });
@@ -656,7 +658,7 @@ function _create_class$5(Constructor, protoProps, staticProps) {
656
658
  if (protoProps) _defineProperties$5(Constructor.prototype, protoProps);
657
659
  return Constructor;
658
660
  }
659
- function _define_property$6(obj, key, value) {
661
+ function _define_property$7(obj, key, value) {
660
662
  if (key in obj) {
661
663
  Object.defineProperty(obj, key, {
662
664
  value: value,
@@ -688,7 +690,7 @@ function _inherits$5(subClass, superClass) {
688
690
  });
689
691
  if (superClass) _set_prototype_of$5(subClass, superClass);
690
692
  }
691
- function _object_spread$1(target) {
693
+ function _object_spread$2(target) {
692
694
  for(var i = 1; i < arguments.length; i++){
693
695
  var source = arguments[i] != null ? arguments[i] : {};
694
696
  var ownKeys = Object.keys(source);
@@ -698,7 +700,7 @@ function _object_spread$1(target) {
698
700
  }));
699
701
  }
700
702
  ownKeys.forEach(function(key) {
701
- _define_property$6(target, key, source[key]);
703
+ _define_property$7(target, key, source[key]);
702
704
  });
703
705
  }
704
706
  return target;
@@ -747,7 +749,7 @@ function _is_native_reflect_construct$5() {
747
749
  return !!result;
748
750
  })();
749
751
  }
750
- function _ts_generator$5(thisArg, body) {
752
+ function _ts_generator$6(thisArg, body) {
751
753
  var f, y, t, _ = {
752
754
  label: 0,
753
755
  sent: function() {
@@ -857,7 +859,7 @@ function _ts_generator$5(thisArg, body) {
857
859
  * @param rulesTestContext - The per-test rules context (authenticated or unauthenticated) used to obtain the Firestore instance.
858
860
  * @returns A {@link RulesUnitTestTestFirestoreContext} that exposes the rules-test environment and context alongside the standard Firestore context.
859
861
  */ function makeRulesTestFirestoreContext(drivers, rulesTestEnvironment, rulesTestContext) {
860
- var context = _object_spread_props(_object_spread$1({}, firebase.firestoreContextFactory(drivers)(rulesTestContext.firestore())), {
862
+ var context = _object_spread_props(_object_spread$2({}, firebase.firestoreContextFactory(drivers)(rulesTestContext.firestore())), {
861
863
  drivers: drivers,
862
864
  rulesTestContext: rulesTestContext,
863
865
  rulesTestEnvironment: rulesTestEnvironment
@@ -875,7 +877,7 @@ function _ts_generator$5(thisArg, body) {
875
877
  * @param rulesTestContext - The per-test rules context used to obtain the Storage instance.
876
878
  * @returns A {@link RulesUnitTestTestFirebaseStorageContext} that exposes the rules-test environment and context alongside the standard Storage context.
877
879
  */ function makeRulesTestFirebaseStorageContext(drivers, rulesTestEnvironment, rulesTestContext) {
878
- var context = _object_spread_props(_object_spread$1({}, firebase.firebaseStorageContextFactory(drivers)(rulesTestContext.storage())), {
880
+ var context = _object_spread_props(_object_spread$2({}, firebase.firebaseStorageContextFactory(drivers)(rulesTestContext.storage())), {
879
881
  drivers: drivers,
880
882
  rulesTestContext: rulesTestContext,
881
883
  rulesTestEnvironment: rulesTestEnvironment
@@ -892,13 +894,13 @@ function _ts_generator$5(thisArg, body) {
892
894
  function RulesUnitTestTestFirebaseInstance(drivers, rulesTestEnvironment, rulesTestContext) {
893
895
  var _this = this;
894
896
  _class_call_check$6(this, RulesUnitTestTestFirebaseInstance);
895
- _define_property$6(this, "drivers", void 0);
896
- _define_property$6(this, "rulesTestEnvironment", void 0);
897
- _define_property$6(this, "rulesTestContext", void 0);
898
- _define_property$6(this, "_firestoreContext", util.cachedGetter(function() {
897
+ _define_property$7(this, "drivers", void 0);
898
+ _define_property$7(this, "rulesTestEnvironment", void 0);
899
+ _define_property$7(this, "rulesTestContext", void 0);
900
+ _define_property$7(this, "_firestoreContext", util.cachedGetter(function() {
899
901
  return makeRulesTestFirestoreContext(_this.drivers, _this.rulesTestEnvironment, _this.rulesTestContext);
900
902
  }));
901
- _define_property$6(this, "_storageContext", util.cachedGetter(function() {
903
+ _define_property$7(this, "_storageContext", util.cachedGetter(function() {
902
904
  return makeRulesTestFirebaseStorageContext(_this.drivers, _this.rulesTestEnvironment, _this.rulesTestContext);
903
905
  }));
904
906
  this.drivers = drivers;
@@ -972,8 +974,8 @@ function _ts_generator$5(thisArg, body) {
972
974
  // Initialize the emulator environment once per test suite.
973
975
  // This is the expensive operation that hits the emulator's REST API (e.g. PUT /internal/setRules).
974
976
  beforeAll(function() {
975
- return _async_to_generator$5(function() {
976
- return _ts_generator$5(this, function(_state) {
977
+ return _async_to_generator$6(function() {
978
+ return _ts_generator$6(this, function(_state) {
977
979
  switch(_state.label){
978
980
  case 0:
979
981
  return [
@@ -991,8 +993,8 @@ function _ts_generator$5(thisArg, body) {
991
993
  });
992
994
  // Clean up the emulator environment once after all tests complete.
993
995
  afterAll(function() {
994
- return _async_to_generator$5(function() {
995
- return _ts_generator$5(this, function(_state) {
996
+ return _async_to_generator$6(function() {
997
+ return _ts_generator$6(this, function(_state) {
996
998
  switch(_state.label){
997
999
  case 0:
998
1000
  if (!rulesTestEnvironment) return [
@@ -1022,11 +1024,11 @@ function _ts_generator$5(thisArg, body) {
1022
1024
  // (via makeTestingFirestoreAccesorDriver) to provide data isolation between tests.
1023
1025
  var clearInstance = null;
1024
1026
  beforeEach(function() {
1025
- return _async_to_generator$5(function() {
1027
+ return _async_to_generator$6(function() {
1026
1028
  var drivers, rulesTestContext, instance;
1027
- return _ts_generator$5(this, function(_state) {
1029
+ return _ts_generator$6(this, function(_state) {
1028
1030
  try {
1029
- drivers = _object_spread$1({}, makeTestingFirestoreDrivers(firebase.firebaseFirestoreClientDrivers()), makeTestingFirebaseStorageDrivers(firebase.firebaseStorageClientDrivers(), {
1031
+ drivers = _object_spread$2({}, makeTestingFirestoreDrivers(firebase.firebaseFirestoreClientDrivers()), makeTestingFirebaseStorageDrivers(firebase.firebaseStorageClientDrivers(), {
1030
1032
  useTestDefaultBucket: true
1031
1033
  }));
1032
1034
  if (config.testEnvironment.collectionNames) {
@@ -1174,7 +1176,7 @@ function _create_class$4(Constructor, protoProps, staticProps) {
1174
1176
  if (protoProps) _defineProperties$4(Constructor.prototype, protoProps);
1175
1177
  return Constructor;
1176
1178
  }
1177
- function _define_property$5(obj, key, value) {
1179
+ function _define_property$6(obj, key, value) {
1178
1180
  if (key in obj) {
1179
1181
  Object.defineProperty(obj, key, {
1180
1182
  value: value,
@@ -1856,7 +1858,7 @@ function _is_native_reflect_construct$4() {
1856
1858
  *
1857
1859
  * Used when creating the mock system state Firestore collection to register
1858
1860
  * the {@link MockSystemData} converter under the {@link MOCK_SYSTEM_STATE_TYPE} key.
1859
- */ var MOCK_ITEM_SYSTEM_STATE_STORED_DATA_CONVERTER_MAP = _define_property$5({}, MOCK_SYSTEM_STATE_TYPE, mockItemSystemDataConverter);
1861
+ */ var MOCK_ITEM_SYSTEM_STATE_STORED_DATA_CONVERTER_MAP = _define_property$6({}, MOCK_SYSTEM_STATE_TYPE, mockItemSystemDataConverter);
1860
1862
 
1861
1863
  function _class_call_check$4(instance, Constructor) {
1862
1864
  if (!(instance instanceof Constructor)) {
@@ -2051,7 +2053,7 @@ function _create_class$3(Constructor, protoProps, staticProps) {
2051
2053
  if (protoProps) _defineProperties$3(Constructor.prototype, protoProps);
2052
2054
  return Constructor;
2053
2055
  }
2054
- function _define_property$4(obj, key, value) {
2056
+ function _define_property$5(obj, key, value) {
2055
2057
  if (key in obj) {
2056
2058
  Object.defineProperty(obj, key, {
2057
2059
  value: value,
@@ -2117,8 +2119,8 @@ function _is_native_reflect_construct$3() {
2117
2119
  */ var MockItemCollectionFixtureInstance = /*#__PURE__*/ function() {
2118
2120
  function MockItemCollectionFixtureInstance(fixture) {
2119
2121
  _class_call_check$3(this, MockItemCollectionFixtureInstance);
2120
- _define_property$4(this, "fixture", void 0);
2121
- _define_property$4(this, "collections", void 0);
2122
+ _define_property$5(this, "fixture", void 0);
2123
+ _define_property$5(this, "collections", void 0);
2122
2124
  this.fixture = fixture;
2123
2125
  this.collections = makeMockItemCollections(fixture.parent.firestoreContext);
2124
2126
  }
@@ -2268,7 +2270,7 @@ function _create_class$2(Constructor, protoProps, staticProps) {
2268
2270
  if (protoProps) _defineProperties$2(Constructor.prototype, protoProps);
2269
2271
  return Constructor;
2270
2272
  }
2271
- function _define_property$3(obj, key, value) {
2273
+ function _define_property$4(obj, key, value) {
2272
2274
  if (key in obj) {
2273
2275
  Object.defineProperty(obj, key, {
2274
2276
  value: value,
@@ -2333,7 +2335,7 @@ function _is_native_reflect_construct$2() {
2333
2335
  */ var MockItemStorageFixtureInstance = /*#__PURE__*/ function() {
2334
2336
  function MockItemStorageFixtureInstance(fixture) {
2335
2337
  _class_call_check$2(this, MockItemStorageFixtureInstance);
2336
- _define_property$3(this, "fixture", void 0);
2338
+ _define_property$4(this, "fixture", void 0);
2337
2339
  this.fixture = fixture;
2338
2340
  }
2339
2341
  _create_class$2(MockItemStorageFixtureInstance, [
@@ -2423,6 +2425,314 @@ function _is_native_reflect_construct$2() {
2423
2425
  * Uses @firebase/storage. This is ONLY for the client.
2424
2426
  */ var authorizedTestWithMockItemStorage = testWithMockItemStorageFixture()(authorizedFirebaseFactory);
2425
2427
 
2428
+ function asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, key, arg) {
2429
+ try {
2430
+ var info = gen[key](arg);
2431
+ var value = info.value;
2432
+ } catch (error) {
2433
+ reject(error);
2434
+ return;
2435
+ }
2436
+ if (info.done) {
2437
+ resolve(value);
2438
+ } else {
2439
+ Promise.resolve(value).then(_next, _throw);
2440
+ }
2441
+ }
2442
+ function _async_to_generator$5(fn) {
2443
+ return function() {
2444
+ var self = this, args = arguments;
2445
+ return new Promise(function(resolve, reject) {
2446
+ var gen = fn.apply(self, args);
2447
+ function _next(value) {
2448
+ asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, "next", value);
2449
+ }
2450
+ function _throw(err) {
2451
+ asyncGeneratorStep$5(gen, resolve, reject, _next, _throw, "throw", err);
2452
+ }
2453
+ _next(undefined);
2454
+ });
2455
+ };
2456
+ }
2457
+ function _define_property$3(obj, key, value) {
2458
+ if (key in obj) {
2459
+ Object.defineProperty(obj, key, {
2460
+ value: value,
2461
+ enumerable: true,
2462
+ configurable: true,
2463
+ writable: true
2464
+ });
2465
+ } else {
2466
+ obj[key] = value;
2467
+ }
2468
+ return obj;
2469
+ }
2470
+ function _object_spread$1(target) {
2471
+ for(var i = 1; i < arguments.length; i++){
2472
+ var source = arguments[i] != null ? arguments[i] : {};
2473
+ var ownKeys = Object.keys(source);
2474
+ if (typeof Object.getOwnPropertySymbols === "function") {
2475
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
2476
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
2477
+ }));
2478
+ }
2479
+ ownKeys.forEach(function(key) {
2480
+ _define_property$3(target, key, source[key]);
2481
+ });
2482
+ }
2483
+ return target;
2484
+ }
2485
+ function _ts_generator$5(thisArg, body) {
2486
+ var f, y, t, _ = {
2487
+ label: 0,
2488
+ sent: function() {
2489
+ if (t[0] & 1) throw t[1];
2490
+ return t[1];
2491
+ },
2492
+ trys: [],
2493
+ ops: []
2494
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
2495
+ return d(g, "next", {
2496
+ value: verb(0)
2497
+ }), d(g, "throw", {
2498
+ value: verb(1)
2499
+ }), d(g, "return", {
2500
+ value: verb(2)
2501
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
2502
+ value: function() {
2503
+ return this;
2504
+ }
2505
+ }), g;
2506
+ function verb(n) {
2507
+ return function(v) {
2508
+ return step([
2509
+ n,
2510
+ v
2511
+ ]);
2512
+ };
2513
+ }
2514
+ function step(op) {
2515
+ if (f) throw new TypeError("Generator is already executing.");
2516
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
2517
+ 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;
2518
+ if (y = 0, t) op = [
2519
+ op[0] & 2,
2520
+ t.value
2521
+ ];
2522
+ switch(op[0]){
2523
+ case 0:
2524
+ case 1:
2525
+ t = op;
2526
+ break;
2527
+ case 4:
2528
+ _.label++;
2529
+ return {
2530
+ value: op[1],
2531
+ done: false
2532
+ };
2533
+ case 5:
2534
+ _.label++;
2535
+ y = op[1];
2536
+ op = [
2537
+ 0
2538
+ ];
2539
+ continue;
2540
+ case 7:
2541
+ op = _.ops.pop();
2542
+ _.trys.pop();
2543
+ continue;
2544
+ default:
2545
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
2546
+ _ = 0;
2547
+ continue;
2548
+ }
2549
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
2550
+ _.label = op[1];
2551
+ break;
2552
+ }
2553
+ if (op[0] === 6 && _.label < t[1]) {
2554
+ _.label = t[1];
2555
+ t = op;
2556
+ break;
2557
+ }
2558
+ if (t && _.label < t[2]) {
2559
+ _.label = t[2];
2560
+ _.ops.push(op);
2561
+ break;
2562
+ }
2563
+ if (t[2]) _.ops.pop();
2564
+ _.trys.pop();
2565
+ continue;
2566
+ }
2567
+ op = body.call(thisArg, _);
2568
+ } catch (e) {
2569
+ op = [
2570
+ 6,
2571
+ e
2572
+ ];
2573
+ y = 0;
2574
+ } finally{
2575
+ f = t = 0;
2576
+ }
2577
+ if (op[0] & 5) throw op[1];
2578
+ return {
2579
+ value: op[0] ? op[1] : void 0,
2580
+ done: true
2581
+ };
2582
+ }
2583
+ }
2584
+ /**
2585
+ * Default file name of the workspace's Firestore security rules.
2586
+ */ var DEFAULT_FIRESTORE_RULES_FILE_NAME = 'firestore.rules';
2587
+ /**
2588
+ * Reads the workspace's Firestore rules file by walking up from the given module/path.
2589
+ *
2590
+ * @param config - The starting location and optional file name.
2591
+ * @returns The contents of the rules file.
2592
+ * @throws {Error} When no rules file is found at or above the starting location.
2593
+ */ function readFirestoreRulesFile(config) {
2594
+ var from = config.from, _config_fileName = config.fileName, fileName = _config_fileName === void 0 ? DEFAULT_FIRESTORE_RULES_FILE_NAME : _config_fileName;
2595
+ var startPath = from.startsWith('file:') ? node_path.dirname(node_url.fileURLToPath(from)) : from;
2596
+ var directory = startPath;
2597
+ var found = null;
2598
+ // walk up to the filesystem root looking for the rules file.
2599
+ while(!found){
2600
+ var candidate = node_path.join(directory, fileName !== null && fileName !== void 0 ? fileName : DEFAULT_FIRESTORE_RULES_FILE_NAME);
2601
+ if (node_fs.existsSync(candidate)) {
2602
+ found = candidate;
2603
+ } else {
2604
+ var parent = node_path.dirname(directory);
2605
+ if (parent === directory) {
2606
+ break;
2607
+ }
2608
+ directory = parent;
2609
+ }
2610
+ }
2611
+ if (!found) {
2612
+ throw new Error('readFirestoreRulesFile(): could not find "'.concat(fileName, '" at or above "').concat(startPath, '".'));
2613
+ }
2614
+ return node_fs.readFileSync(found, 'utf8');
2615
+ }
2616
+ /**
2617
+ * Registers vitest hooks that initialize a Firestore security-rules test environment, and invokes
2618
+ * the given callback with a {@link FirestoreRulesTestFixture}.
2619
+ *
2620
+ * The environment is created once per suite (`beforeAll`), torn down once (`afterAll`), and the
2621
+ * Firestore data is cleared between tests (`beforeEach`).
2622
+ *
2623
+ * @param config - The project id and rules to load.
2624
+ * @returns A function that takes the test body builder.
2625
+ *
2626
+ * @example
2627
+ * ```ts
2628
+ * const rulesTest = firestoreRulesTestBuilder({
2629
+ * projectId: 'demo-api-rules-test',
2630
+ * rules: readFirestoreRulesFile({ from: import.meta.url })
2631
+ * });
2632
+ *
2633
+ * describe('firestore.rules', () => {
2634
+ * rulesTest((f) => {
2635
+ * it('allows the owner to read their own document', async () => {
2636
+ * await assertSucceeds(getDoc(doc(f.firestoreForUser('a'), 'uec', 'a')));
2637
+ * });
2638
+ * });
2639
+ * });
2640
+ * ```
2641
+ */ function firestoreRulesTestBuilder(config) {
2642
+ var projectId = config.projectId, rules = config.rules, firestore = config.firestore;
2643
+ return function(buildTests) {
2644
+ var rulesTestEnvironment;
2645
+ var contextFirestore = function contextFirestore(context) {
2646
+ return context.firestore();
2647
+ };
2648
+ var fixture = {
2649
+ get rulesTestEnvironment () {
2650
+ return rulesTestEnvironment;
2651
+ },
2652
+ firestoreForUser: function firestoreForUser(userId, tokenOptions) {
2653
+ return contextFirestore(rulesTestEnvironment.authenticatedContext(userId, tokenOptions !== null && tokenOptions !== void 0 ? tokenOptions : undefined));
2654
+ },
2655
+ unauthenticatedFirestore: function unauthenticatedFirestore() {
2656
+ return contextFirestore(rulesTestEnvironment.unauthenticatedContext());
2657
+ },
2658
+ withSecurityRulesDisabled: function withSecurityRulesDisabled(fn) {
2659
+ return rulesTestEnvironment.withSecurityRulesDisabled(function(context) {
2660
+ return fn(contextFirestore(context));
2661
+ });
2662
+ }
2663
+ };
2664
+ beforeAll(function() {
2665
+ return _async_to_generator$5(function() {
2666
+ return _ts_generator$5(this, function(_state) {
2667
+ switch(_state.label){
2668
+ case 0:
2669
+ return [
2670
+ 4,
2671
+ rulesUnitTesting.initializeTestEnvironment({
2672
+ projectId: projectId,
2673
+ firestore: _object_spread$1({
2674
+ rules: rules
2675
+ }, firestore)
2676
+ })
2677
+ ];
2678
+ case 1:
2679
+ rulesTestEnvironment = _state.sent();
2680
+ return [
2681
+ 2
2682
+ ];
2683
+ }
2684
+ });
2685
+ })();
2686
+ });
2687
+ afterAll(function() {
2688
+ return _async_to_generator$5(function() {
2689
+ return _ts_generator$5(this, function(_state) {
2690
+ switch(_state.label){
2691
+ case 0:
2692
+ if (!rulesTestEnvironment) return [
2693
+ 3,
2694
+ 2
2695
+ ];
2696
+ return [
2697
+ 4,
2698
+ rulesTestEnvironment.cleanup().catch(function(e) {
2699
+ console.warn('firestoreRulesTestBuilder(): Failed to cleanup rules test environment', e);
2700
+ throw e;
2701
+ })
2702
+ ];
2703
+ case 1:
2704
+ _state.sent();
2705
+ _state.label = 2;
2706
+ case 2:
2707
+ return [
2708
+ 2
2709
+ ];
2710
+ }
2711
+ });
2712
+ })();
2713
+ });
2714
+ beforeEach(function() {
2715
+ return _async_to_generator$5(function() {
2716
+ return _ts_generator$5(this, function(_state) {
2717
+ switch(_state.label){
2718
+ case 0:
2719
+ return [
2720
+ 4,
2721
+ rulesTestEnvironment.clearFirestore()
2722
+ ];
2723
+ case 1:
2724
+ _state.sent();
2725
+ return [
2726
+ 2
2727
+ ];
2728
+ }
2729
+ });
2730
+ })();
2731
+ });
2732
+ buildTests(fixture);
2733
+ };
2734
+ }
2735
+
2426
2736
  function _assert_this_initialized$1(self) {
2427
2737
  if (self === void 0) {
2428
2738
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
@@ -13687,8 +13997,17 @@ function _ts_generator(thisArg, body) {
13687
13997
  });
13688
13998
  }
13689
13999
 
14000
+ Object.defineProperty(exports, "assertFails", {
14001
+ enumerable: true,
14002
+ get: function () { return rulesUnitTesting.assertFails; }
14003
+ });
14004
+ Object.defineProperty(exports, "assertSucceeds", {
14005
+ enumerable: true,
14006
+ get: function () { return rulesUnitTesting.assertSucceeds; }
14007
+ });
13690
14008
  exports.AUTHORIZED_FIRESTORE_RULES = AUTHORIZED_FIRESTORE_RULES;
13691
14009
  exports.AUTHORIZED_STORAGE_RULES = AUTHORIZED_STORAGE_RULES;
14010
+ exports.DEFAULT_FIRESTORE_RULES_FILE_NAME = DEFAULT_FIRESTORE_RULES_FILE_NAME;
13692
14011
  exports.DEFAULT_MOCK_ITEM_PAGED_MAX_ITEMS_PER_PAGE = DEFAULT_MOCK_ITEM_PAGED_MAX_ITEMS_PER_PAGE;
13693
14012
  exports.MOCK_FIREBASE_MODEL_SERVICE_FACTORIES = MOCK_FIREBASE_MODEL_SERVICE_FACTORIES;
13694
14013
  exports.MOCK_ITEM_PAGED_ALPHA_DISTRIBUTION_SCHEME = MOCK_ITEM_PAGED_ALPHA_DISTRIBUTION_SCHEME;
@@ -13731,6 +14050,7 @@ exports.describeFirestoreDocumentUtilityTests = describeFirestoreDocumentUtility
13731
14050
  exports.describeFirestoreIterationTests = describeFirestoreIterationTests;
13732
14051
  exports.describeFirestoreQueryDriverTests = describeFirestoreQueryDriverTests;
13733
14052
  exports.firebaseRulesUnitTestBuilder = firebaseRulesUnitTestBuilder;
14053
+ exports.firestoreRulesTestBuilder = firestoreRulesTestBuilder;
13734
14054
  exports.makeMockItemCollections = makeMockItemCollections;
13735
14055
  exports.makeRulesTestFirebaseStorageContext = makeRulesTestFirebaseStorageContext;
13736
14056
  exports.makeRulesTestFirestoreContext = makeRulesTestFirestoreContext;
@@ -13783,5 +14103,6 @@ exports.mockItemUserFirestoreCollectionGroup = mockItemUserFirestoreCollectionGr
13783
14103
  exports.mockItemUserIdentity = mockItemUserIdentity;
13784
14104
  exports.mockItemWithTestValue = mockItemWithTestValue;
13785
14105
  exports.mockItemWithValue = mockItemWithValue;
14106
+ exports.readFirestoreRulesFile = readFirestoreRulesFile;
13786
14107
  exports.testWithMockItemCollectionFixture = testWithMockItemCollectionFixture;
13787
14108
  exports.testWithMockItemStorageFixture = testWithMockItemStorageFixture;