@firebase/firestore 3.4.0 → 3.4.1-canary.0b385f18c

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 (100) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/firestore/compat/index.d.ts +1 -1
  3. package/dist/firestore/src/index/directional_index_byte_encoder.d.ts +24 -0
  4. package/dist/firestore/src/index/firestore_index_value_writer.d.ts +33 -0
  5. package/dist/firestore/src/index/index_byte_encoder.d.ts +14 -0
  6. package/dist/firestore/src/index/ordered_code_writer.d.ts +60 -0
  7. package/dist/firestore/src/lite-api/reference.d.ts +4 -2
  8. package/dist/firestore/src/lite-api/reference_impl.d.ts +5 -0
  9. package/dist/firestore/src/lite-api/transaction.d.ts +4 -0
  10. package/dist/firestore/src/lite-api/write_batch.d.ts +3 -0
  11. package/dist/firestore/src/local/indexeddb_remote_document_cache.d.ts +5 -0
  12. package/dist/firestore/src/model/collections.d.ts +0 -4
  13. package/dist/firestore/src/model/document.d.ts +3 -1
  14. package/dist/firestore/src/model/values.d.ts +3 -0
  15. package/dist/firestore/src/util/byte_string.d.ts +1 -0
  16. package/dist/firestore/src/util/error.d.ts +2 -3
  17. package/dist/firestore/test/unit/index/ordered_code_writer.test.d.ts +1 -0
  18. package/dist/firestore/test/util/helpers.d.ts +1 -0
  19. package/dist/index.d.ts +13 -21
  20. package/dist/index.esm2017.js +2649 -2640
  21. package/dist/index.esm2017.js.map +1 -1
  22. package/dist/index.esm5.js +2640 -2630
  23. package/dist/index.esm5.js.map +1 -1
  24. package/dist/index.node.cjs.js +49 -38
  25. package/dist/index.node.cjs.js.map +1 -1
  26. package/dist/index.node.mjs +50 -35
  27. package/dist/index.node.mjs.map +1 -1
  28. package/dist/index.rn.js +2847 -2838
  29. package/dist/index.rn.js.map +1 -1
  30. package/dist/internal.d.ts +18 -22
  31. package/dist/lite/firestore/compat/index.d.ts +1 -1
  32. package/dist/lite/firestore/src/index/directional_index_byte_encoder.d.ts +24 -0
  33. package/dist/lite/firestore/src/index/firestore_index_value_writer.d.ts +33 -0
  34. package/dist/lite/firestore/src/index/index_byte_encoder.d.ts +14 -0
  35. package/dist/lite/firestore/src/index/ordered_code_writer.d.ts +60 -0
  36. package/dist/lite/firestore/src/lite-api/reference.d.ts +4 -2
  37. package/dist/lite/firestore/src/lite-api/reference_impl.d.ts +5 -0
  38. package/dist/lite/firestore/src/lite-api/transaction.d.ts +4 -0
  39. package/dist/lite/firestore/src/lite-api/write_batch.d.ts +3 -0
  40. package/dist/lite/firestore/src/local/indexeddb_remote_document_cache.d.ts +5 -0
  41. package/dist/lite/firestore/src/model/collections.d.ts +0 -4
  42. package/dist/lite/firestore/src/model/document.d.ts +3 -1
  43. package/dist/lite/firestore/src/model/values.d.ts +3 -0
  44. package/dist/lite/firestore/src/util/byte_string.d.ts +1 -0
  45. package/dist/lite/firestore/src/util/error.d.ts +2 -3
  46. package/dist/lite/firestore/test/unit/index/ordered_code_writer.test.d.ts +1 -0
  47. package/dist/lite/firestore/test/util/helpers.d.ts +1 -0
  48. package/dist/lite/index.browser.esm2017.js +846 -833
  49. package/dist/lite/index.browser.esm2017.js.map +1 -1
  50. package/dist/lite/index.browser.esm5.js +834 -820
  51. package/dist/lite/index.browser.esm5.js.map +1 -1
  52. package/dist/lite/index.d.ts +18 -21
  53. package/dist/lite/index.node.cjs.js +26 -8
  54. package/dist/lite/index.node.cjs.js.map +1 -1
  55. package/dist/lite/index.node.mjs +27 -9
  56. package/dist/lite/index.node.mjs.map +1 -1
  57. package/dist/lite/index.rn.esm2017.js +836 -823
  58. package/dist/lite/index.rn.esm2017.js.map +1 -1
  59. package/dist/lite/internal.d.ts +86 -21
  60. package/dist/lite/packages/firestore/babel-register.d.ts +1 -0
  61. package/dist/lite/packages/firestore/compat/index.d.ts +1 -1
  62. package/dist/lite/packages/firestore/dist/lite/index.browser.esm2017.d.ts +114 -113
  63. package/dist/lite/packages/firestore/src/index/directional_index_byte_encoder.d.ts +24 -0
  64. package/dist/lite/packages/firestore/src/index/firestore_index_value_writer.d.ts +33 -0
  65. package/dist/lite/packages/firestore/src/index/index_byte_encoder.d.ts +14 -0
  66. package/dist/lite/packages/firestore/src/index/ordered_code_writer.d.ts +60 -0
  67. package/dist/lite/packages/firestore/src/lite-api/reference.d.ts +4 -2
  68. package/dist/lite/packages/firestore/src/lite-api/reference_impl.d.ts +5 -0
  69. package/dist/lite/packages/firestore/src/lite-api/transaction.d.ts +4 -0
  70. package/dist/lite/packages/firestore/src/lite-api/write_batch.d.ts +3 -0
  71. package/dist/lite/packages/firestore/src/local/indexeddb_remote_document_cache.d.ts +5 -0
  72. package/dist/lite/packages/firestore/src/model/collections.d.ts +0 -4
  73. package/dist/lite/packages/firestore/src/model/document.d.ts +3 -1
  74. package/dist/lite/packages/firestore/src/model/values.d.ts +3 -0
  75. package/dist/lite/packages/firestore/src/util/byte_string.d.ts +1 -0
  76. package/dist/lite/packages/firestore/src/util/error.d.ts +2 -3
  77. package/dist/lite/packages/firestore/test/unit/index/ordered_code_writer.test.d.ts +1 -0
  78. package/dist/lite/packages/firestore/test/util/helpers.d.ts +1 -0
  79. package/dist/lite/private.d.ts +85 -21
  80. package/dist/packages/firestore/babel-register.d.ts +1 -0
  81. package/dist/packages/firestore/compat/index.d.ts +1 -1
  82. package/dist/packages/firestore/dist/index.esm2017.d.ts +152 -152
  83. package/dist/packages/firestore/src/index/directional_index_byte_encoder.d.ts +24 -0
  84. package/dist/packages/firestore/src/index/firestore_index_value_writer.d.ts +33 -0
  85. package/dist/packages/firestore/src/index/index_byte_encoder.d.ts +14 -0
  86. package/dist/packages/firestore/src/index/ordered_code_writer.d.ts +60 -0
  87. package/dist/packages/firestore/src/lite-api/reference.d.ts +4 -2
  88. package/dist/packages/firestore/src/lite-api/reference_impl.d.ts +5 -0
  89. package/dist/packages/firestore/src/lite-api/transaction.d.ts +4 -0
  90. package/dist/packages/firestore/src/lite-api/write_batch.d.ts +3 -0
  91. package/dist/packages/firestore/src/local/indexeddb_remote_document_cache.d.ts +5 -0
  92. package/dist/packages/firestore/src/model/collections.d.ts +0 -4
  93. package/dist/packages/firestore/src/model/document.d.ts +3 -1
  94. package/dist/packages/firestore/src/model/values.d.ts +3 -0
  95. package/dist/packages/firestore/src/util/byte_string.d.ts +1 -0
  96. package/dist/packages/firestore/src/util/error.d.ts +2 -3
  97. package/dist/packages/firestore/test/unit/index/ordered_code_writer.test.d.ts +1 -0
  98. package/dist/packages/firestore/test/util/helpers.d.ts +1 -0
  99. package/dist/private.d.ts +17 -22
  100. package/package.json +10 -10
@@ -2,16 +2,15 @@ import { _getProvider, getApp, _removeServiceInstance, _registerComponent, regis
2
2
  import { Component } from '@firebase/component';
3
3
  import { Logger, LogLevel } from '@firebase/logger';
4
4
  import { inspect, TextEncoder, TextDecoder } from 'util';
5
- import { createMockUserToken, getModularInstance, deepEqual, getUA, isIndexedDBAvailable, isSafari } from '@firebase/util';
5
+ import { FirebaseError, createMockUserToken, getModularInstance, deepEqual, getUA, isIndexedDBAvailable, isSafari } from '@firebase/util';
6
6
  import { randomBytes as randomBytes$1 } from 'crypto';
7
- import module from 'module';
8
7
  import { credentials, loadPackageDefinition, Metadata } from '@grpc/grpc-js';
9
8
  import { dirname, resolve, join } from 'path';
10
9
  import { fileURLToPath } from 'url';
11
10
  import { loadSync } from '@grpc/proto-loader';
12
11
 
13
12
  const name = "@firebase/firestore";
14
- const version$1 = "3.4.0";
13
+ const version$1 = "3.4.1-canary.0b385f18c";
15
14
 
16
15
  /**
17
16
  * @license
@@ -64,7 +63,7 @@ User.GOOGLE_CREDENTIALS = new User('google-credentials-uid');
64
63
  User.FIRST_PARTY = new User('first-party-uid');
65
64
  User.MOCK_USER = new User('mock-user');
66
65
 
67
- const version = "9.6.0";
66
+ const version = "9.6.1-canary.0b385f18c";
68
67
 
69
68
  /**
70
69
  * @license
@@ -384,7 +383,7 @@ const Code = {
384
383
  DATA_LOSS: 'data-loss'
385
384
  };
386
385
  /** An error returned by a Firestore operation. */
387
- class FirestoreError extends Error {
386
+ class FirestoreError extends FirebaseError {
388
387
  /** @hideconstructor */
389
388
  constructor(
390
389
  /**
@@ -395,11 +394,9 @@ class FirestoreError extends Error {
395
394
  * A custom error description.
396
395
  */
397
396
  message) {
398
- super(message);
397
+ super(code, message);
399
398
  this.code = code;
400
399
  this.message = message;
401
- /** The custom name for all FirestoreErrors. */
402
- this.name = 'FirebaseError';
403
400
  // HACK: We write a toString property directly because Error is not a real
404
401
  // class and so inheritance does not work correctly. We could alternatively
405
402
  // do the same "back-door inheritance" trick that FirebaseError does.
@@ -3162,6 +3159,19 @@ class ByteString {
3162
3159
  const binaryString = binaryStringFromUint8Array(array);
3163
3160
  return new ByteString(binaryString);
3164
3161
  }
3162
+ [Symbol.iterator]() {
3163
+ let i = 0;
3164
+ return {
3165
+ next: () => {
3166
+ if (i < this.binaryString.length) {
3167
+ return { value: this.binaryString.charCodeAt(i++), done: false };
3168
+ }
3169
+ else {
3170
+ return { value: undefined, done: true };
3171
+ }
3172
+ }
3173
+ };
3174
+ }
3165
3175
  toBase64() {
3166
3176
  return encodeBase64(this.binaryString);
3167
3177
  }
@@ -3522,6 +3532,9 @@ function typeOrder(value) {
3522
3532
  }
3523
3533
  /** Tests `left` and `right` for equality based on the backend semantics. */
3524
3534
  function valueEquals(left, right) {
3535
+ if (left === right) {
3536
+ return true;
3537
+ }
3525
3538
  const leftType = typeOrder(left);
3526
3539
  const rightType = typeOrder(right);
3527
3540
  if (leftType !== rightType) {
@@ -3612,6 +3625,9 @@ function arrayValueContains(haystack, needle) {
3612
3625
  return ((haystack.values || []).find(v => valueEquals(v, needle)) !== undefined);
3613
3626
  }
3614
3627
  function valueCompare(left, right) {
3628
+ if (left === right) {
3629
+ return 0;
3630
+ }
3615
3631
  const leftType = typeOrder(left);
3616
3632
  const rightType = typeOrder(right);
3617
3633
  if (leftType !== rightType) {
@@ -4183,7 +4199,7 @@ class MutableDocument {
4183
4199
  this.documentState === other.documentState &&
4184
4200
  this.data.isEqual(other.data));
4185
4201
  }
4186
- clone() {
4202
+ mutableCopy() {
4187
4203
  return new MutableDocument(this.key, this.documentType, this.version, this.data.clone(), this.documentState);
4188
4204
  }
4189
4205
  toString() {
@@ -11920,18 +11936,20 @@ function localStoreApplyRemoteEventToLocalCache(localStore, remoteEvent) {
11920
11936
  .next(() => {
11921
11937
  return localStoreImpl.targetCache.addMatchingKeys(txn, change.addedDocuments, targetId);
11922
11938
  }));
11923
- const resumeToken = change.resumeToken;
11924
- // Update the resume token if the change includes one.
11925
- if (resumeToken.approximateByteSize() > 0) {
11926
- const newTargetData = oldTargetData
11927
- .withResumeToken(resumeToken, remoteVersion)
11928
- .withSequenceNumber(txn.currentSequenceNumber);
11929
- newTargetDataByTargetMap = newTargetDataByTargetMap.insert(targetId, newTargetData);
11930
- // Update the target data if there are target changes (or if
11931
- // sufficient time has passed since the last update).
11932
- if (shouldPersistTargetData(oldTargetData, newTargetData, change)) {
11933
- promises.push(localStoreImpl.targetCache.updateTargetData(txn, newTargetData));
11934
- }
11939
+ let newTargetData = oldTargetData.withSequenceNumber(txn.currentSequenceNumber);
11940
+ if (remoteEvent.targetMismatches.has(targetId)) {
11941
+ newTargetData = newTargetData
11942
+ .withResumeToken(ByteString.EMPTY_BYTE_STRING, SnapshotVersion.min())
11943
+ .withLastLimboFreeSnapshotVersion(SnapshotVersion.min());
11944
+ }
11945
+ else if (change.resumeToken.approximateByteSize() > 0) {
11946
+ newTargetData = newTargetData.withResumeToken(change.resumeToken, remoteVersion);
11947
+ }
11948
+ newTargetDataByTargetMap = newTargetDataByTargetMap.insert(targetId, newTargetData);
11949
+ // Update the target data if there are target changes (or if
11950
+ // sufficient time has passed since the last update).
11951
+ if (shouldPersistTargetData(oldTargetData, newTargetData, change)) {
11952
+ promises.push(localStoreImpl.targetCache.updateTargetData(txn, newTargetData));
11935
11953
  }
11936
11954
  });
11937
11955
  let changedDocs = mutableDocumentMap();
@@ -12031,7 +12049,6 @@ documentVersions) {
12031
12049
  * too frequent.
12032
12050
  */
12033
12051
  function shouldPersistTargetData(oldTargetData, newTargetData, change) {
12034
- hardAssert(newTargetData.resumeToken.approximateByteSize() > 0);
12035
12052
  // Always persist target data if we don't already have a resume token.
12036
12053
  if (oldTargetData.resumeToken.approximateByteSize() === 0) {
12037
12054
  return true;
@@ -12868,7 +12885,7 @@ class MemoryRemoteDocumentCacheImpl {
12868
12885
  const previousSize = entry ? entry.size : 0;
12869
12886
  const currentSize = this.sizer(doc);
12870
12887
  this.docs = this.docs.insert(key, {
12871
- document: doc.clone(),
12888
+ document: doc.mutableCopy(),
12872
12889
  size: currentSize,
12873
12890
  readTime
12874
12891
  });
@@ -12891,7 +12908,7 @@ class MemoryRemoteDocumentCacheImpl {
12891
12908
  getEntry(transaction, documentKey) {
12892
12909
  const entry = this.docs.get(documentKey);
12893
12910
  return PersistencePromise.resolve(entry
12894
- ? entry.document.clone()
12911
+ ? entry.document.mutableCopy()
12895
12912
  : MutableDocument.newInvalidDocument(documentKey));
12896
12913
  }
12897
12914
  getEntries(transaction, documentKeys) {
@@ -12899,7 +12916,7 @@ class MemoryRemoteDocumentCacheImpl {
12899
12916
  documentKeys.forEach(documentKey => {
12900
12917
  const entry = this.docs.get(documentKey);
12901
12918
  results = results.insert(documentKey, entry
12902
- ? entry.document.clone()
12919
+ ? entry.document.mutableCopy()
12903
12920
  : MutableDocument.newInvalidDocument(documentKey));
12904
12921
  });
12905
12922
  return PersistencePromise.resolve(results);
@@ -12921,7 +12938,7 @@ class MemoryRemoteDocumentCacheImpl {
12921
12938
  if (!queryMatches(query, document)) {
12922
12939
  continue;
12923
12940
  }
12924
- results = results.insert(document.key, document.clone());
12941
+ results = results.insert(document.key, document.mutableCopy());
12925
12942
  }
12926
12943
  return PersistencePromise.resolve(results);
12927
12944
  }
@@ -14312,11 +14329,9 @@ function nodePromise(action) {
14312
14329
  * See the License for the specific language governing permissions and
14313
14330
  * limitations under the License.
14314
14331
  */
14315
- // This is a hack fix for Node ES modules to use `require`.
14316
- // @ts-ignore To avoid using `--module es2020` flag.
14317
- const require = module.createRequire(import.meta.url);
14318
- // eslint-disable-next-line @typescript-eslint/no-require-imports
14319
- const { version: grpcVersion } = require('@grpc/grpc-js/package.json');
14332
+ // TODO: Fetch runtime version from grpc-js/package.json instead
14333
+ // when there's a cleaner way to dynamic require JSON in both Node ESM and CJS
14334
+ const grpcVersion = '1.3.7';
14320
14335
  const LOG_TAG$9 = 'Connection';
14321
14336
  const X_GOOG_API_CLIENT_VALUE = `gl-node/${process.versions.node} fire/${SDK_VERSION} grpc/${grpcVersion}`;
14322
14337
  function createMetadata(databasePath, authToken, appCheckToken, appId) {
@@ -14483,8 +14498,8 @@ class GrpcConnection {
14483
14498
  */
14484
14499
  // __filename and __dirname globals are unavailable in ES modules
14485
14500
  // @ts-ignore To avoid using `--module es2020` flag.
14486
- const __filename = fileURLToPath(import.meta.url);
14487
- const __dirname = dirname(__filename);
14501
+ const __filenameInESM = fileURLToPath(import.meta.url);
14502
+ const __dirnameInESM = dirname(__filenameInESM);
14488
14503
  /** Used by tests so we can match @grpc/proto-loader behavior. */
14489
14504
  const protoLoaderOptions = {
14490
14505
  longs: String,
@@ -14498,7 +14513,7 @@ const protoLoaderOptions = {
14498
14513
  * @returns The GrpcObject representing our protos.
14499
14514
  */
14500
14515
  function loadProtos() {
14501
- const root = resolve(__dirname, "src/protos" );
14516
+ const root = resolve(__dirnameInESM, "src/protos" );
14502
14517
  const firestoreProtoFile = join(root, 'google/firestore/v1/firestore.proto');
14503
14518
  const packageDefinition = loadSync(firestoreProtoFile, Object.assign(Object.assign({}, protoLoaderOptions), { includeDirs: [root] }));
14504
14519
  return loadPackageDefinition(packageDefinition);
@@ -20911,7 +20926,7 @@ function registerFirestore(variant, useFetchStreams = true) {
20911
20926
  settings = Object.assign({ useFetchStreams }, settings);
20912
20927
  firestoreInstance._setSettings(settings);
20913
20928
  return firestoreInstance;
20914
- }, "PUBLIC" /* PUBLIC */));
20929
+ }, 'PUBLIC'));
20915
20930
  registerVersion(name, version$1, variant);
20916
20931
  // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation
20917
20932
  registerVersion(name, version$1, 'esm2017');