@firebase/firestore 3.4.4-canary.2dd99ae2d → 3.4.4-canary.434d87ee2
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/dist/firestore/src/api/snapshot.d.ts +1 -2
- package/dist/firestore/src/core/target.d.ts +8 -4
- package/dist/firestore/src/lite-api/query.d.ts +2 -2
- package/dist/firestore/src/local/index_manager.d.ts +52 -0
- package/dist/firestore/src/local/indexeddb_index_manager.d.ts +21 -2
- package/dist/firestore/src/local/indexeddb_persistence.d.ts +4 -4
- package/dist/firestore/src/local/indexeddb_remote_document_cache.d.ts +2 -8
- package/dist/firestore/src/local/indexeddb_schema.d.ts +149 -7
- package/dist/firestore/src/local/local_serializer.d.ts +7 -2
- package/dist/firestore/src/local/memory_index_manager.d.ts +11 -0
- package/dist/firestore/src/local/memory_persistence.d.ts +3 -2
- package/dist/firestore/src/local/memory_remote_document_cache.d.ts +1 -3
- package/dist/firestore/src/local/persistence.d.ts +2 -2
- package/dist/firestore/src/local/remote_document_cache.d.ts +3 -0
- package/dist/firestore/src/local/simple_db.d.ts +1 -0
- package/dist/firestore/src/model/field_index.d.ts +2 -2
- package/dist/firestore/test/unit/local/persistence_test_helpers.d.ts +1 -0
- package/dist/firestore/test/unit/local/test_index_manager.d.ts +11 -0
- package/dist/firestore/test/unit/local/test_remote_document_cache.d.ts +2 -0
- package/dist/firestore/test/unit/local/test_remote_document_change_buffer.d.ts +1 -1
- package/dist/firestore/test/util/helpers.d.ts +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.esm2017.js +3329 -3095
- package/dist/index.esm2017.js.map +1 -1
- package/dist/index.esm5.js +3590 -3370
- package/dist/index.esm5.js.map +1 -1
- package/dist/index.node.cjs.js +446 -150
- package/dist/index.node.cjs.js.map +1 -1
- package/dist/index.node.mjs +446 -150
- package/dist/index.node.mjs.map +1 -1
- package/dist/index.rn.js +3536 -3302
- package/dist/index.rn.js.map +1 -1
- package/dist/internal.d.ts +175 -6
- package/dist/lite/firestore/src/api/snapshot.d.ts +1 -2
- package/dist/lite/firestore/src/core/target.d.ts +8 -4
- package/dist/lite/firestore/src/lite-api/query.d.ts +2 -2
- package/dist/lite/firestore/src/local/index_manager.d.ts +52 -0
- package/dist/lite/firestore/src/local/indexeddb_index_manager.d.ts +21 -2
- package/dist/lite/firestore/src/local/indexeddb_persistence.d.ts +4 -4
- package/dist/lite/firestore/src/local/indexeddb_remote_document_cache.d.ts +2 -8
- package/dist/lite/firestore/src/local/indexeddb_schema.d.ts +149 -7
- package/dist/lite/firestore/src/local/local_serializer.d.ts +7 -2
- package/dist/lite/firestore/src/local/memory_index_manager.d.ts +11 -0
- package/dist/lite/firestore/src/local/memory_persistence.d.ts +3 -2
- package/dist/lite/firestore/src/local/memory_remote_document_cache.d.ts +1 -3
- package/dist/lite/firestore/src/local/persistence.d.ts +2 -2
- package/dist/lite/firestore/src/local/remote_document_cache.d.ts +3 -0
- package/dist/lite/firestore/src/local/simple_db.d.ts +1 -0
- package/dist/lite/firestore/src/model/field_index.d.ts +2 -2
- package/dist/lite/firestore/test/unit/local/persistence_test_helpers.d.ts +1 -0
- package/dist/lite/firestore/test/unit/local/test_index_manager.d.ts +11 -0
- package/dist/lite/firestore/test/unit/local/test_remote_document_cache.d.ts +2 -0
- package/dist/lite/firestore/test/unit/local/test_remote_document_change_buffer.d.ts +1 -1
- package/dist/lite/firestore/test/util/helpers.d.ts +1 -1
- package/dist/lite/index.browser.esm2017.js +1146 -1143
- package/dist/lite/index.browser.esm2017.js.map +1 -1
- package/dist/lite/index.browser.esm5.js +332 -331
- package/dist/lite/index.browser.esm5.js.map +1 -1
- package/dist/lite/index.node.cjs.js +36 -29
- package/dist/lite/index.node.cjs.js.map +1 -1
- package/dist/lite/index.node.mjs +36 -29
- package/dist/lite/index.node.mjs.map +1 -1
- package/dist/lite/index.rn.esm2017.js +301 -298
- package/dist/lite/index.rn.esm2017.js.map +1 -1
- package/dist/lite/internal.d.ts +2 -2
- package/dist/lite/packages/firestore/dist/lite/index.browser.esm2017.d.ts +121 -121
- package/dist/lite/packages/firestore/src/api/snapshot.d.ts +1 -2
- package/dist/lite/packages/firestore/src/core/target.d.ts +8 -4
- package/dist/lite/packages/firestore/src/lite-api/query.d.ts +2 -2
- package/dist/lite/packages/firestore/src/local/index_manager.d.ts +52 -0
- package/dist/lite/packages/firestore/src/local/indexeddb_index_manager.d.ts +21 -2
- package/dist/lite/packages/firestore/src/local/indexeddb_persistence.d.ts +4 -4
- package/dist/lite/packages/firestore/src/local/indexeddb_remote_document_cache.d.ts +2 -8
- package/dist/lite/packages/firestore/src/local/indexeddb_schema.d.ts +149 -7
- package/dist/lite/packages/firestore/src/local/local_serializer.d.ts +7 -2
- package/dist/lite/packages/firestore/src/local/memory_index_manager.d.ts +11 -0
- package/dist/lite/packages/firestore/src/local/memory_persistence.d.ts +3 -2
- package/dist/lite/packages/firestore/src/local/memory_remote_document_cache.d.ts +1 -3
- package/dist/lite/packages/firestore/src/local/persistence.d.ts +2 -2
- package/dist/lite/packages/firestore/src/local/remote_document_cache.d.ts +3 -0
- package/dist/lite/packages/firestore/src/local/simple_db.d.ts +1 -0
- package/dist/lite/packages/firestore/src/model/field_index.d.ts +2 -2
- package/dist/lite/packages/firestore/test/unit/local/persistence_test_helpers.d.ts +1 -0
- package/dist/lite/packages/firestore/test/unit/local/test_index_manager.d.ts +11 -0
- package/dist/lite/packages/firestore/test/unit/local/test_remote_document_cache.d.ts +2 -0
- package/dist/lite/packages/firestore/test/unit/local/test_remote_document_change_buffer.d.ts +1 -1
- package/dist/lite/packages/firestore/test/util/helpers.d.ts +1 -1
- package/dist/lite/private.d.ts +2 -2
- package/dist/packages/firestore/dist/index.esm2017.d.ts +176 -176
- package/dist/packages/firestore/src/api/snapshot.d.ts +1 -2
- package/dist/packages/firestore/src/core/target.d.ts +8 -4
- package/dist/packages/firestore/src/lite-api/query.d.ts +2 -2
- package/dist/packages/firestore/src/local/index_manager.d.ts +52 -0
- package/dist/packages/firestore/src/local/indexeddb_index_manager.d.ts +21 -2
- package/dist/packages/firestore/src/local/indexeddb_persistence.d.ts +4 -4
- package/dist/packages/firestore/src/local/indexeddb_remote_document_cache.d.ts +2 -8
- package/dist/packages/firestore/src/local/indexeddb_schema.d.ts +149 -7
- package/dist/packages/firestore/src/local/local_serializer.d.ts +7 -2
- package/dist/packages/firestore/src/local/memory_index_manager.d.ts +11 -0
- package/dist/packages/firestore/src/local/memory_persistence.d.ts +3 -2
- package/dist/packages/firestore/src/local/memory_remote_document_cache.d.ts +1 -3
- package/dist/packages/firestore/src/local/persistence.d.ts +2 -2
- package/dist/packages/firestore/src/local/remote_document_cache.d.ts +3 -0
- package/dist/packages/firestore/src/local/simple_db.d.ts +1 -0
- package/dist/packages/firestore/src/model/field_index.d.ts +2 -2
- package/dist/packages/firestore/test/unit/local/persistence_test_helpers.d.ts +1 -0
- package/dist/packages/firestore/test/unit/local/test_index_manager.d.ts +11 -0
- package/dist/packages/firestore/test/unit/local/test_remote_document_cache.d.ts +2 -0
- package/dist/packages/firestore/test/unit/local/test_remote_document_change_buffer.d.ts +1 -1
- package/dist/packages/firestore/test/util/helpers.d.ts +1 -1
- package/dist/private.d.ts +175 -6
- package/package.json +9 -9
|
@@ -63,7 +63,7 @@ l.MOCK_USER = new l("mock-user");
|
|
|
63
63
|
* See the License for the specific language governing permissions and
|
|
64
64
|
* limitations under the License.
|
|
65
65
|
*/
|
|
66
|
-
let f = "9.6.
|
|
66
|
+
let f = "9.6.6-canary.434d87ee2";
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
69
|
* @license
|
|
@@ -99,26 +99,26 @@ const d = new Logger("@firebase/firestore");
|
|
|
99
99
|
d.setLogLevel(t);
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
function m(t, ...
|
|
102
|
+
function m(t, ...e) {
|
|
103
103
|
if (d.logLevel <= LogLevel.DEBUG) {
|
|
104
|
-
const
|
|
105
|
-
d.debug(`Firestore (${f}): ${t}`, ...
|
|
104
|
+
const n = e.map(_);
|
|
105
|
+
d.debug(`Firestore (${f}): ${t}`, ...n);
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
function p(t, ...
|
|
109
|
+
function p(t, ...e) {
|
|
110
110
|
if (d.logLevel <= LogLevel.ERROR) {
|
|
111
|
-
const
|
|
112
|
-
d.error(`Firestore (${f}): ${t}`, ...
|
|
111
|
+
const n = e.map(_);
|
|
112
|
+
d.error(`Firestore (${f}): ${t}`, ...n);
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
/**
|
|
117
117
|
* @internal
|
|
118
|
-
*/ function y(t, ...
|
|
118
|
+
*/ function y(t, ...e) {
|
|
119
119
|
if (d.logLevel <= LogLevel.WARN) {
|
|
120
|
-
const
|
|
121
|
-
d.warn(`Firestore (${f}): ${t}`, ...
|
|
120
|
+
const n = e.map(_);
|
|
121
|
+
d.warn(`Firestore (${f}): ${t}`, ...n);
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
|
|
@@ -127,8 +127,8 @@ function p(t, ...n) {
|
|
|
127
127
|
*/ function _(t) {
|
|
128
128
|
if ("string" == typeof t) return t;
|
|
129
129
|
try {
|
|
130
|
-
return
|
|
131
|
-
} catch (
|
|
130
|
+
return e = t, JSON.stringify(e);
|
|
131
|
+
} catch (e) {
|
|
132
132
|
// Converting to JSON failed, just log the object directly
|
|
133
133
|
return t;
|
|
134
134
|
}
|
|
@@ -149,7 +149,7 @@ function p(t, ...n) {
|
|
|
149
149
|
* limitations under the License.
|
|
150
150
|
*/
|
|
151
151
|
/** Formats an object as a JSON string, suitable for logging. */
|
|
152
|
-
var
|
|
152
|
+
var e;
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
/**
|
|
@@ -178,11 +178,11 @@ function p(t, ...n) {
|
|
|
178
178
|
*/ function g(t = "Unexpected state") {
|
|
179
179
|
// Log the failure in addition to throw an exception, just in case the
|
|
180
180
|
// exception is swallowed.
|
|
181
|
-
const
|
|
181
|
+
const e = `FIRESTORE (${f}) INTERNAL ASSERTION FAILED: ` + t;
|
|
182
182
|
// NOTE: We don't use FirestoreError here because these are internal failures
|
|
183
183
|
// that cannot be handled by the user. (Also it would create a circular
|
|
184
184
|
// dependency between the error and assert modules which doesn't work.)
|
|
185
|
-
throw p(
|
|
185
|
+
throw p(e), new Error(e);
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
/**
|
|
@@ -190,7 +190,7 @@ function p(t, ...n) {
|
|
|
190
190
|
* given message if it did.
|
|
191
191
|
*
|
|
192
192
|
* Messages are stripped in production builds.
|
|
193
|
-
*/ function v(t,
|
|
193
|
+
*/ function v(t, e) {
|
|
194
194
|
t || g();
|
|
195
195
|
}
|
|
196
196
|
|
|
@@ -199,7 +199,7 @@ function p(t, ...n) {
|
|
|
199
199
|
* instance of `T` before casting.
|
|
200
200
|
*/ function b(t,
|
|
201
201
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
202
|
-
|
|
202
|
+
e) {
|
|
203
203
|
return t;
|
|
204
204
|
}
|
|
205
205
|
|
|
@@ -230,8 +230,8 @@ n) {
|
|
|
230
230
|
/**
|
|
231
231
|
* A custom error description.
|
|
232
232
|
*/
|
|
233
|
-
|
|
234
|
-
super(t,
|
|
233
|
+
e) {
|
|
234
|
+
super(t, e), this.code = t, this.message = e,
|
|
235
235
|
// HACK: We write a toString property directly because Error is not a real
|
|
236
236
|
// class and so inheritance does not work correctly. We could alternatively
|
|
237
237
|
// do the same "back-door inheritance" trick that FirebaseError does.
|
|
@@ -256,8 +256,8 @@ n) {
|
|
|
256
256
|
* limitations under the License.
|
|
257
257
|
*/ class k {
|
|
258
258
|
constructor() {
|
|
259
|
-
this.promise = new Promise(((t,
|
|
260
|
-
this.resolve = t, this.reject =
|
|
259
|
+
this.promise = new Promise(((t, e) => {
|
|
260
|
+
this.resolve = t, this.reject = e;
|
|
261
261
|
}));
|
|
262
262
|
}
|
|
263
263
|
}
|
|
@@ -278,8 +278,8 @@ n) {
|
|
|
278
278
|
* See the License for the specific language governing permissions and
|
|
279
279
|
* limitations under the License.
|
|
280
280
|
*/ class j {
|
|
281
|
-
constructor(t,
|
|
282
|
-
this.user =
|
|
281
|
+
constructor(t, e) {
|
|
282
|
+
this.user = e, this.type = "OAuth", this.headers = new Map, this.headers.set("Authorization", `Bearer ${t}`);
|
|
283
283
|
}
|
|
284
284
|
}
|
|
285
285
|
|
|
@@ -291,9 +291,9 @@ n) {
|
|
|
291
291
|
return Promise.resolve(null);
|
|
292
292
|
}
|
|
293
293
|
invalidateToken() {}
|
|
294
|
-
start(t,
|
|
294
|
+
start(t, e) {
|
|
295
295
|
// Fire with initial user.
|
|
296
|
-
t.enqueueRetryable((() =>
|
|
296
|
+
t.enqueueRetryable((() => e(l.UNAUTHENTICATED)));
|
|
297
297
|
}
|
|
298
298
|
shutdown() {}
|
|
299
299
|
}
|
|
@@ -315,10 +315,10 @@ n) {
|
|
|
315
315
|
return Promise.resolve(this.token);
|
|
316
316
|
}
|
|
317
317
|
invalidateToken() {}
|
|
318
|
-
start(t,
|
|
319
|
-
this.changeListener =
|
|
318
|
+
start(t, e) {
|
|
319
|
+
this.changeListener = e,
|
|
320
320
|
// Fire with initial user.
|
|
321
|
-
t.enqueueRetryable((() =>
|
|
321
|
+
t.enqueueRetryable((() => e(this.token.user)));
|
|
322
322
|
}
|
|
323
323
|
shutdown() {
|
|
324
324
|
this.changeListener = null;
|
|
@@ -336,7 +336,7 @@ n) {
|
|
|
336
336
|
new j(t.accessToken, new l(this.auth.getUid()))) : null)) : Promise.resolve(null);
|
|
337
337
|
}
|
|
338
338
|
invalidateToken() {}
|
|
339
|
-
start(t,
|
|
339
|
+
start(t, e) {}
|
|
340
340
|
shutdown() {}
|
|
341
341
|
}
|
|
342
342
|
|
|
@@ -347,10 +347,10 @@ n) {
|
|
|
347
347
|
* recover from unauthenticated errors (see b/33147818 for context), but it's
|
|
348
348
|
* safer to keep the implementation as-is.
|
|
349
349
|
*/ class G {
|
|
350
|
-
constructor(t,
|
|
351
|
-
this.type = "FirstParty", this.user = l.FIRST_PARTY, this.headers = new Map, this.headers.set("X-Goog-AuthUser",
|
|
350
|
+
constructor(t, e, n) {
|
|
351
|
+
this.type = "FirstParty", this.user = l.FIRST_PARTY, this.headers = new Map, this.headers.set("X-Goog-AuthUser", e);
|
|
352
352
|
const r = t.auth.getAuthHeaderValueForFirstParty([]);
|
|
353
|
-
r && this.headers.set("Authorization", r),
|
|
353
|
+
r && this.headers.set("Authorization", r), n && this.headers.set("X-Goog-Iam-Authorization-Token", n);
|
|
354
354
|
}
|
|
355
355
|
}
|
|
356
356
|
|
|
@@ -359,15 +359,15 @@ n) {
|
|
|
359
359
|
* to authenticate the user, using technique that is only available
|
|
360
360
|
* to applications hosted by Google.
|
|
361
361
|
*/ class Q {
|
|
362
|
-
constructor(t,
|
|
363
|
-
this.t = t, this.i =
|
|
362
|
+
constructor(t, e, n) {
|
|
363
|
+
this.t = t, this.i = e, this.o = n;
|
|
364
364
|
}
|
|
365
365
|
getToken() {
|
|
366
366
|
return Promise.resolve(new G(this.t, this.i, this.o));
|
|
367
367
|
}
|
|
368
|
-
start(t,
|
|
368
|
+
start(t, e) {
|
|
369
369
|
// Fire with initial uid.
|
|
370
|
-
t.enqueueRetryable((() =>
|
|
370
|
+
t.enqueueRetryable((() => e(l.FIRST_PARTY)));
|
|
371
371
|
}
|
|
372
372
|
shutdown() {}
|
|
373
373
|
invalidateToken() {}
|
|
@@ -390,7 +390,7 @@ class W {
|
|
|
390
390
|
new W(t.token)) : null)) : Promise.resolve(null);
|
|
391
391
|
}
|
|
392
392
|
invalidateToken() {}
|
|
393
|
-
start(t,
|
|
393
|
+
start(t, e) {}
|
|
394
394
|
shutdown() {}
|
|
395
395
|
}
|
|
396
396
|
|
|
@@ -432,8 +432,8 @@ class H {
|
|
|
432
432
|
* @param useFetchStreams Whether to use the Fetch API instead of
|
|
433
433
|
* XMLHTTPRequest
|
|
434
434
|
*/
|
|
435
|
-
constructor(t,
|
|
436
|
-
this.databaseId = t, this.appId =
|
|
435
|
+
constructor(t, e, n, r, s, i, o, u) {
|
|
436
|
+
this.databaseId = t, this.appId = e, this.persistenceKey = n, this.host = r, this.ssl = s,
|
|
437
437
|
this.forceLongPolling = i, this.autoDetectLongPolling = o, this.useFetchStreams = u;
|
|
438
438
|
}
|
|
439
439
|
}
|
|
@@ -444,8 +444,8 @@ class H {
|
|
|
444
444
|
* @internal
|
|
445
445
|
*/
|
|
446
446
|
class K {
|
|
447
|
-
constructor(t,
|
|
448
|
-
this.projectId = t, this.database =
|
|
447
|
+
constructor(t, e) {
|
|
448
|
+
this.projectId = t, this.database = e || "(default)";
|
|
449
449
|
}
|
|
450
450
|
static empty() {
|
|
451
451
|
return new K("", "");
|
|
@@ -478,9 +478,9 @@ class K {
|
|
|
478
478
|
* Path represents an ordered sequence of string segments.
|
|
479
479
|
*/
|
|
480
480
|
class J {
|
|
481
|
-
constructor(t,
|
|
482
|
-
void 0 ===
|
|
483
|
-
this.segments = t, this.offset =
|
|
481
|
+
constructor(t, e, n) {
|
|
482
|
+
void 0 === e ? e = 0 : e > t.length && g(), void 0 === n ? n = t.length - e : n > t.length - e && g(),
|
|
483
|
+
this.segments = t, this.offset = e, this.len = n;
|
|
484
484
|
}
|
|
485
485
|
get length() {
|
|
486
486
|
return this.len;
|
|
@@ -489,10 +489,10 @@ class J {
|
|
|
489
489
|
return 0 === J.comparator(this, t);
|
|
490
490
|
}
|
|
491
491
|
child(t) {
|
|
492
|
-
const
|
|
492
|
+
const e = this.segments.slice(this.offset, this.limit());
|
|
493
493
|
return t instanceof J ? t.forEach((t => {
|
|
494
|
-
|
|
495
|
-
})) :
|
|
494
|
+
e.push(t);
|
|
495
|
+
})) : e.push(t), this.construct(e);
|
|
496
496
|
}
|
|
497
497
|
/** The index of one past the last segment of the path. */ limit() {
|
|
498
498
|
return this.offset + this.length;
|
|
@@ -517,28 +517,28 @@ class J {
|
|
|
517
517
|
}
|
|
518
518
|
isPrefixOf(t) {
|
|
519
519
|
if (t.length < this.length) return !1;
|
|
520
|
-
for (let
|
|
520
|
+
for (let e = 0; e < this.length; e++) if (this.get(e) !== t.get(e)) return !1;
|
|
521
521
|
return !0;
|
|
522
522
|
}
|
|
523
523
|
isImmediateParentOf(t) {
|
|
524
524
|
if (this.length + 1 !== t.length) return !1;
|
|
525
|
-
for (let
|
|
525
|
+
for (let e = 0; e < this.length; e++) if (this.get(e) !== t.get(e)) return !1;
|
|
526
526
|
return !0;
|
|
527
527
|
}
|
|
528
528
|
forEach(t) {
|
|
529
|
-
for (let
|
|
529
|
+
for (let e = this.offset, n = this.limit(); e < n; e++) t(this.segments[e]);
|
|
530
530
|
}
|
|
531
531
|
toArray() {
|
|
532
532
|
return this.segments.slice(this.offset, this.limit());
|
|
533
533
|
}
|
|
534
|
-
static comparator(t,
|
|
535
|
-
const
|
|
536
|
-
for (let r = 0; r <
|
|
537
|
-
const
|
|
538
|
-
if (
|
|
539
|
-
if (
|
|
534
|
+
static comparator(t, e) {
|
|
535
|
+
const n = Math.min(t.length, e.length);
|
|
536
|
+
for (let r = 0; r < n; r++) {
|
|
537
|
+
const n = t.get(r), s = e.get(r);
|
|
538
|
+
if (n < s) return -1;
|
|
539
|
+
if (n > s) return 1;
|
|
540
540
|
}
|
|
541
|
-
return t.length <
|
|
541
|
+
return t.length < e.length ? -1 : t.length > e.length ? 1 : 0;
|
|
542
542
|
}
|
|
543
543
|
}
|
|
544
544
|
|
|
@@ -548,8 +548,8 @@ class J {
|
|
|
548
548
|
*
|
|
549
549
|
* @internal
|
|
550
550
|
*/ class X extends J {
|
|
551
|
-
construct(t,
|
|
552
|
-
return new X(t,
|
|
551
|
+
construct(t, e, n) {
|
|
552
|
+
return new X(t, e, n);
|
|
553
553
|
}
|
|
554
554
|
canonicalString() {
|
|
555
555
|
// NOTE: The client is ignorant of any path segments containing escape
|
|
@@ -568,13 +568,13 @@ class J {
|
|
|
568
568
|
// NOTE: The client is ignorant of any path segments containing escape
|
|
569
569
|
// sequences (e.g. __id123__) and just passes them through raw (they exist
|
|
570
570
|
// for legacy reasons and should not be used frequently).
|
|
571
|
-
const
|
|
572
|
-
for (const
|
|
573
|
-
if (
|
|
571
|
+
const e = [];
|
|
572
|
+
for (const n of t) {
|
|
573
|
+
if (n.indexOf("//") >= 0) throw new U(A, `Invalid segment (${n}). Paths must not contain // in them.`);
|
|
574
574
|
// Strip leading and traling slashed.
|
|
575
|
-
|
|
575
|
+
e.push(...n.split("/").filter((t => t.length > 0)));
|
|
576
576
|
}
|
|
577
|
-
return new X(
|
|
577
|
+
return new X(e);
|
|
578
578
|
}
|
|
579
579
|
static emptyPath() {
|
|
580
580
|
return new X([]);
|
|
@@ -587,8 +587,8 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
587
587
|
* A dot-separated path for navigating sub-objects within a document.
|
|
588
588
|
* @internal
|
|
589
589
|
*/ class tt extends J {
|
|
590
|
-
construct(t,
|
|
591
|
-
return new tt(t,
|
|
590
|
+
construct(t, e, n) {
|
|
591
|
+
return new tt(t, e, n);
|
|
592
592
|
}
|
|
593
593
|
/**
|
|
594
594
|
* Returns true if the string could be used as a segment in a field path
|
|
@@ -623,24 +623,24 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
623
623
|
* TODO(b/37244157): we should make this more strict. Right now, it allows
|
|
624
624
|
* non-identifier path components, even if they aren't escaped.
|
|
625
625
|
*/ static fromServerFormat(t) {
|
|
626
|
-
const
|
|
627
|
-
let
|
|
626
|
+
const e = [];
|
|
627
|
+
let n = "", r = 0;
|
|
628
628
|
const s = () => {
|
|
629
|
-
if (0 ===
|
|
630
|
-
|
|
629
|
+
if (0 === n.length) throw new U(A, `Invalid field path (${t}). Paths must not be empty, begin with '.', end with '.', or contain '..'`);
|
|
630
|
+
e.push(n), n = "";
|
|
631
631
|
};
|
|
632
632
|
let i = !1;
|
|
633
633
|
for (;r < t.length; ) {
|
|
634
|
-
const
|
|
635
|
-
if ("\\" ===
|
|
634
|
+
const e = t[r];
|
|
635
|
+
if ("\\" === e) {
|
|
636
636
|
if (r + 1 === t.length) throw new U(A, "Path has trailing escape character: " + t);
|
|
637
|
-
const
|
|
638
|
-
if ("\\" !==
|
|
639
|
-
|
|
640
|
-
} else "`" ===
|
|
637
|
+
const e = t[r + 1];
|
|
638
|
+
if ("\\" !== e && "." !== e && "`" !== e) throw new U(A, "Path has invalid escape sequence: " + t);
|
|
639
|
+
n += e, r += 2;
|
|
640
|
+
} else "`" === e ? (i = !i, r++) : "." !== e || i ? (n += e, r++) : (s(), r++);
|
|
641
641
|
}
|
|
642
642
|
if (s(), i) throw new U(A, "Unterminated ` in path: " + t);
|
|
643
|
-
return new tt(
|
|
643
|
+
return new tt(e);
|
|
644
644
|
}
|
|
645
645
|
static emptyPath() {
|
|
646
646
|
return new tt([]);
|
|
@@ -665,18 +665,18 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
665
665
|
*/
|
|
666
666
|
/**
|
|
667
667
|
* @internal
|
|
668
|
-
*/ class
|
|
668
|
+
*/ class et {
|
|
669
669
|
constructor(t) {
|
|
670
670
|
this.path = t;
|
|
671
671
|
}
|
|
672
672
|
static fromPath(t) {
|
|
673
|
-
return new
|
|
673
|
+
return new et(X.fromString(t));
|
|
674
674
|
}
|
|
675
675
|
static fromName(t) {
|
|
676
|
-
return new
|
|
676
|
+
return new et(X.fromString(t).popFirst(5));
|
|
677
677
|
}
|
|
678
678
|
static empty() {
|
|
679
|
-
return new
|
|
679
|
+
return new et(X.emptyPath());
|
|
680
680
|
}
|
|
681
681
|
/** Returns true if the document is in the specified collectionId. */ hasCollectionId(t) {
|
|
682
682
|
return this.path.length >= 2 && this.path.get(this.path.length - 2) === t;
|
|
@@ -687,8 +687,8 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
687
687
|
toString() {
|
|
688
688
|
return this.path.toString();
|
|
689
689
|
}
|
|
690
|
-
static comparator(t,
|
|
691
|
-
return X.comparator(t.path,
|
|
690
|
+
static comparator(t, e) {
|
|
691
|
+
return X.comparator(t.path, e.path);
|
|
692
692
|
}
|
|
693
693
|
static isDocumentKey(t) {
|
|
694
694
|
return t.length % 2 == 0;
|
|
@@ -699,7 +699,7 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
699
699
|
* @param segments - The segments of the path to the document
|
|
700
700
|
* @returns A new instance of DocumentKey
|
|
701
701
|
*/ static fromSegments(t) {
|
|
702
|
-
return new
|
|
702
|
+
return new et(new X(t.slice()));
|
|
703
703
|
}
|
|
704
704
|
}
|
|
705
705
|
|
|
@@ -718,8 +718,8 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
718
718
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
719
719
|
* See the License for the specific language governing permissions and
|
|
720
720
|
* limitations under the License.
|
|
721
|
-
*/ function
|
|
722
|
-
if (!
|
|
721
|
+
*/ function nt(t, e, n) {
|
|
722
|
+
if (!n) throw new U(A, `Function ${t}() cannot be called with an empty ${e}.`);
|
|
723
723
|
}
|
|
724
724
|
|
|
725
725
|
/**
|
|
@@ -731,14 +731,14 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
731
731
|
* an even numbers of segments).
|
|
732
732
|
*/
|
|
733
733
|
function rt(t) {
|
|
734
|
-
if (!
|
|
734
|
+
if (!et.isDocumentKey(t)) throw new U(A, `Invalid document reference. Document references must have an even number of segments, but ${t} has ${t.length}.`);
|
|
735
735
|
}
|
|
736
736
|
|
|
737
737
|
/**
|
|
738
738
|
* Validates that `path` refers to a collection (indicated by the fact it
|
|
739
739
|
* contains an odd numbers of segments).
|
|
740
740
|
*/ function st(t) {
|
|
741
|
-
if (
|
|
741
|
+
if (et.isDocumentKey(t)) throw new U(A, `Invalid collection reference. Collection references must have an odd number of segments, but ${t} has ${t.length}.`);
|
|
742
742
|
}
|
|
743
743
|
|
|
744
744
|
/**
|
|
@@ -755,7 +755,7 @@ function it(t) {
|
|
|
755
755
|
if ("object" == typeof t) {
|
|
756
756
|
if (t instanceof Array) return "an array";
|
|
757
757
|
{
|
|
758
|
-
const
|
|
758
|
+
const e =
|
|
759
759
|
/** try to get the constructor name for an object. */
|
|
760
760
|
function(t) {
|
|
761
761
|
if (t.constructor) return t.constructor.name;
|
|
@@ -769,7 +769,7 @@ function it(t) {
|
|
|
769
769
|
* arguments passed to the public API.
|
|
770
770
|
* @internal
|
|
771
771
|
*/ (t);
|
|
772
|
-
return
|
|
772
|
+
return e ? `a custom ${e} object` : "an object";
|
|
773
773
|
}
|
|
774
774
|
}
|
|
775
775
|
return "function" == typeof t ? "a function" : g();
|
|
@@ -777,22 +777,22 @@ function it(t) {
|
|
|
777
777
|
|
|
778
778
|
function ot(t,
|
|
779
779
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
780
|
-
|
|
780
|
+
e) {
|
|
781
781
|
if ("_delegate" in t && (
|
|
782
782
|
// Unwrap Compat types
|
|
783
783
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
784
|
-
t = t._delegate), !(t instanceof
|
|
785
|
-
if (
|
|
784
|
+
t = t._delegate), !(t instanceof e)) {
|
|
785
|
+
if (e.name === t.constructor.name) throw new U(A, "Type does not match the expected instance. Did you pass a reference from a different Firestore SDK?");
|
|
786
786
|
{
|
|
787
|
-
const
|
|
788
|
-
throw new U(A, `Expected type '${
|
|
787
|
+
const n = it(t);
|
|
788
|
+
throw new U(A, `Expected type '${e.name}', but it was: ${n}`);
|
|
789
789
|
}
|
|
790
790
|
}
|
|
791
791
|
return t;
|
|
792
792
|
}
|
|
793
793
|
|
|
794
|
-
function ut(t,
|
|
795
|
-
if (
|
|
794
|
+
function ut(t, e) {
|
|
795
|
+
if (e <= 0) throw new U(A, `Function ${t}() requires a positive number, but it was: ${e}.`);
|
|
796
796
|
}
|
|
797
797
|
|
|
798
798
|
/**
|
|
@@ -999,58 +999,58 @@ class wt extends
|
|
|
999
999
|
class {
|
|
1000
1000
|
constructor(t) {
|
|
1001
1001
|
this.databaseInfo = t, this.databaseId = t.databaseId;
|
|
1002
|
-
const
|
|
1003
|
-
this.h =
|
|
1002
|
+
const e = t.ssl ? "https" : "http";
|
|
1003
|
+
this.h = e + "://" + t.host, this.l = "projects/" + this.databaseId.projectId + "/databases/" + this.databaseId.database + "/documents";
|
|
1004
1004
|
}
|
|
1005
|
-
m(t,
|
|
1006
|
-
const i = this.p(t,
|
|
1007
|
-
m("RestConnection", "Sending: ", i,
|
|
1005
|
+
m(t, e, n, r, s) {
|
|
1006
|
+
const i = this.p(t, e);
|
|
1007
|
+
m("RestConnection", "Sending: ", i, n);
|
|
1008
1008
|
const o = {};
|
|
1009
|
-
return this.g(o, r, s), this.v(t, i, o,
|
|
1010
|
-
t)), (
|
|
1011
|
-
throw y("RestConnection", `${t} failed with error: `,
|
|
1012
|
-
|
|
1009
|
+
return this.g(o, r, s), this.v(t, i, o, n).then((t => (m("RestConnection", "Received: ", t),
|
|
1010
|
+
t)), (e => {
|
|
1011
|
+
throw y("RestConnection", `${t} failed with error: `, e, "url: ", i, "request:", n),
|
|
1012
|
+
e;
|
|
1013
1013
|
}));
|
|
1014
1014
|
}
|
|
1015
|
-
T(t,
|
|
1015
|
+
T(t, e, n, r, s) {
|
|
1016
1016
|
// The REST API automatically aggregates all of the streamed results, so we
|
|
1017
1017
|
// can just use the normal invoke() method.
|
|
1018
|
-
return this.m(t,
|
|
1018
|
+
return this.m(t, e, n, r, s);
|
|
1019
1019
|
}
|
|
1020
1020
|
/**
|
|
1021
1021
|
* Modifies the headers for a request, adding any authorization token if
|
|
1022
1022
|
* present and any additional headers for the request.
|
|
1023
|
-
*/ g(t,
|
|
1023
|
+
*/ g(t, e, n) {
|
|
1024
1024
|
t["X-Goog-Api-Client"] = "gl-js/ fire/" + f,
|
|
1025
1025
|
// Content-Type: text/plain will avoid preflight requests which might
|
|
1026
1026
|
// mess with CORS and redirects by proxies. If we add custom headers
|
|
1027
1027
|
// we will need to change this code to potentially use the $httpOverwrite
|
|
1028
1028
|
// parameter supported by ESF to avoid triggering preflight requests.
|
|
1029
1029
|
t["Content-Type"] = "text/plain", this.databaseInfo.appId && (t["X-Firebase-GMPID"] = this.databaseInfo.appId),
|
|
1030
|
-
|
|
1030
|
+
e && e.headers.forEach(((e, n) => t[n] = e)), n && n.headers.forEach(((e, n) => t[n] = e));
|
|
1031
1031
|
}
|
|
1032
|
-
p(t,
|
|
1033
|
-
const
|
|
1034
|
-
return `${this.h}/v1/${
|
|
1032
|
+
p(t, e) {
|
|
1033
|
+
const n = ht[t];
|
|
1034
|
+
return `${this.h}/v1/${e}:${n}`;
|
|
1035
1035
|
}
|
|
1036
1036
|
} {
|
|
1037
1037
|
/**
|
|
1038
1038
|
* @param databaseInfo - The connection info.
|
|
1039
1039
|
* @param fetchImpl - `fetch` or a Polyfill that implements the fetch API.
|
|
1040
1040
|
*/
|
|
1041
|
-
constructor(t,
|
|
1042
|
-
super(t), this.I =
|
|
1041
|
+
constructor(t, e) {
|
|
1042
|
+
super(t), this.I = e;
|
|
1043
1043
|
}
|
|
1044
|
-
A(t,
|
|
1044
|
+
A(t, e) {
|
|
1045
1045
|
throw new Error("Not supported by FetchConnection");
|
|
1046
1046
|
}
|
|
1047
|
-
async v(t,
|
|
1047
|
+
async v(t, e, n, r) {
|
|
1048
1048
|
const s = JSON.stringify(r);
|
|
1049
1049
|
let i;
|
|
1050
1050
|
try {
|
|
1051
|
-
i = await this.I(
|
|
1051
|
+
i = await this.I(e, {
|
|
1052
1052
|
method: "POST",
|
|
1053
|
-
headers:
|
|
1053
|
+
headers: n,
|
|
1054
1054
|
body: s
|
|
1055
1055
|
});
|
|
1056
1056
|
} catch (t) {
|
|
@@ -1101,13 +1101,13 @@ class {
|
|
|
1101
1101
|
*/
|
|
1102
1102
|
function mt(t) {
|
|
1103
1103
|
// Polyfills for IE and WebWorker by using `self` and `msCrypto` when `crypto` is not available.
|
|
1104
|
-
const
|
|
1104
|
+
const e =
|
|
1105
1105
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1106
|
-
"undefined" != typeof self && (self.crypto || self.msCrypto),
|
|
1107
|
-
if (
|
|
1106
|
+
"undefined" != typeof self && (self.crypto || self.msCrypto), n = new Uint8Array(t);
|
|
1107
|
+
if (e && "function" == typeof e.getRandomValues) e.getRandomValues(n); else
|
|
1108
1108
|
// Falls back to Math.random
|
|
1109
|
-
for (let
|
|
1110
|
-
return
|
|
1109
|
+
for (let e = 0; e < t; e++) n[e] = Math.floor(256 * Math.random());
|
|
1110
|
+
return n;
|
|
1111
1111
|
}
|
|
1112
1112
|
|
|
1113
1113
|
/**
|
|
@@ -1128,26 +1128,26 @@ function mt(t) {
|
|
|
1128
1128
|
*/ class pt {
|
|
1129
1129
|
static R() {
|
|
1130
1130
|
// Alphanumeric characters
|
|
1131
|
-
const t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
|
|
1131
|
+
const t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", e = Math.floor(256 / t.length) * t.length;
|
|
1132
1132
|
// The largest byte value that is a multiple of `char.length`.
|
|
1133
|
-
let
|
|
1134
|
-
for (;
|
|
1133
|
+
let n = "";
|
|
1134
|
+
for (;n.length < 20; ) {
|
|
1135
1135
|
const r = mt(40);
|
|
1136
1136
|
for (let s = 0; s < r.length; ++s)
|
|
1137
1137
|
// Only accept values that are [0, maxMultiple), this ensures they can
|
|
1138
1138
|
// be evenly mapped to indices of `chars` via a modulo operation.
|
|
1139
|
-
|
|
1139
|
+
n.length < 20 && r[s] < e && (n += t.charAt(r[s] % t.length));
|
|
1140
1140
|
}
|
|
1141
|
-
return
|
|
1141
|
+
return n;
|
|
1142
1142
|
}
|
|
1143
1143
|
}
|
|
1144
1144
|
|
|
1145
|
-
function yt(t,
|
|
1146
|
-
return t <
|
|
1145
|
+
function yt(t, e) {
|
|
1146
|
+
return t < e ? -1 : t > e ? 1 : 0;
|
|
1147
1147
|
}
|
|
1148
1148
|
|
|
1149
|
-
/** Helper to compare arrays using isEqual(). */ function _t(t,
|
|
1150
|
-
return t.length ===
|
|
1149
|
+
/** Helper to compare arrays using isEqual(). */ function _t(t, e, n) {
|
|
1150
|
+
return t.length === e.length && t.every(((t, r) => n(t, e[r])));
|
|
1151
1151
|
}
|
|
1152
1152
|
|
|
1153
1153
|
/**
|
|
@@ -1201,9 +1201,9 @@ class gt {
|
|
|
1201
1201
|
/**
|
|
1202
1202
|
* The fractions of a second at nanosecond resolution.*
|
|
1203
1203
|
*/
|
|
1204
|
-
|
|
1205
|
-
if (this.seconds = t, this.nanoseconds =
|
|
1206
|
-
if (
|
|
1204
|
+
e) {
|
|
1205
|
+
if (this.seconds = t, this.nanoseconds = e, e < 0) throw new U(A, "Timestamp nanoseconds out of range: " + e);
|
|
1206
|
+
if (e >= 1e9) throw new U(A, "Timestamp nanoseconds out of range: " + e);
|
|
1207
1207
|
if (t < -62135596800) throw new U(A, "Timestamp seconds out of range: " + t);
|
|
1208
1208
|
// This will break in the year 10,000.
|
|
1209
1209
|
if (t >= 253402300800) throw new U(A, "Timestamp seconds out of range: " + t);
|
|
@@ -1232,8 +1232,8 @@ class gt {
|
|
|
1232
1232
|
* @returns A new `Timestamp` representing the same point in time as the given
|
|
1233
1233
|
* number of milliseconds.
|
|
1234
1234
|
*/ static fromMillis(t) {
|
|
1235
|
-
const
|
|
1236
|
-
return new gt(
|
|
1235
|
+
const e = Math.floor(t / 1e3), n = Math.floor(1e6 * (t - 1e3 * e));
|
|
1236
|
+
return new gt(e, n);
|
|
1237
1237
|
}
|
|
1238
1238
|
/**
|
|
1239
1239
|
* Converts a `Timestamp` to a JavaScript `Date` object. This conversion
|
|
@@ -1355,13 +1355,13 @@ class gt {
|
|
|
1355
1355
|
* See the License for the specific language governing permissions and
|
|
1356
1356
|
* limitations under the License.
|
|
1357
1357
|
*/ function bt(t) {
|
|
1358
|
-
let
|
|
1359
|
-
for (const
|
|
1360
|
-
return
|
|
1358
|
+
let e = 0;
|
|
1359
|
+
for (const n in t) Object.prototype.hasOwnProperty.call(t, n) && e++;
|
|
1360
|
+
return e;
|
|
1361
1361
|
}
|
|
1362
1362
|
|
|
1363
|
-
function Et(t,
|
|
1364
|
-
for (const
|
|
1363
|
+
function Et(t, e) {
|
|
1364
|
+
for (const n in t) Object.prototype.hasOwnProperty.call(t, n) && e(n, t[n]);
|
|
1365
1365
|
}
|
|
1366
1366
|
|
|
1367
1367
|
/**
|
|
@@ -1403,11 +1403,11 @@ class Tt {
|
|
|
1403
1403
|
*
|
|
1404
1404
|
* This is an O(n) operation, where `n` is the size of the field mask.
|
|
1405
1405
|
*/ covers(t) {
|
|
1406
|
-
for (const
|
|
1406
|
+
for (const e of this.fields) if (e.isPrefixOf(t)) return !0;
|
|
1407
1407
|
return !1;
|
|
1408
1408
|
}
|
|
1409
1409
|
isEqual(t) {
|
|
1410
|
-
return _t(this.fields, t.fields, ((t,
|
|
1410
|
+
return _t(this.fields, t.fields, ((t, e) => t.isEqual(e)));
|
|
1411
1411
|
}
|
|
1412
1412
|
}
|
|
1413
1413
|
|
|
@@ -1458,23 +1458,23 @@ class It {
|
|
|
1458
1458
|
this.binaryString = t;
|
|
1459
1459
|
}
|
|
1460
1460
|
static fromBase64String(t) {
|
|
1461
|
-
const
|
|
1462
|
-
return new It(
|
|
1461
|
+
const e = atob(t);
|
|
1462
|
+
return new It(e);
|
|
1463
1463
|
}
|
|
1464
1464
|
static fromUint8Array(t) {
|
|
1465
|
-
const
|
|
1465
|
+
const e =
|
|
1466
1466
|
/**
|
|
1467
1467
|
* Helper function to convert an Uint8array to a binary string.
|
|
1468
1468
|
*/
|
|
1469
1469
|
function(t) {
|
|
1470
|
-
let
|
|
1471
|
-
for (let
|
|
1472
|
-
return
|
|
1470
|
+
let e = "";
|
|
1471
|
+
for (let n = 0; n < t.length; ++n) e += String.fromCharCode(t[n]);
|
|
1472
|
+
return e;
|
|
1473
1473
|
}
|
|
1474
1474
|
/**
|
|
1475
1475
|
* Helper function to convert a binary string to an Uint8Array.
|
|
1476
1476
|
*/ (t);
|
|
1477
|
-
return new It(
|
|
1477
|
+
return new It(e);
|
|
1478
1478
|
}
|
|
1479
1479
|
[Symbol.iterator]() {
|
|
1480
1480
|
let t = 0;
|
|
@@ -1495,9 +1495,9 @@ class It {
|
|
|
1495
1495
|
}
|
|
1496
1496
|
toUint8Array() {
|
|
1497
1497
|
return function(t) {
|
|
1498
|
-
const
|
|
1499
|
-
for (let
|
|
1500
|
-
return
|
|
1498
|
+
const e = new Uint8Array(t.length);
|
|
1499
|
+
for (let n = 0; n < t.length; n++) e[n] = t.charCodeAt(n);
|
|
1500
|
+
return e;
|
|
1501
1501
|
}
|
|
1502
1502
|
/**
|
|
1503
1503
|
* @license
|
|
@@ -1544,18 +1544,18 @@ const At = new RegExp(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.(\d+))?Z$/);
|
|
|
1544
1544
|
// The date string can have higher precision (nanos) than the Date class
|
|
1545
1545
|
// (millis), so we do some custom parsing here.
|
|
1546
1546
|
// Parse the nanos right out of the string.
|
|
1547
|
-
let
|
|
1548
|
-
const
|
|
1549
|
-
if (v(!!
|
|
1547
|
+
let e = 0;
|
|
1548
|
+
const n = At.exec(t);
|
|
1549
|
+
if (v(!!n), n[1]) {
|
|
1550
1550
|
// Pad the fraction out to 9 digits (nanos).
|
|
1551
|
-
let t =
|
|
1552
|
-
t = (t + "000000000").substr(0, 9),
|
|
1551
|
+
let t = n[1];
|
|
1552
|
+
t = (t + "000000000").substr(0, 9), e = Number(t);
|
|
1553
1553
|
}
|
|
1554
1554
|
// Parse the date to get the seconds.
|
|
1555
1555
|
const r = new Date(t);
|
|
1556
1556
|
return {
|
|
1557
1557
|
seconds: Math.floor(r.getTime() / 1e3),
|
|
1558
|
-
nanos:
|
|
1558
|
+
nanos: e
|
|
1559
1559
|
};
|
|
1560
1560
|
}
|
|
1561
1561
|
return {
|
|
@@ -1610,8 +1610,8 @@ const At = new RegExp(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.(\d+))?Z$/);
|
|
|
1610
1610
|
* - With respect to other ServerTimestampValues, they sort by their
|
|
1611
1611
|
* localWriteTime.
|
|
1612
1612
|
*/ function Dt(t) {
|
|
1613
|
-
var
|
|
1614
|
-
return "server_timestamp" === (null === (
|
|
1613
|
+
var e, n;
|
|
1614
|
+
return "server_timestamp" === (null === (n = ((null === (e = null == t ? void 0 : t.mapValue) || void 0 === e ? void 0 : e.fields) || {}).__type__) || void 0 === n ? void 0 : n.stringValue);
|
|
1615
1615
|
}
|
|
1616
1616
|
|
|
1617
1617
|
/**
|
|
@@ -1620,15 +1620,15 @@ const At = new RegExp(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.(\d+))?Z$/);
|
|
|
1620
1620
|
* Preserving the previous values allows the user to display the last resoled
|
|
1621
1621
|
* value until the backend responds with the timestamp.
|
|
1622
1622
|
*/ function Nt(t) {
|
|
1623
|
-
const
|
|
1624
|
-
return Dt(
|
|
1623
|
+
const e = t.mapValue.fields.__previous_value__;
|
|
1624
|
+
return Dt(e) ? Nt(e) : e;
|
|
1625
1625
|
}
|
|
1626
1626
|
|
|
1627
1627
|
/**
|
|
1628
1628
|
* Returns the local time at which this timestamp was first set.
|
|
1629
1629
|
*/ function $t(t) {
|
|
1630
|
-
const
|
|
1631
|
-
return new gt(
|
|
1630
|
+
const e = Rt(t.mapValue.fields.__local_write_time__.timestampValue);
|
|
1631
|
+
return new gt(e.seconds, e.nanos);
|
|
1632
1632
|
}
|
|
1633
1633
|
|
|
1634
1634
|
/**
|
|
@@ -1651,169 +1651,169 @@ const At = new RegExp(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.(\d+))?Z$/);
|
|
|
1651
1651
|
return "nullValue" in t ? 0 /* NullValue */ : "booleanValue" in t ? 1 /* BooleanValue */ : "integerValue" in t || "doubleValue" in t ? 2 /* NumberValue */ : "timestampValue" in t ? 3 /* TimestampValue */ : "stringValue" in t ? 5 /* StringValue */ : "bytesValue" in t ? 6 /* BlobValue */ : "referenceValue" in t ? 7 /* RefValue */ : "geoPointValue" in t ? 8 /* GeoPointValue */ : "arrayValue" in t ? 9 /* ArrayValue */ : "mapValue" in t ? Dt(t) ? 4 /* ServerTimestampValue */ : 10 /* ObjectValue */ : g();
|
|
1652
1652
|
}
|
|
1653
1653
|
|
|
1654
|
-
/** Tests `left` and `right` for equality based on the backend semantics. */ function Ft(t,
|
|
1655
|
-
if (t ===
|
|
1656
|
-
const
|
|
1657
|
-
if (
|
|
1658
|
-
switch (
|
|
1654
|
+
/** Tests `left` and `right` for equality based on the backend semantics. */ function Ft(t, e) {
|
|
1655
|
+
if (t === e) return !0;
|
|
1656
|
+
const n = St(t);
|
|
1657
|
+
if (n !== St(e)) return !1;
|
|
1658
|
+
switch (n) {
|
|
1659
1659
|
case 0 /* NullValue */ :
|
|
1660
1660
|
return !0;
|
|
1661
1661
|
|
|
1662
1662
|
case 1 /* BooleanValue */ :
|
|
1663
|
-
return t.booleanValue ===
|
|
1663
|
+
return t.booleanValue === e.booleanValue;
|
|
1664
1664
|
|
|
1665
1665
|
case 4 /* ServerTimestampValue */ :
|
|
1666
|
-
return $t(t).isEqual($t(
|
|
1666
|
+
return $t(t).isEqual($t(e));
|
|
1667
1667
|
|
|
1668
1668
|
case 3 /* TimestampValue */ :
|
|
1669
|
-
return function(t,
|
|
1670
|
-
if ("string" == typeof t.timestampValue && "string" == typeof
|
|
1669
|
+
return function(t, e) {
|
|
1670
|
+
if ("string" == typeof t.timestampValue && "string" == typeof e.timestampValue && t.timestampValue.length === e.timestampValue.length)
|
|
1671
1671
|
// Use string equality for ISO 8601 timestamps
|
|
1672
|
-
return t.timestampValue ===
|
|
1673
|
-
const
|
|
1674
|
-
return
|
|
1675
|
-
}(t,
|
|
1672
|
+
return t.timestampValue === e.timestampValue;
|
|
1673
|
+
const n = Rt(t.timestampValue), r = Rt(e.timestampValue);
|
|
1674
|
+
return n.seconds === r.seconds && n.nanos === r.nanos;
|
|
1675
|
+
}(t, e);
|
|
1676
1676
|
|
|
1677
1677
|
case 5 /* StringValue */ :
|
|
1678
|
-
return t.stringValue ===
|
|
1678
|
+
return t.stringValue === e.stringValue;
|
|
1679
1679
|
|
|
1680
1680
|
case 6 /* BlobValue */ :
|
|
1681
|
-
return function(t,
|
|
1682
|
-
return Vt(t.bytesValue).isEqual(Vt(
|
|
1683
|
-
}(t,
|
|
1681
|
+
return function(t, e) {
|
|
1682
|
+
return Vt(t.bytesValue).isEqual(Vt(e.bytesValue));
|
|
1683
|
+
}(t, e);
|
|
1684
1684
|
|
|
1685
1685
|
case 7 /* RefValue */ :
|
|
1686
|
-
return t.referenceValue ===
|
|
1686
|
+
return t.referenceValue === e.referenceValue;
|
|
1687
1687
|
|
|
1688
1688
|
case 8 /* GeoPointValue */ :
|
|
1689
|
-
return function(t,
|
|
1690
|
-
return Pt(t.geoPointValue.latitude) === Pt(
|
|
1691
|
-
}(t,
|
|
1689
|
+
return function(t, e) {
|
|
1690
|
+
return Pt(t.geoPointValue.latitude) === Pt(e.geoPointValue.latitude) && Pt(t.geoPointValue.longitude) === Pt(e.geoPointValue.longitude);
|
|
1691
|
+
}(t, e);
|
|
1692
1692
|
|
|
1693
1693
|
case 2 /* NumberValue */ :
|
|
1694
|
-
return function(t,
|
|
1695
|
-
if ("integerValue" in t && "integerValue" in
|
|
1696
|
-
if ("doubleValue" in t && "doubleValue" in
|
|
1697
|
-
const
|
|
1698
|
-
return
|
|
1694
|
+
return function(t, e) {
|
|
1695
|
+
if ("integerValue" in t && "integerValue" in e) return Pt(t.integerValue) === Pt(e.integerValue);
|
|
1696
|
+
if ("doubleValue" in t && "doubleValue" in e) {
|
|
1697
|
+
const n = Pt(t.doubleValue), r = Pt(e.doubleValue);
|
|
1698
|
+
return n === r ? at(n) === at(r) : isNaN(n) && isNaN(r);
|
|
1699
1699
|
}
|
|
1700
1700
|
return !1;
|
|
1701
|
-
}(t,
|
|
1701
|
+
}(t, e);
|
|
1702
1702
|
|
|
1703
1703
|
case 9 /* ArrayValue */ :
|
|
1704
|
-
return _t(t.arrayValue.values || [],
|
|
1704
|
+
return _t(t.arrayValue.values || [], e.arrayValue.values || [], Ft);
|
|
1705
1705
|
|
|
1706
1706
|
case 10 /* ObjectValue */ :
|
|
1707
|
-
return function(t,
|
|
1708
|
-
const
|
|
1709
|
-
if (bt(
|
|
1710
|
-
for (const t in
|
|
1707
|
+
return function(t, e) {
|
|
1708
|
+
const n = t.mapValue.fields || {}, r = e.mapValue.fields || {};
|
|
1709
|
+
if (bt(n) !== bt(r)) return !1;
|
|
1710
|
+
for (const t in n) if (n.hasOwnProperty(t) && (void 0 === r[t] || !Ft(n[t], r[t]))) return !1;
|
|
1711
1711
|
return !0;
|
|
1712
1712
|
}
|
|
1713
|
-
/** Returns true if the ArrayValue contains the specified element. */ (t,
|
|
1713
|
+
/** Returns true if the ArrayValue contains the specified element. */ (t, e);
|
|
1714
1714
|
|
|
1715
1715
|
default:
|
|
1716
1716
|
return g();
|
|
1717
1717
|
}
|
|
1718
1718
|
}
|
|
1719
1719
|
|
|
1720
|
-
function xt(t,
|
|
1721
|
-
return void 0 !== (t.values || []).find((t => Ft(t,
|
|
1720
|
+
function xt(t, e) {
|
|
1721
|
+
return void 0 !== (t.values || []).find((t => Ft(t, e)));
|
|
1722
1722
|
}
|
|
1723
1723
|
|
|
1724
|
-
function qt(t,
|
|
1725
|
-
if (t ===
|
|
1726
|
-
const
|
|
1727
|
-
if (
|
|
1728
|
-
switch (
|
|
1724
|
+
function qt(t, e) {
|
|
1725
|
+
if (t === e) return 0;
|
|
1726
|
+
const n = St(t), r = St(e);
|
|
1727
|
+
if (n !== r) return yt(n, r);
|
|
1728
|
+
switch (n) {
|
|
1729
1729
|
case 0 /* NullValue */ :
|
|
1730
1730
|
return 0;
|
|
1731
1731
|
|
|
1732
1732
|
case 1 /* BooleanValue */ :
|
|
1733
|
-
return yt(t.booleanValue,
|
|
1733
|
+
return yt(t.booleanValue, e.booleanValue);
|
|
1734
1734
|
|
|
1735
1735
|
case 2 /* NumberValue */ :
|
|
1736
|
-
return function(t,
|
|
1737
|
-
const
|
|
1738
|
-
return
|
|
1736
|
+
return function(t, e) {
|
|
1737
|
+
const n = Pt(t.integerValue || t.doubleValue), r = Pt(e.integerValue || e.doubleValue);
|
|
1738
|
+
return n < r ? -1 : n > r ? 1 : n === r ? 0 :
|
|
1739
1739
|
// one or both are NaN.
|
|
1740
|
-
isNaN(
|
|
1741
|
-
}(t,
|
|
1740
|
+
isNaN(n) ? isNaN(r) ? 0 : -1 : 1;
|
|
1741
|
+
}(t, e);
|
|
1742
1742
|
|
|
1743
1743
|
case 3 /* TimestampValue */ :
|
|
1744
|
-
return Ot(t.timestampValue,
|
|
1744
|
+
return Ot(t.timestampValue, e.timestampValue);
|
|
1745
1745
|
|
|
1746
1746
|
case 4 /* ServerTimestampValue */ :
|
|
1747
|
-
return Ot($t(t), $t(
|
|
1747
|
+
return Ot($t(t), $t(e));
|
|
1748
1748
|
|
|
1749
1749
|
case 5 /* StringValue */ :
|
|
1750
|
-
return yt(t.stringValue,
|
|
1750
|
+
return yt(t.stringValue, e.stringValue);
|
|
1751
1751
|
|
|
1752
1752
|
case 6 /* BlobValue */ :
|
|
1753
|
-
return function(t,
|
|
1754
|
-
const
|
|
1755
|
-
return
|
|
1756
|
-
}(t.bytesValue,
|
|
1753
|
+
return function(t, e) {
|
|
1754
|
+
const n = Vt(t), r = Vt(e);
|
|
1755
|
+
return n.compareTo(r);
|
|
1756
|
+
}(t.bytesValue, e.bytesValue);
|
|
1757
1757
|
|
|
1758
1758
|
case 7 /* RefValue */ :
|
|
1759
|
-
return function(t,
|
|
1760
|
-
const
|
|
1761
|
-
for (let t = 0; t <
|
|
1762
|
-
const
|
|
1763
|
-
if (0 !==
|
|
1759
|
+
return function(t, e) {
|
|
1760
|
+
const n = t.split("/"), r = e.split("/");
|
|
1761
|
+
for (let t = 0; t < n.length && t < r.length; t++) {
|
|
1762
|
+
const e = yt(n[t], r[t]);
|
|
1763
|
+
if (0 !== e) return e;
|
|
1764
1764
|
}
|
|
1765
|
-
return yt(
|
|
1766
|
-
}(t.referenceValue,
|
|
1765
|
+
return yt(n.length, r.length);
|
|
1766
|
+
}(t.referenceValue, e.referenceValue);
|
|
1767
1767
|
|
|
1768
1768
|
case 8 /* GeoPointValue */ :
|
|
1769
|
-
return function(t,
|
|
1770
|
-
const
|
|
1771
|
-
if (0 !==
|
|
1772
|
-
return yt(Pt(t.longitude), Pt(
|
|
1773
|
-
}(t.geoPointValue,
|
|
1769
|
+
return function(t, e) {
|
|
1770
|
+
const n = yt(Pt(t.latitude), Pt(e.latitude));
|
|
1771
|
+
if (0 !== n) return n;
|
|
1772
|
+
return yt(Pt(t.longitude), Pt(e.longitude));
|
|
1773
|
+
}(t.geoPointValue, e.geoPointValue);
|
|
1774
1774
|
|
|
1775
1775
|
case 9 /* ArrayValue */ :
|
|
1776
|
-
return function(t,
|
|
1777
|
-
const
|
|
1778
|
-
for (let t = 0; t <
|
|
1779
|
-
const
|
|
1780
|
-
if (
|
|
1776
|
+
return function(t, e) {
|
|
1777
|
+
const n = t.values || [], r = e.values || [];
|
|
1778
|
+
for (let t = 0; t < n.length && t < r.length; ++t) {
|
|
1779
|
+
const e = qt(n[t], r[t]);
|
|
1780
|
+
if (e) return e;
|
|
1781
1781
|
}
|
|
1782
|
-
return yt(
|
|
1783
|
-
}(t.arrayValue,
|
|
1782
|
+
return yt(n.length, r.length);
|
|
1783
|
+
}(t.arrayValue, e.arrayValue);
|
|
1784
1784
|
|
|
1785
1785
|
case 10 /* ObjectValue */ :
|
|
1786
|
-
return function(t,
|
|
1787
|
-
const
|
|
1786
|
+
return function(t, e) {
|
|
1787
|
+
const n = t.fields || {}, r = Object.keys(n), s = e.fields || {}, i = Object.keys(s);
|
|
1788
1788
|
// Even though MapValues are likely sorted correctly based on their insertion
|
|
1789
1789
|
// order (e.g. when received from the backend), local modifications can bring
|
|
1790
1790
|
// elements out of order. We need to re-sort the elements to ensure that
|
|
1791
1791
|
// canonical IDs are independent of insertion order.
|
|
1792
1792
|
r.sort(), i.sort();
|
|
1793
1793
|
for (let t = 0; t < r.length && t < i.length; ++t) {
|
|
1794
|
-
const
|
|
1795
|
-
if (0 !==
|
|
1796
|
-
const o = qt(
|
|
1794
|
+
const e = yt(r[t], i[t]);
|
|
1795
|
+
if (0 !== e) return e;
|
|
1796
|
+
const o = qt(n[r[t]], s[i[t]]);
|
|
1797
1797
|
if (0 !== o) return o;
|
|
1798
1798
|
}
|
|
1799
1799
|
return yt(r.length, i.length);
|
|
1800
1800
|
}
|
|
1801
|
-
/** Returns a reference value for the provided database and key. */ (t.mapValue,
|
|
1801
|
+
/** Returns a reference value for the provided database and key. */ (t.mapValue, e.mapValue);
|
|
1802
1802
|
|
|
1803
1803
|
default:
|
|
1804
1804
|
throw g();
|
|
1805
1805
|
}
|
|
1806
1806
|
}
|
|
1807
1807
|
|
|
1808
|
-
function Ot(t,
|
|
1809
|
-
if ("string" == typeof t && "string" == typeof
|
|
1810
|
-
const
|
|
1811
|
-
return 0 !== s ? s : yt(
|
|
1808
|
+
function Ot(t, e) {
|
|
1809
|
+
if ("string" == typeof t && "string" == typeof e && t.length === e.length) return yt(t, e);
|
|
1810
|
+
const n = Rt(t), r = Rt(e), s = yt(n.seconds, r.seconds);
|
|
1811
|
+
return 0 !== s ? s : yt(n.nanos, r.nanos);
|
|
1812
1812
|
}
|
|
1813
1813
|
|
|
1814
|
-
function Ct(t,
|
|
1814
|
+
function Ct(t, e) {
|
|
1815
1815
|
return {
|
|
1816
|
-
referenceValue: `projects/${t.projectId}/databases/${t.database}/documents/${
|
|
1816
|
+
referenceValue: `projects/${t.projectId}/databases/${t.database}/documents/${e.path.canonicalString()}`
|
|
1817
1817
|
};
|
|
1818
1818
|
}
|
|
1819
1819
|
|
|
@@ -1841,21 +1841,21 @@ function Ct(t, n) {
|
|
|
1841
1841
|
timestampValue: Object.assign({}, t.timestampValue)
|
|
1842
1842
|
};
|
|
1843
1843
|
if (t.mapValue) {
|
|
1844
|
-
const
|
|
1844
|
+
const e = {
|
|
1845
1845
|
mapValue: {
|
|
1846
1846
|
fields: {}
|
|
1847
1847
|
}
|
|
1848
1848
|
};
|
|
1849
|
-
return Et(t.mapValue.fields, ((t,
|
|
1849
|
+
return Et(t.mapValue.fields, ((t, n) => e.mapValue.fields[t] = Mt(n))), e;
|
|
1850
1850
|
}
|
|
1851
1851
|
if (t.arrayValue) {
|
|
1852
|
-
const
|
|
1852
|
+
const e = {
|
|
1853
1853
|
arrayValue: {
|
|
1854
1854
|
values: []
|
|
1855
1855
|
}
|
|
1856
1856
|
};
|
|
1857
|
-
for (let
|
|
1858
|
-
return
|
|
1857
|
+
for (let n = 0; n < (t.arrayValue.values || []).length; ++n) e.arrayValue.values[n] = Mt(t.arrayValue.values[n]);
|
|
1858
|
+
return e;
|
|
1859
1859
|
}
|
|
1860
1860
|
return Object.assign({}, t);
|
|
1861
1861
|
}
|
|
@@ -1896,10 +1896,10 @@ function Ct(t, n) {
|
|
|
1896
1896
|
*/ field(t) {
|
|
1897
1897
|
if (t.isEmpty()) return this.value;
|
|
1898
1898
|
{
|
|
1899
|
-
let
|
|
1900
|
-
for (let
|
|
1901
|
-
!jt(
|
|
1902
|
-
return
|
|
1899
|
+
let e = this.value;
|
|
1900
|
+
for (let n = 0; n < t.length - 1; ++n) if (e = (e.mapValue.fields || {})[t.get(n)],
|
|
1901
|
+
!jt(e)) return null;
|
|
1902
|
+
return e = (e.mapValue.fields || {})[t.lastSegment()], e || null;
|
|
1903
1903
|
}
|
|
1904
1904
|
}
|
|
1905
1905
|
/**
|
|
@@ -1907,25 +1907,25 @@ function Ct(t, n) {
|
|
|
1907
1907
|
*
|
|
1908
1908
|
* @param path - The field path to set.
|
|
1909
1909
|
* @param value - The value to set.
|
|
1910
|
-
*/ set(t,
|
|
1911
|
-
this.getFieldsMap(t.popLast())[t.lastSegment()] = Mt(
|
|
1910
|
+
*/ set(t, e) {
|
|
1911
|
+
this.getFieldsMap(t.popLast())[t.lastSegment()] = Mt(e);
|
|
1912
1912
|
}
|
|
1913
1913
|
/**
|
|
1914
1914
|
* Sets the provided fields to the provided values.
|
|
1915
1915
|
*
|
|
1916
1916
|
* @param data - A map of fields to values (or null for deletes).
|
|
1917
1917
|
*/ setAll(t) {
|
|
1918
|
-
let
|
|
1918
|
+
let e = tt.emptyPath(), n = {}, r = [];
|
|
1919
1919
|
t.forEach(((t, s) => {
|
|
1920
|
-
if (!
|
|
1920
|
+
if (!e.isImmediateParentOf(s)) {
|
|
1921
1921
|
// Insert the accumulated changes at this parent location
|
|
1922
|
-
const t = this.getFieldsMap(
|
|
1923
|
-
this.applyChanges(t,
|
|
1922
|
+
const t = this.getFieldsMap(e);
|
|
1923
|
+
this.applyChanges(t, n, r), n = {}, r = [], e = s.popLast();
|
|
1924
1924
|
}
|
|
1925
|
-
t ?
|
|
1925
|
+
t ? n[s.lastSegment()] = Mt(t) : r.push(s.lastSegment());
|
|
1926
1926
|
}));
|
|
1927
|
-
const s = this.getFieldsMap(
|
|
1928
|
-
this.applyChanges(s,
|
|
1927
|
+
const s = this.getFieldsMap(e);
|
|
1928
|
+
this.applyChanges(s, n, r);
|
|
1929
1929
|
}
|
|
1930
1930
|
/**
|
|
1931
1931
|
* Removes the field at the specified path. If there is no field at the
|
|
@@ -1933,8 +1933,8 @@ function Ct(t, n) {
|
|
|
1933
1933
|
*
|
|
1934
1934
|
* @param path - The field path to remove.
|
|
1935
1935
|
*/ delete(t) {
|
|
1936
|
-
const
|
|
1937
|
-
jt(
|
|
1936
|
+
const e = this.field(t.popLast());
|
|
1937
|
+
jt(e) && e.mapValue.fields && delete e.mapValue.fields[t.lastSegment()];
|
|
1938
1938
|
}
|
|
1939
1939
|
isEqual(t) {
|
|
1940
1940
|
return Ft(this.value, t.value);
|
|
@@ -1943,26 +1943,26 @@ function Ct(t, n) {
|
|
|
1943
1943
|
* Returns the map that contains the leaf element of `path`. If the parent
|
|
1944
1944
|
* entry does not yet exist, or if it is not a map, a new map will be created.
|
|
1945
1945
|
*/ getFieldsMap(t) {
|
|
1946
|
-
let
|
|
1947
|
-
|
|
1946
|
+
let e = this.value;
|
|
1947
|
+
e.mapValue.fields || (e.mapValue = {
|
|
1948
1948
|
fields: {}
|
|
1949
1949
|
});
|
|
1950
|
-
for (let
|
|
1951
|
-
let r =
|
|
1950
|
+
for (let n = 0; n < t.length; ++n) {
|
|
1951
|
+
let r = e.mapValue.fields[t.get(n)];
|
|
1952
1952
|
jt(r) && r.mapValue.fields || (r = {
|
|
1953
1953
|
mapValue: {
|
|
1954
1954
|
fields: {}
|
|
1955
1955
|
}
|
|
1956
|
-
},
|
|
1956
|
+
}, e.mapValue.fields[t.get(n)] = r), e = r;
|
|
1957
1957
|
}
|
|
1958
|
-
return
|
|
1958
|
+
return e.mapValue.fields;
|
|
1959
1959
|
}
|
|
1960
1960
|
/**
|
|
1961
1961
|
* Modifies `fieldsMap` by adding, replacing or deleting the specified
|
|
1962
1962
|
* entries.
|
|
1963
|
-
*/ applyChanges(t,
|
|
1964
|
-
Et(
|
|
1965
|
-
for (const
|
|
1963
|
+
*/ applyChanges(t, e, n) {
|
|
1964
|
+
Et(e, ((e, n) => t[e] = n));
|
|
1965
|
+
for (const e of n) delete t[e];
|
|
1966
1966
|
}
|
|
1967
1967
|
clone() {
|
|
1968
1968
|
return new Bt(Mt(this.value));
|
|
@@ -1995,8 +1995,8 @@ function Ct(t, n) {
|
|
|
1995
1995
|
* applied, `isValidDocument()` returns false and the document should be removed
|
|
1996
1996
|
* from all views.
|
|
1997
1997
|
*/ class zt {
|
|
1998
|
-
constructor(t,
|
|
1999
|
-
this.key = t, this.documentType =
|
|
1998
|
+
constructor(t, e, n, r, s, i) {
|
|
1999
|
+
this.key = t, this.documentType = e, this.version = n, this.readTime = r, this.data = s,
|
|
2000
2000
|
this.documentState = i;
|
|
2001
2001
|
}
|
|
2002
2002
|
/**
|
|
@@ -2008,24 +2008,24 @@ function Ct(t, n) {
|
|
|
2008
2008
|
/**
|
|
2009
2009
|
* Creates a new document that is known to exist with the given data at the
|
|
2010
2010
|
* given version.
|
|
2011
|
-
*/ static newFoundDocument(t,
|
|
2012
|
-
return new zt(t, 1 /* FOUND_DOCUMENT */ ,
|
|
2011
|
+
*/ static newFoundDocument(t, e, n) {
|
|
2012
|
+
return new zt(t, 1 /* FOUND_DOCUMENT */ , e, vt.min(), n, 0 /* SYNCED */);
|
|
2013
2013
|
}
|
|
2014
|
-
/** Creates a new document that is known to not exist at the given version. */ static newNoDocument(t,
|
|
2015
|
-
return new zt(t, 2 /* NO_DOCUMENT */ ,
|
|
2014
|
+
/** Creates a new document that is known to not exist at the given version. */ static newNoDocument(t, e) {
|
|
2015
|
+
return new zt(t, 2 /* NO_DOCUMENT */ , e, vt.min(), Bt.empty(), 0 /* SYNCED */);
|
|
2016
2016
|
}
|
|
2017
2017
|
/**
|
|
2018
2018
|
* Creates a new document that is known to exist at the given version but
|
|
2019
2019
|
* whose data is not known (e.g. a document that was updated without a known
|
|
2020
2020
|
* base document).
|
|
2021
|
-
*/ static newUnknownDocument(t,
|
|
2022
|
-
return new zt(t, 3 /* UNKNOWN_DOCUMENT */ ,
|
|
2021
|
+
*/ static newUnknownDocument(t, e) {
|
|
2022
|
+
return new zt(t, 3 /* UNKNOWN_DOCUMENT */ , e, vt.min(), Bt.empty(), 2 /* HAS_COMMITTED_MUTATIONS */);
|
|
2023
2023
|
}
|
|
2024
2024
|
/**
|
|
2025
2025
|
* Changes the document type to indicate that it exists and that its version
|
|
2026
2026
|
* and data are known.
|
|
2027
|
-
*/ convertToFoundDocument(t,
|
|
2028
|
-
return this.version = t, this.documentType = 1 /* FOUND_DOCUMENT */ , this.data =
|
|
2027
|
+
*/ convertToFoundDocument(t, e) {
|
|
2028
|
+
return this.version = t, this.documentType = 1 /* FOUND_DOCUMENT */ , this.data = e,
|
|
2029
2029
|
this.documentState = 0 /* SYNCED */ , this;
|
|
2030
2030
|
}
|
|
2031
2031
|
/**
|
|
@@ -2102,8 +2102,8 @@ function Ct(t, n) {
|
|
|
2102
2102
|
*/
|
|
2103
2103
|
// Visible for testing
|
|
2104
2104
|
class Gt {
|
|
2105
|
-
constructor(t,
|
|
2106
|
-
this.path = t, this.collectionGroup =
|
|
2105
|
+
constructor(t, e = null, n = [], r = [], s = null, i = null, o = null) {
|
|
2106
|
+
this.path = t, this.collectionGroup = e, this.orderBy = n, this.filters = r, this.limit = s,
|
|
2107
2107
|
this.startAt = i, this.endAt = o, this.P = null;
|
|
2108
2108
|
}
|
|
2109
2109
|
}
|
|
@@ -2115,26 +2115,26 @@ class Gt {
|
|
|
2115
2115
|
* NOTE: you should always construct `Target` from `Query.toTarget` instead of
|
|
2116
2116
|
* using this factory method, because `Query` provides an implicit `orderBy`
|
|
2117
2117
|
* property.
|
|
2118
|
-
*/ function Qt(t,
|
|
2119
|
-
return new Gt(t,
|
|
2118
|
+
*/ function Qt(t, e = null, n = [], r = [], s = null, i = null, o = null) {
|
|
2119
|
+
return new Gt(t, e, n, r, s, i, o);
|
|
2120
2120
|
}
|
|
2121
2121
|
|
|
2122
2122
|
class Wt extends class {} {
|
|
2123
|
-
constructor(t,
|
|
2124
|
-
super(), this.field = t, this.op =
|
|
2123
|
+
constructor(t, e, n) {
|
|
2124
|
+
super(), this.field = t, this.op = e, this.value = n;
|
|
2125
2125
|
}
|
|
2126
2126
|
/**
|
|
2127
2127
|
* Creates a filter based on the provided arguments.
|
|
2128
|
-
*/ static create(t,
|
|
2129
|
-
return t.isKeyField() ? "in" /* IN */ ===
|
|
2128
|
+
*/ static create(t, e, n) {
|
|
2129
|
+
return t.isKeyField() ? "in" /* IN */ === e || "not-in" /* NOT_IN */ === e ? this.V(t, e, n) : new Yt(t, e, n) : "array-contains" /* ARRAY_CONTAINS */ === e ? new Xt(t, n) : "in" /* IN */ === e ? new Zt(t, n) : "not-in" /* NOT_IN */ === e ? new te(t, n) : "array-contains-any" /* ARRAY_CONTAINS_ANY */ === e ? new ee(t, n) : new Wt(t, e, n);
|
|
2130
2130
|
}
|
|
2131
|
-
static V(t,
|
|
2132
|
-
return "in" /* IN */ ===
|
|
2131
|
+
static V(t, e, n) {
|
|
2132
|
+
return "in" /* IN */ === e ? new Ht(t, n) : new Kt(t, n);
|
|
2133
2133
|
}
|
|
2134
2134
|
matches(t) {
|
|
2135
|
-
const
|
|
2135
|
+
const e = t.data.field(this.field);
|
|
2136
2136
|
// Types do not have to match in NOT_EQUAL filters.
|
|
2137
|
-
return "!=" /* NOT_EQUAL */ === this.op ? null !==
|
|
2137
|
+
return "!=" /* NOT_EQUAL */ === this.op ? null !== e && this.D(qt(e, this.value)) : null !== e && St(this.value) === St(e) && this.D(qt(e, this.value));
|
|
2138
2138
|
// Only compare types with matching backend order (such as double and int).
|
|
2139
2139
|
}
|
|
2140
2140
|
D(t) {
|
|
@@ -2168,82 +2168,81 @@ class Wt extends class {} {
|
|
|
2168
2168
|
|
|
2169
2169
|
/** Filter that matches on key fields (i.e. '__name__'). */
|
|
2170
2170
|
class Yt extends Wt {
|
|
2171
|
-
constructor(t,
|
|
2172
|
-
super(t,
|
|
2171
|
+
constructor(t, e, n) {
|
|
2172
|
+
super(t, e, n), this.key = et.fromName(n.referenceValue);
|
|
2173
2173
|
}
|
|
2174
2174
|
matches(t) {
|
|
2175
|
-
const
|
|
2176
|
-
return this.D(
|
|
2175
|
+
const e = et.comparator(t.key, this.key);
|
|
2176
|
+
return this.D(e);
|
|
2177
2177
|
}
|
|
2178
2178
|
}
|
|
2179
2179
|
|
|
2180
2180
|
/** Filter that matches on key fields within an array. */ class Ht extends Wt {
|
|
2181
|
-
constructor(t,
|
|
2182
|
-
super(t, "in" /* IN */ ,
|
|
2181
|
+
constructor(t, e) {
|
|
2182
|
+
super(t, "in" /* IN */ , e), this.keys = Jt("in" /* IN */ , e);
|
|
2183
2183
|
}
|
|
2184
2184
|
matches(t) {
|
|
2185
|
-
return this.keys.some((
|
|
2185
|
+
return this.keys.some((e => e.isEqual(t.key)));
|
|
2186
2186
|
}
|
|
2187
2187
|
}
|
|
2188
2188
|
|
|
2189
2189
|
/** Filter that matches on key fields not present within an array. */ class Kt extends Wt {
|
|
2190
|
-
constructor(t,
|
|
2191
|
-
super(t, "not-in" /* NOT_IN */ ,
|
|
2190
|
+
constructor(t, e) {
|
|
2191
|
+
super(t, "not-in" /* NOT_IN */ , e), this.keys = Jt("not-in" /* NOT_IN */ , e);
|
|
2192
2192
|
}
|
|
2193
2193
|
matches(t) {
|
|
2194
|
-
return !this.keys.some((
|
|
2194
|
+
return !this.keys.some((e => e.isEqual(t.key)));
|
|
2195
2195
|
}
|
|
2196
2196
|
}
|
|
2197
2197
|
|
|
2198
|
-
function Jt(t,
|
|
2199
|
-
var
|
|
2200
|
-
return ((null === (
|
|
2198
|
+
function Jt(t, e) {
|
|
2199
|
+
var n;
|
|
2200
|
+
return ((null === (n = e.arrayValue) || void 0 === n ? void 0 : n.values) || []).map((t => et.fromName(t.referenceValue)));
|
|
2201
2201
|
}
|
|
2202
2202
|
|
|
2203
2203
|
/** A Filter that implements the array-contains operator. */ class Xt extends Wt {
|
|
2204
|
-
constructor(t,
|
|
2205
|
-
super(t, "array-contains" /* ARRAY_CONTAINS */ ,
|
|
2204
|
+
constructor(t, e) {
|
|
2205
|
+
super(t, "array-contains" /* ARRAY_CONTAINS */ , e);
|
|
2206
2206
|
}
|
|
2207
2207
|
matches(t) {
|
|
2208
|
-
const
|
|
2209
|
-
return Lt(
|
|
2208
|
+
const e = t.data.field(this.field);
|
|
2209
|
+
return Lt(e) && xt(e.arrayValue, this.value);
|
|
2210
2210
|
}
|
|
2211
2211
|
}
|
|
2212
2212
|
|
|
2213
2213
|
/** A Filter that implements the IN operator. */ class Zt extends Wt {
|
|
2214
|
-
constructor(t,
|
|
2215
|
-
super(t, "in" /* IN */ ,
|
|
2214
|
+
constructor(t, e) {
|
|
2215
|
+
super(t, "in" /* IN */ , e);
|
|
2216
2216
|
}
|
|
2217
2217
|
matches(t) {
|
|
2218
|
-
const
|
|
2219
|
-
return null !==
|
|
2218
|
+
const e = t.data.field(this.field);
|
|
2219
|
+
return null !== e && xt(this.value.arrayValue, e);
|
|
2220
2220
|
}
|
|
2221
2221
|
}
|
|
2222
2222
|
|
|
2223
|
-
/** A Filter that implements the not-in operator. */ class
|
|
2224
|
-
constructor(t,
|
|
2225
|
-
super(t, "not-in" /* NOT_IN */ ,
|
|
2223
|
+
/** A Filter that implements the not-in operator. */ class te extends Wt {
|
|
2224
|
+
constructor(t, e) {
|
|
2225
|
+
super(t, "not-in" /* NOT_IN */ , e);
|
|
2226
2226
|
}
|
|
2227
2227
|
matches(t) {
|
|
2228
2228
|
if (xt(this.value.arrayValue, {
|
|
2229
2229
|
nullValue: "NULL_VALUE"
|
|
2230
2230
|
})) return !1;
|
|
2231
|
-
const
|
|
2232
|
-
return null !==
|
|
2231
|
+
const e = t.data.field(this.field);
|
|
2232
|
+
return null !== e && !xt(this.value.arrayValue, e);
|
|
2233
2233
|
}
|
|
2234
2234
|
}
|
|
2235
2235
|
|
|
2236
|
-
/** A Filter that implements the array-contains-any operator. */ class
|
|
2237
|
-
constructor(t,
|
|
2238
|
-
super(t, "array-contains-any" /* ARRAY_CONTAINS_ANY */ ,
|
|
2236
|
+
/** A Filter that implements the array-contains-any operator. */ class ee extends Wt {
|
|
2237
|
+
constructor(t, e) {
|
|
2238
|
+
super(t, "array-contains-any" /* ARRAY_CONTAINS_ANY */ , e);
|
|
2239
2239
|
}
|
|
2240
2240
|
matches(t) {
|
|
2241
|
-
const
|
|
2242
|
-
return !(!Lt(
|
|
2241
|
+
const e = t.data.field(this.field);
|
|
2242
|
+
return !(!Lt(e) || !e.arrayValue.values) && e.arrayValue.values.some((t => xt(this.value.arrayValue, t)));
|
|
2243
2243
|
}
|
|
2244
2244
|
}
|
|
2245
2245
|
|
|
2246
|
-
// TODO(indexing): Change Bound.before to "inclusive"
|
|
2247
2246
|
/**
|
|
2248
2247
|
* Represents a bound of a query.
|
|
2249
2248
|
*
|
|
@@ -2257,30 +2256,30 @@ function Jt(t, n) {
|
|
|
2257
2256
|
* Bound provides a function to determine whether a document comes before or
|
|
2258
2257
|
* after a bound. This is influenced by whether the position is just before or
|
|
2259
2258
|
* just after the provided values.
|
|
2260
|
-
*/ class
|
|
2261
|
-
constructor(t,
|
|
2262
|
-
this.position = t, this.
|
|
2259
|
+
*/ class ne {
|
|
2260
|
+
constructor(t, e) {
|
|
2261
|
+
this.position = t, this.inclusive = e;
|
|
2263
2262
|
}
|
|
2264
2263
|
}
|
|
2265
2264
|
|
|
2266
2265
|
/**
|
|
2267
2266
|
* An ordering on a field, in some Direction. Direction defaults to ASCENDING.
|
|
2268
|
-
*/ class
|
|
2269
|
-
constructor(t,
|
|
2270
|
-
this.field = t, this.dir =
|
|
2267
|
+
*/ class re {
|
|
2268
|
+
constructor(t, e = "asc" /* ASCENDING */) {
|
|
2269
|
+
this.field = t, this.dir = e;
|
|
2271
2270
|
}
|
|
2272
2271
|
}
|
|
2273
2272
|
|
|
2274
|
-
function
|
|
2275
|
-
return t.dir ===
|
|
2273
|
+
function se(t, e) {
|
|
2274
|
+
return t.dir === e.dir && t.field.isEqual(e.field);
|
|
2276
2275
|
}
|
|
2277
2276
|
|
|
2278
|
-
function
|
|
2279
|
-
if (null === t) return null ===
|
|
2280
|
-
if (null ===
|
|
2281
|
-
if (t.
|
|
2282
|
-
for (let
|
|
2283
|
-
if (!Ft(t.position[
|
|
2277
|
+
function ie(t, e) {
|
|
2278
|
+
if (null === t) return null === e;
|
|
2279
|
+
if (null === e) return !1;
|
|
2280
|
+
if (t.inclusive !== e.inclusive || t.position.length !== e.position.length) return !1;
|
|
2281
|
+
for (let n = 0; n < t.position.length; n++) {
|
|
2282
|
+
if (!Ft(t.position[n], e.position[n])) return !1;
|
|
2284
2283
|
}
|
|
2285
2284
|
return !0;
|
|
2286
2285
|
}
|
|
@@ -2307,29 +2306,29 @@ function on(t, n) {
|
|
|
2307
2306
|
* query the RemoteStore results.
|
|
2308
2307
|
*
|
|
2309
2308
|
* Visible for testing.
|
|
2310
|
-
*/ class
|
|
2309
|
+
*/ class oe {
|
|
2311
2310
|
/**
|
|
2312
2311
|
* Initializes a Query with a path and optional additional query constraints.
|
|
2313
2312
|
* Path must currently be empty if this is a collection group query.
|
|
2314
2313
|
*/
|
|
2315
|
-
constructor(t,
|
|
2316
|
-
this.path = t, this.collectionGroup =
|
|
2314
|
+
constructor(t, e = null, n = [], r = [], s = null, i = "F" /* First */ , o = null, u = null) {
|
|
2315
|
+
this.path = t, this.collectionGroup = e, this.explicitOrderBy = n, this.filters = r,
|
|
2317
2316
|
this.limit = s, this.limitType = i, this.startAt = o, this.endAt = u, this.$ = null,
|
|
2318
2317
|
// The corresponding `Target` of this `Query` instance.
|
|
2319
2318
|
this.S = null, this.startAt, this.endAt;
|
|
2320
2319
|
}
|
|
2321
2320
|
}
|
|
2322
2321
|
|
|
2323
|
-
/** Creates a new Query for a query that matches all documents at `path` */ function
|
|
2322
|
+
/** Creates a new Query for a query that matches all documents at `path` */ function ue(t) {
|
|
2324
2323
|
return !ct(t.limit) && "L" /* Last */ === t.limitType;
|
|
2325
2324
|
}
|
|
2326
2325
|
|
|
2327
|
-
function
|
|
2326
|
+
function ce(t) {
|
|
2328
2327
|
return t.explicitOrderBy.length > 0 ? t.explicitOrderBy[0].field : null;
|
|
2329
2328
|
}
|
|
2330
2329
|
|
|
2331
|
-
function
|
|
2332
|
-
for (const
|
|
2330
|
+
function ae(t) {
|
|
2331
|
+
for (const e of t.filters) if (e.N()) return e.field;
|
|
2333
2332
|
return null;
|
|
2334
2333
|
}
|
|
2335
2334
|
|
|
@@ -2341,7 +2340,7 @@ function hn(t) {
|
|
|
2341
2340
|
* Returns whether the query matches a collection group rather than a specific
|
|
2342
2341
|
* collection.
|
|
2343
2342
|
*/
|
|
2344
|
-
function
|
|
2343
|
+
function he(t) {
|
|
2345
2344
|
return null !== t.collectionGroup;
|
|
2346
2345
|
}
|
|
2347
2346
|
|
|
@@ -2349,59 +2348,59 @@ function ln(t) {
|
|
|
2349
2348
|
* Returns the implicit order by constraint that is used to execute the Query,
|
|
2350
2349
|
* which can be different from the order by constraints the user provided (e.g.
|
|
2351
2350
|
* the SDK and backend always orders by `__name__`).
|
|
2352
|
-
*/ function
|
|
2353
|
-
const
|
|
2354
|
-
if (null ===
|
|
2355
|
-
|
|
2356
|
-
const t =
|
|
2357
|
-
if (null !== t && null ===
|
|
2351
|
+
*/ function le(t) {
|
|
2352
|
+
const e = b(t);
|
|
2353
|
+
if (null === e.$) {
|
|
2354
|
+
e.$ = [];
|
|
2355
|
+
const t = ae(e), n = ce(e);
|
|
2356
|
+
if (null !== t && null === n)
|
|
2358
2357
|
// In order to implicitly add key ordering, we must also add the
|
|
2359
2358
|
// inequality filter field for it to be a valid query.
|
|
2360
2359
|
// Note that the default inequality field and key ordering is ascending.
|
|
2361
|
-
t.isKeyField() ||
|
|
2360
|
+
t.isKeyField() || e.$.push(new re(t)), e.$.push(new re(tt.keyField(), "asc" /* ASCENDING */)); else {
|
|
2362
2361
|
let t = !1;
|
|
2363
|
-
for (const
|
|
2362
|
+
for (const n of e.explicitOrderBy) e.$.push(n), n.field.isKeyField() && (t = !0);
|
|
2364
2363
|
if (!t) {
|
|
2365
2364
|
// The order of the implicit key ordering always matches the last
|
|
2366
2365
|
// explicit order by
|
|
2367
|
-
const t =
|
|
2368
|
-
|
|
2366
|
+
const t = e.explicitOrderBy.length > 0 ? e.explicitOrderBy[e.explicitOrderBy.length - 1].dir : "asc" /* ASCENDING */;
|
|
2367
|
+
e.$.push(new re(tt.keyField(), t));
|
|
2369
2368
|
}
|
|
2370
2369
|
}
|
|
2371
2370
|
}
|
|
2372
|
-
return
|
|
2371
|
+
return e.$;
|
|
2373
2372
|
}
|
|
2374
2373
|
|
|
2375
2374
|
/**
|
|
2376
2375
|
* Converts this `Query` instance to it's corresponding `Target` representation.
|
|
2377
|
-
*/ function
|
|
2378
|
-
const
|
|
2379
|
-
if (!
|
|
2376
|
+
*/ function fe(t) {
|
|
2377
|
+
const e = b(t);
|
|
2378
|
+
if (!e.S) if ("F" /* First */ === e.limitType) e.S = Qt(e.path, e.collectionGroup, le(e), e.filters, e.limit, e.startAt, e.endAt); else {
|
|
2380
2379
|
// Flip the orderBy directions since we want the last results
|
|
2381
2380
|
const t = [];
|
|
2382
|
-
for (const
|
|
2383
|
-
const
|
|
2384
|
-
t.push(new
|
|
2381
|
+
for (const n of le(e)) {
|
|
2382
|
+
const e = "desc" /* DESCENDING */ === n.dir ? "asc" /* ASCENDING */ : "desc" /* DESCENDING */;
|
|
2383
|
+
t.push(new re(n.field, e));
|
|
2385
2384
|
}
|
|
2386
2385
|
// We need to swap the cursors to match the now-flipped query ordering.
|
|
2387
|
-
const
|
|
2386
|
+
const n = e.endAt ? new ne(e.endAt.position, !e.endAt.inclusive) : null, r = e.startAt ? new ne(e.startAt.position, !e.startAt.inclusive) : null;
|
|
2388
2387
|
// Now return as a LimitType.First query.
|
|
2389
|
-
|
|
2388
|
+
e.S = Qt(e.path, e.collectionGroup, t, e.filters, e.limit, n, r);
|
|
2390
2389
|
}
|
|
2391
|
-
return
|
|
2390
|
+
return e.S;
|
|
2392
2391
|
}
|
|
2393
2392
|
|
|
2394
|
-
function
|
|
2395
|
-
return function(t,
|
|
2396
|
-
if (t.limit !==
|
|
2397
|
-
if (t.orderBy.length !==
|
|
2398
|
-
for (let
|
|
2399
|
-
if (t.filters.length !==
|
|
2400
|
-
for (let s = 0; s < t.filters.length; s++) if (
|
|
2401
|
-
|
|
2402
|
-
var
|
|
2403
|
-
return t.collectionGroup ===
|
|
2404
|
-
}(
|
|
2393
|
+
function de(t, e) {
|
|
2394
|
+
return function(t, e) {
|
|
2395
|
+
if (t.limit !== e.limit) return !1;
|
|
2396
|
+
if (t.orderBy.length !== e.orderBy.length) return !1;
|
|
2397
|
+
for (let n = 0; n < t.orderBy.length; n++) if (!se(t.orderBy[n], e.orderBy[n])) return !1;
|
|
2398
|
+
if (t.filters.length !== e.filters.length) return !1;
|
|
2399
|
+
for (let s = 0; s < t.filters.length; s++) if (n = t.filters[s], r = e.filters[s],
|
|
2400
|
+
n.op !== r.op || !n.field.isEqual(r.field) || !Ft(n.value, r.value)) return !1;
|
|
2401
|
+
var n, r;
|
|
2402
|
+
return t.collectionGroup === e.collectionGroup && !!t.path.isEqual(e.path) && !!ie(t.startAt, e.startAt) && ie(t.endAt, e.endAt);
|
|
2403
|
+
}(fe(t), fe(e)) && t.limitType === e.limitType;
|
|
2405
2404
|
}
|
|
2406
2405
|
|
|
2407
2406
|
/**
|
|
@@ -2429,10 +2428,10 @@ function wn(t, n) {
|
|
|
2429
2428
|
* The return value is an IntegerValue if it can safely represent the value,
|
|
2430
2429
|
* otherwise a DoubleValue is returned.
|
|
2431
2430
|
*/
|
|
2432
|
-
function
|
|
2431
|
+
function we(t, e) {
|
|
2433
2432
|
return function(t) {
|
|
2434
2433
|
return "number" == typeof t && Number.isInteger(t) && !at(t) && t <= Number.MAX_SAFE_INTEGER && t >= Number.MIN_SAFE_INTEGER;
|
|
2435
|
-
}(
|
|
2434
|
+
}(e) ?
|
|
2436
2435
|
/**
|
|
2437
2436
|
* Returns an IntegerValue for `value`.
|
|
2438
2437
|
*/
|
|
@@ -2440,22 +2439,22 @@ function mn(t, n) {
|
|
|
2440
2439
|
return {
|
|
2441
2440
|
integerValue: "" + t
|
|
2442
2441
|
};
|
|
2443
|
-
}(
|
|
2442
|
+
}(e) : function(t, e) {
|
|
2444
2443
|
if (t.F) {
|
|
2445
|
-
if (isNaN(
|
|
2444
|
+
if (isNaN(e)) return {
|
|
2446
2445
|
doubleValue: "NaN"
|
|
2447
2446
|
};
|
|
2448
|
-
if (
|
|
2447
|
+
if (e === 1 / 0) return {
|
|
2449
2448
|
doubleValue: "Infinity"
|
|
2450
2449
|
};
|
|
2451
|
-
if (
|
|
2450
|
+
if (e === -1 / 0) return {
|
|
2452
2451
|
doubleValue: "-Infinity"
|
|
2453
2452
|
};
|
|
2454
2453
|
}
|
|
2455
2454
|
return {
|
|
2456
|
-
doubleValue: at(
|
|
2455
|
+
doubleValue: at(e) ? "-0" : e
|
|
2457
2456
|
};
|
|
2458
|
-
}(t,
|
|
2457
|
+
}(t, e);
|
|
2459
2458
|
}
|
|
2460
2459
|
|
|
2461
2460
|
/**
|
|
@@ -2474,7 +2473,7 @@ function mn(t, n) {
|
|
|
2474
2473
|
* See the License for the specific language governing permissions and
|
|
2475
2474
|
* limitations under the License.
|
|
2476
2475
|
*/
|
|
2477
|
-
/** Used to represent a field transform on a mutation. */ class
|
|
2476
|
+
/** Used to represent a field transform on a mutation. */ class me {
|
|
2478
2477
|
constructor() {
|
|
2479
2478
|
// Make sure that the structural type of `TransformOperation` is unique.
|
|
2480
2479
|
// See https://github.com/microsoft/TypeScript/issues/5451
|
|
@@ -2482,15 +2481,15 @@ function mn(t, n) {
|
|
|
2482
2481
|
}
|
|
2483
2482
|
}
|
|
2484
2483
|
|
|
2485
|
-
/** Transforms a value into a server-generated timestamp. */ class
|
|
2484
|
+
/** Transforms a value into a server-generated timestamp. */ class pe extends me {}
|
|
2486
2485
|
|
|
2487
|
-
/** Transforms an array value via a union operation. */ class
|
|
2486
|
+
/** Transforms an array value via a union operation. */ class ye extends me {
|
|
2488
2487
|
constructor(t) {
|
|
2489
2488
|
super(), this.elements = t;
|
|
2490
2489
|
}
|
|
2491
2490
|
}
|
|
2492
2491
|
|
|
2493
|
-
/** Transforms an array value via a remove operation. */ class
|
|
2492
|
+
/** Transforms an array value via a remove operation. */ class _e extends me {
|
|
2494
2493
|
constructor(t) {
|
|
2495
2494
|
super(), this.elements = t;
|
|
2496
2495
|
}
|
|
@@ -2501,9 +2500,9 @@ function mn(t, n) {
|
|
|
2501
2500
|
* transforms. Converts all field values to integers or doubles, but unlike the
|
|
2502
2501
|
* backend does not cap integer values at 2^63. Instead, JavaScript number
|
|
2503
2502
|
* arithmetic is used and precision loss can occur for values greater than 2^53.
|
|
2504
|
-
*/ class
|
|
2505
|
-
constructor(t,
|
|
2506
|
-
super(), this.q = t, this.O =
|
|
2503
|
+
*/ class ge extends me {
|
|
2504
|
+
constructor(t, e) {
|
|
2505
|
+
super(), this.q = t, this.O = e;
|
|
2507
2506
|
}
|
|
2508
2507
|
}
|
|
2509
2508
|
|
|
@@ -2523,9 +2522,9 @@ function mn(t, n) {
|
|
|
2523
2522
|
* See the License for the specific language governing permissions and
|
|
2524
2523
|
* limitations under the License.
|
|
2525
2524
|
*/
|
|
2526
|
-
/** A field path and the TransformOperation to perform upon it. */ class
|
|
2527
|
-
constructor(t,
|
|
2528
|
-
this.field = t, this.transform =
|
|
2525
|
+
/** A field path and the TransformOperation to perform upon it. */ class ve {
|
|
2526
|
+
constructor(t, e) {
|
|
2527
|
+
this.field = t, this.transform = e;
|
|
2529
2528
|
}
|
|
2530
2529
|
}
|
|
2531
2530
|
|
|
@@ -2533,18 +2532,18 @@ function mn(t, n) {
|
|
|
2533
2532
|
* Encodes a precondition for a mutation. This follows the model that the
|
|
2534
2533
|
* backend accepts with the special case of an explicit "empty" precondition
|
|
2535
2534
|
* (meaning no precondition).
|
|
2536
|
-
*/ class
|
|
2537
|
-
constructor(t,
|
|
2538
|
-
this.updateTime = t, this.exists =
|
|
2535
|
+
*/ class be {
|
|
2536
|
+
constructor(t, e) {
|
|
2537
|
+
this.updateTime = t, this.exists = e;
|
|
2539
2538
|
}
|
|
2540
2539
|
/** Creates a new empty Precondition. */ static none() {
|
|
2541
|
-
return new
|
|
2540
|
+
return new be;
|
|
2542
2541
|
}
|
|
2543
2542
|
/** Creates a new Precondition with an exists flag. */ static exists(t) {
|
|
2544
|
-
return new
|
|
2543
|
+
return new be(void 0, t);
|
|
2545
2544
|
}
|
|
2546
2545
|
/** Creates a new Precondition based on a version a document exists at. */ static updateTime(t) {
|
|
2547
|
-
return new
|
|
2546
|
+
return new be(t);
|
|
2548
2547
|
}
|
|
2549
2548
|
/** Returns whether this Precondition is empty. */ get isNone() {
|
|
2550
2549
|
return void 0 === this.updateTime && void 0 === this.exists;
|
|
@@ -2597,14 +2596,14 @@ function mn(t, n) {
|
|
|
2597
2596
|
* applyToLocalView() to implement the actual behavior of applying the mutation
|
|
2598
2597
|
* to some source document (see `setMutationApplyToRemoteDocument()` for an
|
|
2599
2598
|
* example).
|
|
2600
|
-
*/ class
|
|
2599
|
+
*/ class Ee {}
|
|
2601
2600
|
|
|
2602
2601
|
/**
|
|
2603
2602
|
* A mutation that creates or replaces the document at the given key with the
|
|
2604
2603
|
* object value contents.
|
|
2605
|
-
*/ class
|
|
2606
|
-
constructor(t,
|
|
2607
|
-
super(), this.key = t, this.value =
|
|
2604
|
+
*/ class Te extends Ee {
|
|
2605
|
+
constructor(t, e, n, r = []) {
|
|
2606
|
+
super(), this.key = t, this.value = e, this.precondition = n, this.fieldTransforms = r,
|
|
2608
2607
|
this.type = 0 /* Set */;
|
|
2609
2608
|
}
|
|
2610
2609
|
}
|
|
@@ -2621,16 +2620,16 @@ function mn(t, n) {
|
|
|
2621
2620
|
* is deleted.
|
|
2622
2621
|
* * When a field is not in the mask but is in the values, the values map is
|
|
2623
2622
|
* ignored.
|
|
2624
|
-
*/ class
|
|
2625
|
-
constructor(t,
|
|
2626
|
-
super(), this.key = t, this.data =
|
|
2623
|
+
*/ class Ie extends Ee {
|
|
2624
|
+
constructor(t, e, n, r, s = []) {
|
|
2625
|
+
super(), this.key = t, this.data = e, this.fieldMask = n, this.precondition = r,
|
|
2627
2626
|
this.fieldTransforms = s, this.type = 1 /* Patch */;
|
|
2628
2627
|
}
|
|
2629
2628
|
}
|
|
2630
2629
|
|
|
2631
|
-
/** A mutation that deletes the document at the given key. */ class
|
|
2632
|
-
constructor(t,
|
|
2633
|
-
super(), this.key = t, this.precondition =
|
|
2630
|
+
/** A mutation that deletes the document at the given key. */ class Ae extends Ee {
|
|
2631
|
+
constructor(t, e) {
|
|
2632
|
+
super(), this.key = t, this.precondition = e, this.type = 2 /* Delete */ , this.fieldTransforms = [];
|
|
2634
2633
|
}
|
|
2635
2634
|
}
|
|
2636
2635
|
|
|
@@ -2640,9 +2639,9 @@ function mn(t, n) {
|
|
|
2640
2639
|
*
|
|
2641
2640
|
* The `verify` operation is only used in Transactions, and this class serves
|
|
2642
2641
|
* primarily to facilitate serialization into protos.
|
|
2643
|
-
*/ class
|
|
2644
|
-
constructor(t,
|
|
2645
|
-
super(), this.key = t, this.precondition =
|
|
2642
|
+
*/ class Re extends Ee {
|
|
2643
|
+
constructor(t, e) {
|
|
2644
|
+
super(), this.key = t, this.precondition = e, this.type = 3 /* Verify */ , this.fieldTransforms = [];
|
|
2646
2645
|
}
|
|
2647
2646
|
}
|
|
2648
2647
|
|
|
@@ -2661,13 +2660,13 @@ function mn(t, n) {
|
|
|
2661
2660
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2662
2661
|
* See the License for the specific language governing permissions and
|
|
2663
2662
|
* limitations under the License.
|
|
2664
|
-
*/ const
|
|
2663
|
+
*/ const Pe = (() => {
|
|
2665
2664
|
const t = {
|
|
2666
2665
|
asc: "ASCENDING",
|
|
2667
2666
|
desc: "DESCENDING"
|
|
2668
2667
|
};
|
|
2669
2668
|
return t;
|
|
2670
|
-
})(),
|
|
2669
|
+
})(), Ve = (() => {
|
|
2671
2670
|
const t = {
|
|
2672
2671
|
"<": "LESS_THAN",
|
|
2673
2672
|
"<=": "LESS_THAN_OR_EQUAL",
|
|
@@ -2697,9 +2696,9 @@ function mn(t, n) {
|
|
|
2697
2696
|
* TODO(klimt): We can remove the databaseId argument if we keep the full
|
|
2698
2697
|
* resource name in documents.
|
|
2699
2698
|
*/
|
|
2700
|
-
class
|
|
2701
|
-
constructor(t,
|
|
2702
|
-
this.databaseId = t, this.F =
|
|
2699
|
+
class De {
|
|
2700
|
+
constructor(t, e) {
|
|
2701
|
+
this.databaseId = t, this.F = e;
|
|
2703
2702
|
}
|
|
2704
2703
|
}
|
|
2705
2704
|
|
|
@@ -2714,13 +2713,13 @@ class Nn {
|
|
|
2714
2713
|
/**
|
|
2715
2714
|
* Returns a value for a Date that's appropriate to put into a proto.
|
|
2716
2715
|
*/
|
|
2717
|
-
function
|
|
2716
|
+
function Ne(t, e) {
|
|
2718
2717
|
if (t.F) {
|
|
2719
|
-
return `${new Date(1e3 *
|
|
2718
|
+
return `${new Date(1e3 * e.seconds).toISOString().replace(/\.\d*/, "").replace("Z", "")}.${("000000000" + e.nanoseconds).slice(-9)}Z`;
|
|
2720
2719
|
}
|
|
2721
2720
|
return {
|
|
2722
|
-
seconds: "" +
|
|
2723
|
-
nanos:
|
|
2721
|
+
seconds: "" + e.seconds,
|
|
2722
|
+
nanos: e.nanoseconds
|
|
2724
2723
|
};
|
|
2725
2724
|
}
|
|
2726
2725
|
|
|
@@ -2729,232 +2728,234 @@ function $n(t, n) {
|
|
|
2729
2728
|
*
|
|
2730
2729
|
* Visible for testing.
|
|
2731
2730
|
*/
|
|
2732
|
-
function
|
|
2733
|
-
return t.F ?
|
|
2731
|
+
function $e(t, e) {
|
|
2732
|
+
return t.F ? e.toBase64() : e.toUint8Array();
|
|
2734
2733
|
}
|
|
2735
2734
|
|
|
2736
|
-
function
|
|
2737
|
-
return
|
|
2735
|
+
function Se(t, e) {
|
|
2736
|
+
return Ne(t, e.toTimestamp());
|
|
2738
2737
|
}
|
|
2739
2738
|
|
|
2740
|
-
function
|
|
2739
|
+
function Fe(t) {
|
|
2741
2740
|
return v(!!t), vt.fromTimestamp(function(t) {
|
|
2742
|
-
const
|
|
2743
|
-
return new gt(
|
|
2741
|
+
const e = Rt(t);
|
|
2742
|
+
return new gt(e.seconds, e.nanos);
|
|
2744
2743
|
}(t));
|
|
2745
2744
|
}
|
|
2746
2745
|
|
|
2747
|
-
function
|
|
2746
|
+
function xe(t, e) {
|
|
2748
2747
|
return function(t) {
|
|
2749
2748
|
return new X([ "projects", t.projectId, "databases", t.database ]);
|
|
2750
|
-
}(t).child("documents").child(
|
|
2749
|
+
}(t).child("documents").child(e).canonicalString();
|
|
2751
2750
|
}
|
|
2752
2751
|
|
|
2753
|
-
function
|
|
2754
|
-
return
|
|
2752
|
+
function qe(t, e) {
|
|
2753
|
+
return xe(t.databaseId, e.path);
|
|
2755
2754
|
}
|
|
2756
2755
|
|
|
2757
|
-
function
|
|
2758
|
-
const
|
|
2759
|
-
const
|
|
2760
|
-
return v(
|
|
2761
|
-
}(
|
|
2762
|
-
if (
|
|
2763
|
-
if (
|
|
2764
|
-
return new
|
|
2756
|
+
function Oe(t, e) {
|
|
2757
|
+
const n = function(t) {
|
|
2758
|
+
const e = X.fromString(t);
|
|
2759
|
+
return v(We(e)), e;
|
|
2760
|
+
}(e);
|
|
2761
|
+
if (n.get(1) !== t.databaseId.projectId) throw new U(A, "Tried to deserialize key from different project: " + n.get(1) + " vs " + t.databaseId.projectId);
|
|
2762
|
+
if (n.get(3) !== t.databaseId.database) throw new U(A, "Tried to deserialize key from different database: " + n.get(3) + " vs " + t.databaseId.database);
|
|
2763
|
+
return new et((v((r = n).length > 4 && "documents" === r.get(4)), r.popFirst(5)));
|
|
2765
2764
|
var r;
|
|
2766
2765
|
/** Creates a Document proto from key and fields (but no create/update time) */}
|
|
2767
2766
|
|
|
2768
|
-
function
|
|
2769
|
-
return
|
|
2767
|
+
function Ce(t, e) {
|
|
2768
|
+
return xe(t.databaseId, e);
|
|
2770
2769
|
}
|
|
2771
2770
|
|
|
2772
|
-
function
|
|
2771
|
+
function Le(t) {
|
|
2773
2772
|
return new X([ "projects", t.databaseId.projectId, "databases", t.databaseId.database ]).canonicalString();
|
|
2774
2773
|
}
|
|
2775
2774
|
|
|
2776
|
-
function
|
|
2775
|
+
function Ue(t, e, n) {
|
|
2777
2776
|
return {
|
|
2778
|
-
name:
|
|
2779
|
-
fields:
|
|
2777
|
+
name: qe(t, e),
|
|
2778
|
+
fields: n.value.mapValue.fields
|
|
2780
2779
|
};
|
|
2781
2780
|
}
|
|
2782
2781
|
|
|
2783
|
-
function
|
|
2784
|
-
return "found" in
|
|
2785
|
-
v(!!
|
|
2786
|
-
const
|
|
2782
|
+
function ke(t, e) {
|
|
2783
|
+
return "found" in e ? function(t, e) {
|
|
2784
|
+
v(!!e.found), e.found.name, e.found.updateTime;
|
|
2785
|
+
const n = Oe(t, e.found.name), r = Fe(e.found.updateTime), s = new Bt({
|
|
2787
2786
|
mapValue: {
|
|
2788
|
-
fields:
|
|
2787
|
+
fields: e.found.fields
|
|
2789
2788
|
}
|
|
2790
2789
|
});
|
|
2791
|
-
return zt.newFoundDocument(
|
|
2792
|
-
}(t,
|
|
2793
|
-
v(!!
|
|
2794
|
-
const
|
|
2795
|
-
return zt.newNoDocument(
|
|
2796
|
-
}(t,
|
|
2797
|
-
}
|
|
2798
|
-
|
|
2799
|
-
function
|
|
2800
|
-
let
|
|
2801
|
-
if (
|
|
2802
|
-
update:
|
|
2803
|
-
}; else if (
|
|
2804
|
-
delete:
|
|
2805
|
-
}; else if (
|
|
2806
|
-
update:
|
|
2807
|
-
updateMask:
|
|
2790
|
+
return zt.newFoundDocument(n, r, s);
|
|
2791
|
+
}(t, e) : "missing" in e ? function(t, e) {
|
|
2792
|
+
v(!!e.missing), v(!!e.readTime);
|
|
2793
|
+
const n = Oe(t, e.missing), r = Fe(e.readTime);
|
|
2794
|
+
return zt.newNoDocument(n, r);
|
|
2795
|
+
}(t, e) : g();
|
|
2796
|
+
}
|
|
2797
|
+
|
|
2798
|
+
function je(t, e) {
|
|
2799
|
+
let n;
|
|
2800
|
+
if (e instanceof Te) n = {
|
|
2801
|
+
update: Ue(t, e.key, e.value)
|
|
2802
|
+
}; else if (e instanceof Ae) n = {
|
|
2803
|
+
delete: qe(t, e.key)
|
|
2804
|
+
}; else if (e instanceof Ie) n = {
|
|
2805
|
+
update: Ue(t, e.key, e.data),
|
|
2806
|
+
updateMask: Qe(e.fieldMask)
|
|
2808
2807
|
}; else {
|
|
2809
|
-
if (!(
|
|
2810
|
-
|
|
2811
|
-
verify:
|
|
2808
|
+
if (!(e instanceof Re)) return g();
|
|
2809
|
+
n = {
|
|
2810
|
+
verify: qe(t, e.key)
|
|
2812
2811
|
};
|
|
2813
2812
|
}
|
|
2814
|
-
return
|
|
2815
|
-
const
|
|
2816
|
-
if (
|
|
2817
|
-
fieldPath:
|
|
2813
|
+
return e.fieldTransforms.length > 0 && (n.updateTransforms = e.fieldTransforms.map((t => function(t, e) {
|
|
2814
|
+
const n = e.transform;
|
|
2815
|
+
if (n instanceof pe) return {
|
|
2816
|
+
fieldPath: e.field.canonicalString(),
|
|
2818
2817
|
setToServerValue: "REQUEST_TIME"
|
|
2819
2818
|
};
|
|
2820
|
-
if (
|
|
2821
|
-
fieldPath:
|
|
2819
|
+
if (n instanceof ye) return {
|
|
2820
|
+
fieldPath: e.field.canonicalString(),
|
|
2822
2821
|
appendMissingElements: {
|
|
2823
|
-
values:
|
|
2822
|
+
values: n.elements
|
|
2824
2823
|
}
|
|
2825
2824
|
};
|
|
2826
|
-
if (
|
|
2827
|
-
fieldPath:
|
|
2825
|
+
if (n instanceof _e) return {
|
|
2826
|
+
fieldPath: e.field.canonicalString(),
|
|
2828
2827
|
removeAllFromArray: {
|
|
2829
|
-
values:
|
|
2828
|
+
values: n.elements
|
|
2830
2829
|
}
|
|
2831
2830
|
};
|
|
2832
|
-
if (
|
|
2833
|
-
fieldPath:
|
|
2834
|
-
increment:
|
|
2831
|
+
if (n instanceof ge) return {
|
|
2832
|
+
fieldPath: e.field.canonicalString(),
|
|
2833
|
+
increment: n.O
|
|
2835
2834
|
};
|
|
2836
2835
|
throw g();
|
|
2837
|
-
}(0, t)))),
|
|
2838
|
-
return void 0 !==
|
|
2839
|
-
updateTime:
|
|
2840
|
-
} : void 0 !==
|
|
2841
|
-
exists:
|
|
2836
|
+
}(0, t)))), e.precondition.isNone || (n.currentDocument = function(t, e) {
|
|
2837
|
+
return void 0 !== e.updateTime ? {
|
|
2838
|
+
updateTime: Se(t, e.updateTime)
|
|
2839
|
+
} : void 0 !== e.exists ? {
|
|
2840
|
+
exists: e.exists
|
|
2842
2841
|
} : g();
|
|
2843
|
-
}(t,
|
|
2842
|
+
}(t, e.precondition)), n;
|
|
2844
2843
|
}
|
|
2845
2844
|
|
|
2846
|
-
function
|
|
2845
|
+
function Me(t, e) {
|
|
2847
2846
|
// Dissect the path into parent, collectionId, and optional key filter.
|
|
2848
|
-
const
|
|
2847
|
+
const n = {
|
|
2849
2848
|
structuredQuery: {}
|
|
2850
|
-
}, r =
|
|
2851
|
-
null !==
|
|
2852
|
-
collectionId:
|
|
2849
|
+
}, r = e.path;
|
|
2850
|
+
null !== e.collectionGroup ? (n.parent = Ce(t, r), n.structuredQuery.from = [ {
|
|
2851
|
+
collectionId: e.collectionGroup,
|
|
2853
2852
|
allDescendants: !0
|
|
2854
|
-
} ]) : (
|
|
2853
|
+
} ]) : (n.parent = Ce(t, r.popLast()), n.structuredQuery.from = [ {
|
|
2855
2854
|
collectionId: r.lastSegment()
|
|
2856
2855
|
} ]);
|
|
2857
2856
|
const s = function(t) {
|
|
2858
2857
|
if (0 === t.length) return;
|
|
2859
|
-
const
|
|
2858
|
+
const e = t.map((t =>
|
|
2860
2859
|
// visible for testing
|
|
2861
2860
|
function(t) {
|
|
2862
2861
|
if ("==" /* EQUAL */ === t.op) {
|
|
2863
2862
|
if (kt(t.value)) return {
|
|
2864
2863
|
unaryFilter: {
|
|
2865
|
-
field:
|
|
2864
|
+
field: Ge(t.field),
|
|
2866
2865
|
op: "IS_NAN"
|
|
2867
2866
|
}
|
|
2868
2867
|
};
|
|
2869
2868
|
if (Ut(t.value)) return {
|
|
2870
2869
|
unaryFilter: {
|
|
2871
|
-
field:
|
|
2870
|
+
field: Ge(t.field),
|
|
2872
2871
|
op: "IS_NULL"
|
|
2873
2872
|
}
|
|
2874
2873
|
};
|
|
2875
2874
|
} else if ("!=" /* NOT_EQUAL */ === t.op) {
|
|
2876
2875
|
if (kt(t.value)) return {
|
|
2877
2876
|
unaryFilter: {
|
|
2878
|
-
field:
|
|
2877
|
+
field: Ge(t.field),
|
|
2879
2878
|
op: "IS_NOT_NAN"
|
|
2880
2879
|
}
|
|
2881
2880
|
};
|
|
2882
2881
|
if (Ut(t.value)) return {
|
|
2883
2882
|
unaryFilter: {
|
|
2884
|
-
field:
|
|
2883
|
+
field: Ge(t.field),
|
|
2885
2884
|
op: "IS_NOT_NULL"
|
|
2886
2885
|
}
|
|
2887
2886
|
};
|
|
2888
2887
|
}
|
|
2889
2888
|
return {
|
|
2890
2889
|
fieldFilter: {
|
|
2891
|
-
field:
|
|
2892
|
-
op:
|
|
2890
|
+
field: Ge(t.field),
|
|
2891
|
+
op: ze(t.op),
|
|
2893
2892
|
value: t.value
|
|
2894
2893
|
}
|
|
2895
2894
|
};
|
|
2896
2895
|
}(t)));
|
|
2897
|
-
if (1 ===
|
|
2896
|
+
if (1 === e.length) return e[0];
|
|
2898
2897
|
return {
|
|
2899
2898
|
compositeFilter: {
|
|
2900
2899
|
op: "AND",
|
|
2901
|
-
filters:
|
|
2900
|
+
filters: e
|
|
2902
2901
|
}
|
|
2903
2902
|
};
|
|
2904
|
-
}(
|
|
2905
|
-
s && (
|
|
2903
|
+
}(e.filters);
|
|
2904
|
+
s && (n.structuredQuery.where = s);
|
|
2906
2905
|
const i = function(t) {
|
|
2907
2906
|
if (0 === t.length) return;
|
|
2908
2907
|
return t.map((t =>
|
|
2909
2908
|
// visible for testing
|
|
2910
2909
|
function(t) {
|
|
2911
2910
|
return {
|
|
2912
|
-
field:
|
|
2913
|
-
direction:
|
|
2911
|
+
field: Ge(t.field),
|
|
2912
|
+
direction: Be(t.dir)
|
|
2914
2913
|
};
|
|
2915
2914
|
}(t)));
|
|
2916
|
-
}(
|
|
2917
|
-
i && (
|
|
2918
|
-
const o = function(t,
|
|
2919
|
-
return t.F || ct(
|
|
2920
|
-
value:
|
|
2915
|
+
}(e.orderBy);
|
|
2916
|
+
i && (n.structuredQuery.orderBy = i);
|
|
2917
|
+
const o = function(t, e) {
|
|
2918
|
+
return t.F || ct(e) ? e : {
|
|
2919
|
+
value: e
|
|
2921
2920
|
};
|
|
2922
|
-
}(t,
|
|
2923
|
-
|
|
2924
|
-
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2921
|
+
}(t, e.limit);
|
|
2922
|
+
var u;
|
|
2923
|
+
return null !== o && (n.structuredQuery.limit = o), e.startAt && (n.structuredQuery.startAt = {
|
|
2924
|
+
before: (u = e.startAt).inclusive,
|
|
2925
|
+
values: u.position
|
|
2926
|
+
}), e.endAt && (n.structuredQuery.endAt = function(t) {
|
|
2927
|
+
return {
|
|
2928
|
+
before: !t.inclusive,
|
|
2929
|
+
values: t.position
|
|
2930
|
+
};
|
|
2931
|
+
}
|
|
2932
|
+
// visible for testing
|
|
2933
|
+
(e.endAt)), n;
|
|
2932
2934
|
}
|
|
2933
2935
|
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
|
-
return Vn[t];
|
|
2936
|
+
function Be(t) {
|
|
2937
|
+
return Pe[t];
|
|
2937
2938
|
}
|
|
2938
2939
|
|
|
2939
2940
|
// visible for testing
|
|
2940
|
-
function
|
|
2941
|
-
return
|
|
2941
|
+
function ze(t) {
|
|
2942
|
+
return Ve[t];
|
|
2942
2943
|
}
|
|
2943
2944
|
|
|
2944
|
-
function
|
|
2945
|
+
function Ge(t) {
|
|
2945
2946
|
return {
|
|
2946
2947
|
fieldPath: t.canonicalString()
|
|
2947
2948
|
};
|
|
2948
2949
|
}
|
|
2949
2950
|
|
|
2950
|
-
function
|
|
2951
|
-
const
|
|
2952
|
-
return t.fields.forEach((t =>
|
|
2953
|
-
fieldPaths:
|
|
2951
|
+
function Qe(t) {
|
|
2952
|
+
const e = [];
|
|
2953
|
+
return t.fields.forEach((t => e.push(t.canonicalString()))), {
|
|
2954
|
+
fieldPaths: e
|
|
2954
2955
|
};
|
|
2955
2956
|
}
|
|
2956
2957
|
|
|
2957
|
-
function
|
|
2958
|
+
function We(t) {
|
|
2958
2959
|
// Resource names have at least 4 components (project ID, database ID)
|
|
2959
2960
|
return t.length >= 4 && "projects" === t.get(0) && "databases" === t.get(2);
|
|
2960
2961
|
}
|
|
@@ -2974,8 +2975,8 @@ function Hn(t) {
|
|
|
2974
2975
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2975
2976
|
* See the License for the specific language governing permissions and
|
|
2976
2977
|
* limitations under the License.
|
|
2977
|
-
*/ function
|
|
2978
|
-
return new
|
|
2978
|
+
*/ function Ye(t) {
|
|
2979
|
+
return new De(t, /* useProto3Json= */ !0);
|
|
2979
2980
|
}
|
|
2980
2981
|
|
|
2981
2982
|
/**
|
|
@@ -3003,7 +3004,7 @@ function Hn(t) {
|
|
|
3003
3004
|
* base delay. This prevents clients from accidentally synchronizing their
|
|
3004
3005
|
* delays causing spikes of load to the backend.
|
|
3005
3006
|
*/
|
|
3006
|
-
class
|
|
3007
|
+
class He {
|
|
3007
3008
|
constructor(
|
|
3008
3009
|
/**
|
|
3009
3010
|
* The AsyncQueue to run backoff operations on.
|
|
@@ -3012,13 +3013,13 @@ class Jn {
|
|
|
3012
3013
|
/**
|
|
3013
3014
|
* The ID to use when scheduling backoff operations on the AsyncQueue.
|
|
3014
3015
|
*/
|
|
3015
|
-
|
|
3016
|
+
e,
|
|
3016
3017
|
/**
|
|
3017
3018
|
* The initial delay (used as the base delay on the first retry attempt).
|
|
3018
3019
|
* Note that jitter will still be applied, so the actual delay could be as
|
|
3019
3020
|
* little as 0.5*initialDelayMs.
|
|
3020
3021
|
*/
|
|
3021
|
-
|
|
3022
|
+
n = 1e3
|
|
3022
3023
|
/**
|
|
3023
3024
|
* The multiplier to use to determine the extended base delay after each
|
|
3024
3025
|
* attempt.
|
|
@@ -3028,7 +3029,7 @@ class Jn {
|
|
|
3028
3029
|
* Note that jitter will still be applied, so the actual delay could be as
|
|
3029
3030
|
* much as 1.5*maxDelayMs.
|
|
3030
3031
|
*/ , s = 6e4) {
|
|
3031
|
-
this.C = t, this.timerId =
|
|
3032
|
+
this.C = t, this.timerId = e, this.L = n, this.U = r, this.k = s, this.j = 0, this.M = null,
|
|
3032
3033
|
/** The last backoff attempt, as epoch milliseconds. */
|
|
3033
3034
|
this.B = Date.now(), this.reset();
|
|
3034
3035
|
}
|
|
@@ -3056,9 +3057,9 @@ class Jn {
|
|
|
3056
3057
|
this.cancel();
|
|
3057
3058
|
// First schedule using the current base (which may be 0 and should be
|
|
3058
3059
|
// honored as such).
|
|
3059
|
-
const
|
|
3060
|
+
const e = Math.floor(this.j + this.Y()), n = Math.max(0, Date.now() - this.B), r = Math.max(0, e - n);
|
|
3060
3061
|
// Guard against lastAttemptTime being in the future due to a clock change.
|
|
3061
|
-
r > 0 && m("ExponentialBackoff", `Backing off for ${r} ms (base delay: ${this.j} ms, delay with jitter: ${
|
|
3062
|
+
r > 0 && m("ExponentialBackoff", `Backing off for ${r} ms (base delay: ${this.j} ms, delay with jitter: ${e} ms, last attempt: ${n} ms ago)`),
|
|
3062
3063
|
this.M = this.C.enqueueAfterDelay(this.timerId, r, (() => (this.B = Date.now(),
|
|
3063
3064
|
t()))),
|
|
3064
3065
|
// Apply backoff factor to determine next delay and ensure it is within
|
|
@@ -3101,22 +3102,22 @@ class Jn {
|
|
|
3101
3102
|
* An implementation of Datastore that exposes additional state for internal
|
|
3102
3103
|
* consumption.
|
|
3103
3104
|
*/
|
|
3104
|
-
class
|
|
3105
|
-
constructor(t,
|
|
3106
|
-
super(), this.authCredentials = t, this.appCheckCredentials =
|
|
3105
|
+
class Ke extends class {} {
|
|
3106
|
+
constructor(t, e, n, r) {
|
|
3107
|
+
super(), this.authCredentials = t, this.appCheckCredentials = e, this.K = n, this.q = r,
|
|
3107
3108
|
this.J = !1;
|
|
3108
3109
|
}
|
|
3109
3110
|
X() {
|
|
3110
3111
|
if (this.J) throw new U(S, "The client has already been terminated.");
|
|
3111
3112
|
}
|
|
3112
|
-
/** Invokes the provided RPC with auth and AppCheck tokens. */ m(t,
|
|
3113
|
-
return this.X(), Promise.all([ this.authCredentials.getToken(), this.appCheckCredentials.getToken() ]).then((([r, s]) => this.K.m(t,
|
|
3113
|
+
/** Invokes the provided RPC with auth and AppCheck tokens. */ m(t, e, n) {
|
|
3114
|
+
return this.X(), Promise.all([ this.authCredentials.getToken(), this.appCheckCredentials.getToken() ]).then((([r, s]) => this.K.m(t, e, n, r, s))).catch((t => {
|
|
3114
3115
|
throw "FirebaseError" === t.name ? (t.code === N && (this.authCredentials.invalidateToken(),
|
|
3115
3116
|
this.appCheckCredentials.invalidateToken()), t) : new U(I, t.toString());
|
|
3116
3117
|
}));
|
|
3117
3118
|
}
|
|
3118
|
-
/** Invokes the provided RPC with streamed results with auth and AppCheck tokens. */ T(t,
|
|
3119
|
-
return this.X(), Promise.all([ this.authCredentials.getToken(), this.appCheckCredentials.getToken() ]).then((([r, s]) => this.K.T(t,
|
|
3119
|
+
/** Invokes the provided RPC with streamed results with auth and AppCheck tokens. */ T(t, e, n) {
|
|
3120
|
+
return this.X(), Promise.all([ this.authCredentials.getToken(), this.appCheckCredentials.getToken() ]).then((([r, s]) => this.K.T(t, e, n, r, s))).catch((t => {
|
|
3120
3121
|
throw "FirebaseError" === t.name ? (t.code === N && (this.authCredentials.invalidateToken(),
|
|
3121
3122
|
this.appCheckCredentials.invalidateToken()), t) : new U(I, t.toString());
|
|
3122
3123
|
}));
|
|
@@ -3128,40 +3129,40 @@ class Xn extends class {} {
|
|
|
3128
3129
|
|
|
3129
3130
|
// TODO(firestorexp): Make sure there is only one Datastore instance per
|
|
3130
3131
|
// firestore-exp client.
|
|
3131
|
-
async function
|
|
3132
|
-
const
|
|
3133
|
-
writes:
|
|
3132
|
+
async function Je(t, e) {
|
|
3133
|
+
const n = b(t), r = Le(n.q) + "/documents", s = {
|
|
3134
|
+
writes: e.map((t => je(n.q, t)))
|
|
3134
3135
|
};
|
|
3135
|
-
await
|
|
3136
|
+
await n.m("Commit", r, s);
|
|
3136
3137
|
}
|
|
3137
3138
|
|
|
3138
|
-
async function
|
|
3139
|
-
const
|
|
3140
|
-
documents:
|
|
3141
|
-
}, i = await
|
|
3139
|
+
async function Xe(t, e) {
|
|
3140
|
+
const n = b(t), r = Le(n.q) + "/documents", s = {
|
|
3141
|
+
documents: e.map((t => qe(n.q, t)))
|
|
3142
|
+
}, i = await n.T("BatchGetDocuments", r, s), o = new Map;
|
|
3142
3143
|
i.forEach((t => {
|
|
3143
|
-
const
|
|
3144
|
-
o.set(
|
|
3144
|
+
const e = ke(n.q, t);
|
|
3145
|
+
o.set(e.key.toString(), e);
|
|
3145
3146
|
}));
|
|
3146
3147
|
const u = [];
|
|
3147
|
-
return
|
|
3148
|
-
const
|
|
3149
|
-
v(!!
|
|
3148
|
+
return e.forEach((t => {
|
|
3149
|
+
const e = o.get(t.toString());
|
|
3150
|
+
v(!!e), u.push(e);
|
|
3150
3151
|
})), u;
|
|
3151
3152
|
}
|
|
3152
3153
|
|
|
3153
|
-
async function
|
|
3154
|
-
const
|
|
3155
|
-
return (await
|
|
3154
|
+
async function Ze(t, e) {
|
|
3155
|
+
const n = b(t), r = Me(n.q, fe(e));
|
|
3156
|
+
return (await n.T("RunQuery", r.parent, {
|
|
3156
3157
|
structuredQuery: r.structuredQuery
|
|
3157
|
-
})).filter((t => !!t.document)).map((t => function(t,
|
|
3158
|
-
const r =
|
|
3158
|
+
})).filter((t => !!t.document)).map((t => function(t, e, n) {
|
|
3159
|
+
const r = Oe(t, e.name), s = Fe(e.updateTime), i = new Bt({
|
|
3159
3160
|
mapValue: {
|
|
3160
|
-
fields:
|
|
3161
|
+
fields: e.fields
|
|
3161
3162
|
}
|
|
3162
3163
|
}), o = zt.newFoundDocument(r, s, i);
|
|
3163
|
-
return
|
|
3164
|
-
}(
|
|
3164
|
+
return n && o.setHasCommittedMutations(), n ? o.setHasCommittedMutations() : o;
|
|
3165
|
+
}(n.q, t.document, void 0)));
|
|
3165
3166
|
}
|
|
3166
3167
|
|
|
3167
3168
|
/**
|
|
@@ -3179,7 +3180,7 @@ async function ne(t, n) {
|
|
|
3179
3180
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3180
3181
|
* See the License for the specific language governing permissions and
|
|
3181
3182
|
* limitations under the License.
|
|
3182
|
-
*/ const
|
|
3183
|
+
*/ const tn = new Map;
|
|
3183
3184
|
|
|
3184
3185
|
/**
|
|
3185
3186
|
* An instance map that ensures only one Datastore exists per Firestore
|
|
@@ -3190,19 +3191,19 @@ async function ne(t, n) {
|
|
|
3190
3191
|
* instance. Callers must invoke removeComponents() when the Firestore
|
|
3191
3192
|
* instance is terminated.
|
|
3192
3193
|
*/
|
|
3193
|
-
function
|
|
3194
|
+
function en(t) {
|
|
3194
3195
|
if (t._terminated) throw new U(S, "The client has already been terminated.");
|
|
3195
|
-
if (!
|
|
3196
|
+
if (!tn.has(t)) {
|
|
3196
3197
|
m("ComponentProvider", "Initializing Datastore");
|
|
3197
3198
|
const i = function(t) {
|
|
3198
3199
|
return new wt(t, fetch.bind(null));
|
|
3199
|
-
}((
|
|
3200
|
-
new H(
|
|
3201
|
-
return new
|
|
3200
|
+
}((e = t._databaseId, n = t.app.options.appId || "", r = t._persistenceKey, s = t._freezeSettings(),
|
|
3201
|
+
new H(e, n, r, s.host, s.ssl, s.experimentalForceLongPolling, s.experimentalAutoDetectLongPolling, s.useFetchStreams))), o = Ye(t._databaseId), u = function(t, e, n, r) {
|
|
3202
|
+
return new Ke(t, e, n, r);
|
|
3202
3203
|
}(t._authCredentials, t._appCheckCredentials, i, o);
|
|
3203
|
-
|
|
3204
|
+
tn.set(t, u);
|
|
3204
3205
|
}
|
|
3205
|
-
var
|
|
3206
|
+
var e, n, r, s;
|
|
3206
3207
|
/**
|
|
3207
3208
|
* @license
|
|
3208
3209
|
* Copyright 2018 Google LLC
|
|
@@ -3218,7 +3219,7 @@ function re(t) {
|
|
|
3218
3219
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3219
3220
|
* See the License for the specific language governing permissions and
|
|
3220
3221
|
* limitations under the License.
|
|
3221
|
-
*/ return
|
|
3222
|
+
*/ return tn.get(t);
|
|
3222
3223
|
}
|
|
3223
3224
|
|
|
3224
3225
|
/**
|
|
@@ -3230,21 +3231,21 @@ function re(t) {
|
|
|
3230
3231
|
* user-supplied `FirestoreSettings` object. This is a separate type so that
|
|
3231
3232
|
* defaults can be supplied and the value can be checked for equality.
|
|
3232
3233
|
*/
|
|
3233
|
-
class
|
|
3234
|
+
class nn {
|
|
3234
3235
|
constructor(t) {
|
|
3235
|
-
var
|
|
3236
|
+
var e;
|
|
3236
3237
|
if (void 0 === t.host) {
|
|
3237
3238
|
if (void 0 !== t.ssl) throw new U(A, "Can't provide ssl option if host option is not set");
|
|
3238
3239
|
this.host = "firestore.googleapis.com", this.ssl = true;
|
|
3239
|
-
} else this.host = t.host, this.ssl = null === (
|
|
3240
|
+
} else this.host = t.host, this.ssl = null === (e = t.ssl) || void 0 === e || e;
|
|
3240
3241
|
if (this.credentials = t.credentials, this.ignoreUndefinedProperties = !!t.ignoreUndefinedProperties,
|
|
3241
3242
|
void 0 === t.cacheSizeBytes) this.cacheSizeBytes = 41943040; else {
|
|
3242
3243
|
if (-1 !== t.cacheSizeBytes && t.cacheSizeBytes < 1048576) throw new U(A, "cacheSizeBytes must be at least 1048576");
|
|
3243
3244
|
this.cacheSizeBytes = t.cacheSizeBytes;
|
|
3244
3245
|
}
|
|
3245
3246
|
this.experimentalForceLongPolling = !!t.experimentalForceLongPolling, this.experimentalAutoDetectLongPolling = !!t.experimentalAutoDetectLongPolling,
|
|
3246
|
-
this.useFetchStreams = !!t.useFetchStreams, function(t,
|
|
3247
|
-
if (!0 ===
|
|
3247
|
+
this.useFetchStreams = !!t.useFetchStreams, function(t, e, n, r) {
|
|
3248
|
+
if (!0 === e && !0 === r) throw new U(A, `${t} and ${n} cannot be used together.`);
|
|
3248
3249
|
}("experimentalForceLongPolling", t.experimentalForceLongPolling, "experimentalAutoDetectLongPolling", t.experimentalAutoDetectLongPolling);
|
|
3249
3250
|
}
|
|
3250
3251
|
isEqual(t) {
|
|
@@ -3272,14 +3273,14 @@ class se {
|
|
|
3272
3273
|
* The Cloud Firestore service interface.
|
|
3273
3274
|
*
|
|
3274
3275
|
* Do not call this constructor directly. Instead, use {@link getFirestore}.
|
|
3275
|
-
*/ class
|
|
3276
|
+
*/ class rn {
|
|
3276
3277
|
/** @hideconstructor */
|
|
3277
|
-
constructor(t,
|
|
3278
|
-
this._authCredentials =
|
|
3278
|
+
constructor(t, e, n) {
|
|
3279
|
+
this._authCredentials = e, this._appCheckCredentials = n,
|
|
3279
3280
|
/**
|
|
3280
3281
|
* Whether it's a Firestore or Firestore Lite instance.
|
|
3281
3282
|
*/
|
|
3282
|
-
this.type = "firestore-lite", this._persistenceKey = "(lite)", this._settings = new
|
|
3283
|
+
this.type = "firestore-lite", this._persistenceKey = "(lite)", this._settings = new nn({}),
|
|
3283
3284
|
this._settingsFrozen = !1, t instanceof K ? this._databaseId = t : (this._app = t,
|
|
3284
3285
|
this._databaseId = function(t) {
|
|
3285
3286
|
if (!Object.prototype.hasOwnProperty.apply(t.options, [ "projectId" ])) throw new U(A, '"projectId" not provided in firebase.initializeApp.');
|
|
@@ -3312,14 +3313,14 @@ class se {
|
|
|
3312
3313
|
}
|
|
3313
3314
|
_setSettings(t) {
|
|
3314
3315
|
if (this._settingsFrozen) throw new U(S, "Firestore has already been started and its settings can no longer be changed. You can only modify settings before calling any other methods on a Firestore object.");
|
|
3315
|
-
this._settings = new
|
|
3316
|
+
this._settings = new nn(t), void 0 !== t.credentials && (this._authCredentials = function(t) {
|
|
3316
3317
|
if (!t) return new M;
|
|
3317
3318
|
switch (t.type) {
|
|
3318
3319
|
case "gapi":
|
|
3319
|
-
const
|
|
3320
|
+
const e = t.client;
|
|
3320
3321
|
// Make sure this really is a Gapi client.
|
|
3321
|
-
return v(!("object" != typeof
|
|
3322
|
-
new Q(
|
|
3322
|
+
return v(!("object" != typeof e || null === e || !e.auth || !e.auth.getAuthHeaderValueForFirstParty)),
|
|
3323
|
+
new Q(e, t.sessionIndex || "0", t.iamToken || null);
|
|
3323
3324
|
|
|
3324
3325
|
case "provider":
|
|
3325
3326
|
return t.client;
|
|
@@ -3353,17 +3354,17 @@ class se {
|
|
|
3353
3354
|
* Only ever called once.
|
|
3354
3355
|
*/ _terminate() {
|
|
3355
3356
|
return function(t) {
|
|
3356
|
-
const
|
|
3357
|
-
|
|
3357
|
+
const e = tn.get(t);
|
|
3358
|
+
e && (m("ComponentProvider", "Removing Datastore"), tn.delete(t), e.terminate());
|
|
3358
3359
|
}(this), Promise.resolve();
|
|
3359
3360
|
}
|
|
3360
3361
|
}
|
|
3361
3362
|
|
|
3362
|
-
function
|
|
3363
|
-
const
|
|
3364
|
-
if (
|
|
3365
|
-
return
|
|
3366
|
-
options:
|
|
3363
|
+
function sn(t, e) {
|
|
3364
|
+
const n = _getProvider(t, "firestore/lite");
|
|
3365
|
+
if (n.isInitialized()) throw new U(S, "Firestore can only be initialized once per app.");
|
|
3366
|
+
return n.initialize({
|
|
3367
|
+
options: e
|
|
3367
3368
|
});
|
|
3368
3369
|
}
|
|
3369
3370
|
|
|
@@ -3375,8 +3376,8 @@ function oe(t, n) {
|
|
|
3375
3376
|
* @param app - The {@link @firebase/app#FirebaseApp} instance that the returned `Firestore`
|
|
3376
3377
|
* instance is associated with.
|
|
3377
3378
|
* @returns The `Firestore` instance of the provided app.
|
|
3378
|
-
*/ function
|
|
3379
|
-
return _getProvider(
|
|
3379
|
+
*/ function on(e = getApp()) {
|
|
3380
|
+
return _getProvider(e, "firestore/lite").getImmediate();
|
|
3380
3381
|
}
|
|
3381
3382
|
|
|
3382
3383
|
/**
|
|
@@ -3391,24 +3392,24 @@ function oe(t, n) {
|
|
|
3391
3392
|
* @param port - the emulator port (ex: 9000).
|
|
3392
3393
|
* @param options.mockUserToken - the mock auth token to use for unit testing
|
|
3393
3394
|
* Security Rules.
|
|
3394
|
-
*/ function
|
|
3395
|
+
*/ function un(t, e, n, r = {}) {
|
|
3395
3396
|
var s;
|
|
3396
|
-
const i = (t = ot(t,
|
|
3397
|
-
if ("firestore.googleapis.com" !== i.host && i.host !==
|
|
3397
|
+
const i = (t = ot(t, rn))._getSettings();
|
|
3398
|
+
if ("firestore.googleapis.com" !== i.host && i.host !== e && y("Host has been set in both settings() and useEmulator(), emulator host will be used"),
|
|
3398
3399
|
t._setSettings(Object.assign(Object.assign({}, i), {
|
|
3399
|
-
host: `${
|
|
3400
|
+
host: `${e}:${n}`,
|
|
3400
3401
|
ssl: !1
|
|
3401
3402
|
})), r.mockUserToken) {
|
|
3402
|
-
let
|
|
3403
|
-
if ("string" == typeof r.mockUserToken)
|
|
3403
|
+
let e, n;
|
|
3404
|
+
if ("string" == typeof r.mockUserToken) e = r.mockUserToken, n = l.MOCK_USER; else {
|
|
3404
3405
|
// Let createMockUserToken validate first (catches common mistakes like
|
|
3405
3406
|
// invalid field "uid" and missing field "sub" / "user_id".)
|
|
3406
|
-
|
|
3407
|
+
e = createMockUserToken(r.mockUserToken, null === (s = t._app) || void 0 === s ? void 0 : s.options.projectId);
|
|
3407
3408
|
const i = r.mockUserToken.sub || r.mockUserToken.user_id;
|
|
3408
3409
|
if (!i) throw new U(A, "mockUserToken must contain 'sub' or 'user_id' field!");
|
|
3409
|
-
|
|
3410
|
+
n = new l(i);
|
|
3410
3411
|
}
|
|
3411
|
-
t._authCredentials = new B(new j(
|
|
3412
|
+
t._authCredentials = new B(new j(e, n));
|
|
3412
3413
|
}
|
|
3413
3414
|
}
|
|
3414
3415
|
|
|
@@ -3431,8 +3432,8 @@ function oe(t, n) {
|
|
|
3431
3432
|
* @param firestore - The `Firestore` instance to terminate.
|
|
3432
3433
|
* @returns A `Promise` that is resolved when the instance has been successfully
|
|
3433
3434
|
* terminated.
|
|
3434
|
-
*/ function
|
|
3435
|
-
return t = ot(t,
|
|
3435
|
+
*/ function cn(t) {
|
|
3436
|
+
return t = ot(t, rn), _removeServiceInstance(t.app, "firestore/lite"), t._delete();
|
|
3436
3437
|
}
|
|
3437
3438
|
|
|
3438
3439
|
/**
|
|
@@ -3472,14 +3473,14 @@ function oe(t, n) {
|
|
|
3472
3473
|
* and can be used to write, read, or listen to the location. The document at
|
|
3473
3474
|
* the referenced location may or may not exist.
|
|
3474
3475
|
*/
|
|
3475
|
-
class
|
|
3476
|
+
class an {
|
|
3476
3477
|
/** @hideconstructor */
|
|
3477
3478
|
constructor(t,
|
|
3478
3479
|
/**
|
|
3479
3480
|
* If provided, the `FirestoreDataConverter` associated with this instance.
|
|
3480
3481
|
*/
|
|
3481
|
-
|
|
3482
|
-
this.converter =
|
|
3482
|
+
e, n) {
|
|
3483
|
+
this.converter = e, this._key = n,
|
|
3483
3484
|
/** The type of this Firestore reference. */
|
|
3484
3485
|
this.type = "document", this.firestore = t;
|
|
3485
3486
|
}
|
|
@@ -3500,40 +3501,40 @@ class he {
|
|
|
3500
3501
|
/**
|
|
3501
3502
|
* The collection this `DocumentReference` belongs to.
|
|
3502
3503
|
*/ get parent() {
|
|
3503
|
-
return new
|
|
3504
|
+
return new ln(this.firestore, this.converter, this._key.path.popLast());
|
|
3504
3505
|
}
|
|
3505
3506
|
withConverter(t) {
|
|
3506
|
-
return new
|
|
3507
|
+
return new an(this.firestore, t, this._key);
|
|
3507
3508
|
}
|
|
3508
3509
|
}
|
|
3509
3510
|
|
|
3510
3511
|
/**
|
|
3511
3512
|
* A `Query` refers to a query which you can read or listen to. You can also
|
|
3512
3513
|
* construct refined `Query` objects by adding filters and ordering.
|
|
3513
|
-
*/ class
|
|
3514
|
+
*/ class hn {
|
|
3514
3515
|
// This is the lite version of the Query class in the main SDK.
|
|
3515
3516
|
/** @hideconstructor protected */
|
|
3516
3517
|
constructor(t,
|
|
3517
3518
|
/**
|
|
3518
3519
|
* If provided, the `FirestoreDataConverter` associated with this instance.
|
|
3519
3520
|
*/
|
|
3520
|
-
|
|
3521
|
-
this.converter =
|
|
3521
|
+
e, n) {
|
|
3522
|
+
this.converter = e, this._query = n,
|
|
3522
3523
|
/** The type of this Firestore reference. */
|
|
3523
3524
|
this.type = "query", this.firestore = t;
|
|
3524
3525
|
}
|
|
3525
3526
|
withConverter(t) {
|
|
3526
|
-
return new
|
|
3527
|
+
return new hn(this.firestore, t, this._query);
|
|
3527
3528
|
}
|
|
3528
3529
|
}
|
|
3529
3530
|
|
|
3530
3531
|
/**
|
|
3531
3532
|
* A `CollectionReference` object can be used for adding documents, getting
|
|
3532
3533
|
* document references, and querying for documents (using {@link query}).
|
|
3533
|
-
*/ class
|
|
3534
|
+
*/ class ln extends hn {
|
|
3534
3535
|
/** @hideconstructor */
|
|
3535
|
-
constructor(t,
|
|
3536
|
-
super(t,
|
|
3536
|
+
constructor(t, e, n) {
|
|
3537
|
+
super(t, e, new oe(n)), this._path = n,
|
|
3537
3538
|
/** The type of this Firestore reference. */
|
|
3538
3539
|
this.type = "collection";
|
|
3539
3540
|
}
|
|
@@ -3551,23 +3552,23 @@ class he {
|
|
|
3551
3552
|
* subcollection. If this isn't a subcollection, the reference is null.
|
|
3552
3553
|
*/ get parent() {
|
|
3553
3554
|
const t = this._path.popLast();
|
|
3554
|
-
return t.isEmpty() ? null : new
|
|
3555
|
-
/* converter= */ null, new
|
|
3555
|
+
return t.isEmpty() ? null : new an(this.firestore,
|
|
3556
|
+
/* converter= */ null, new et(t));
|
|
3556
3557
|
}
|
|
3557
3558
|
withConverter(t) {
|
|
3558
|
-
return new
|
|
3559
|
+
return new ln(this.firestore, t, this._path);
|
|
3559
3560
|
}
|
|
3560
3561
|
}
|
|
3561
3562
|
|
|
3562
|
-
function
|
|
3563
|
-
if (t = getModularInstance(t),
|
|
3564
|
-
const r = X.fromString(
|
|
3565
|
-
return st(r), new
|
|
3563
|
+
function fn(t, e, ...n) {
|
|
3564
|
+
if (t = getModularInstance(t), nt("collection", "path", e), t instanceof rn) {
|
|
3565
|
+
const r = X.fromString(e, ...n);
|
|
3566
|
+
return st(r), new ln(t, /* converter= */ null, r);
|
|
3566
3567
|
}
|
|
3567
3568
|
{
|
|
3568
|
-
if (!(t instanceof
|
|
3569
|
-
const r = t._path.child(X.fromString(
|
|
3570
|
-
return st(r), new
|
|
3569
|
+
if (!(t instanceof an || t instanceof ln)) throw new U(A, "Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore");
|
|
3570
|
+
const r = t._path.child(X.fromString(e, ...n));
|
|
3571
|
+
return st(r), new ln(t.firestore,
|
|
3571
3572
|
/* converter= */ null, r);
|
|
3572
3573
|
}
|
|
3573
3574
|
}
|
|
@@ -3584,32 +3585,32 @@ function de(t, n, ...e) {
|
|
|
3584
3585
|
* collection or subcollection with this ID as the last segment of its path
|
|
3585
3586
|
* will be included. Cannot contain a slash.
|
|
3586
3587
|
* @returns The created `Query`.
|
|
3587
|
-
*/ function
|
|
3588
|
-
if (t = ot(t,
|
|
3589
|
-
return new
|
|
3588
|
+
*/ function dn(t, e) {
|
|
3589
|
+
if (t = ot(t, rn), nt("collectionGroup", "collection id", e), e.indexOf("/") >= 0) throw new U(A, `Invalid collection ID '${e}' passed to function collectionGroup(). Collection IDs must not contain '/'.`);
|
|
3590
|
+
return new hn(t,
|
|
3590
3591
|
/* converter= */ null,
|
|
3591
3592
|
/**
|
|
3592
3593
|
* Creates a new Query for a collection group query that matches all documents
|
|
3593
3594
|
* within the provided collection group.
|
|
3594
3595
|
*/
|
|
3595
3596
|
function(t) {
|
|
3596
|
-
return new
|
|
3597
|
-
}(
|
|
3597
|
+
return new oe(X.emptyPath(), t);
|
|
3598
|
+
}(e));
|
|
3598
3599
|
}
|
|
3599
3600
|
|
|
3600
|
-
function
|
|
3601
|
+
function wn(t, e, ...n) {
|
|
3601
3602
|
if (t = getModularInstance(t),
|
|
3602
3603
|
// We allow omission of 'pathString' but explicitly prohibit passing in both
|
|
3603
3604
|
// 'undefined' and 'null'.
|
|
3604
|
-
1 === arguments.length && (
|
|
3605
|
-
const r = X.fromString(
|
|
3606
|
-
return rt(r), new
|
|
3607
|
-
/* converter= */ null, new
|
|
3605
|
+
1 === arguments.length && (e = pt.R()), nt("doc", "path", e), t instanceof rn) {
|
|
3606
|
+
const r = X.fromString(e, ...n);
|
|
3607
|
+
return rt(r), new an(t,
|
|
3608
|
+
/* converter= */ null, new et(r));
|
|
3608
3609
|
}
|
|
3609
3610
|
{
|
|
3610
|
-
if (!(t instanceof
|
|
3611
|
-
const r = t._path.child(X.fromString(
|
|
3612
|
-
return rt(r), new
|
|
3611
|
+
if (!(t instanceof an || t instanceof ln)) throw new U(A, "Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore");
|
|
3612
|
+
const r = t._path.child(X.fromString(e, ...n));
|
|
3613
|
+
return rt(r), new an(t.firestore, t instanceof ln ? t.converter : null, new et(r));
|
|
3613
3614
|
}
|
|
3614
3615
|
}
|
|
3615
3616
|
|
|
@@ -3620,8 +3621,8 @@ function me(t, n, ...e) {
|
|
|
3620
3621
|
* @param right - A reference to compare.
|
|
3621
3622
|
* @returns true if the references point to the same location in the same
|
|
3622
3623
|
* Firestore database.
|
|
3623
|
-
*/ function
|
|
3624
|
-
return t = getModularInstance(t),
|
|
3624
|
+
*/ function mn(t, e) {
|
|
3625
|
+
return t = getModularInstance(t), e = getModularInstance(e), (t instanceof an || t instanceof ln) && (e instanceof an || e instanceof ln) && (t.firestore === e.firestore && t.path === e.path && t.converter === e.converter);
|
|
3625
3626
|
}
|
|
3626
3627
|
|
|
3627
3628
|
/**
|
|
@@ -3632,8 +3633,8 @@ function me(t, n, ...e) {
|
|
|
3632
3633
|
* @param right - A `Query` to compare.
|
|
3633
3634
|
* @returns true if the references point to the same location in the same
|
|
3634
3635
|
* Firestore database.
|
|
3635
|
-
*/ function
|
|
3636
|
-
return t = getModularInstance(t),
|
|
3636
|
+
*/ function pn(t, e) {
|
|
3637
|
+
return t = getModularInstance(t), e = getModularInstance(e), t instanceof hn && e instanceof hn && (t.firestore === e.firestore && de(t._query, e._query) && t.converter === e.converter);
|
|
3637
3638
|
}
|
|
3638
3639
|
|
|
3639
3640
|
/**
|
|
@@ -3659,7 +3660,7 @@ function me(t, n, ...e) {
|
|
|
3659
3660
|
*
|
|
3660
3661
|
* Create a `FieldPath` by providing field names. If more than one field
|
|
3661
3662
|
* name is provided, the path will point to a nested field in a document.
|
|
3662
|
-
*/ class
|
|
3663
|
+
*/ class yn {
|
|
3663
3664
|
/**
|
|
3664
3665
|
* Creates a `FieldPath` from the provided field names. If more than one field
|
|
3665
3666
|
* name is provided, the path will point to a nested field in a document.
|
|
@@ -3667,7 +3668,7 @@ function me(t, n, ...e) {
|
|
|
3667
3668
|
* @param fieldNames - A list of field names.
|
|
3668
3669
|
*/
|
|
3669
3670
|
constructor(...t) {
|
|
3670
|
-
for (let
|
|
3671
|
+
for (let e = 0; e < t.length; ++e) if (0 === t[e].length) throw new U(A, "Invalid field name at argument $(i + 1). Field names must not be empty.");
|
|
3671
3672
|
this._internalPath = new tt(t);
|
|
3672
3673
|
}
|
|
3673
3674
|
/**
|
|
@@ -3683,8 +3684,8 @@ function me(t, n, ...e) {
|
|
|
3683
3684
|
/**
|
|
3684
3685
|
* Returns a special sentinel `FieldPath` to refer to the ID of a document.
|
|
3685
3686
|
* It can be used in queries to sort or filter by the document ID.
|
|
3686
|
-
*/ function
|
|
3687
|
-
return new
|
|
3687
|
+
*/ function _n() {
|
|
3688
|
+
return new yn("__name__");
|
|
3688
3689
|
}
|
|
3689
3690
|
|
|
3690
3691
|
/**
|
|
@@ -3705,7 +3706,7 @@ function me(t, n, ...e) {
|
|
|
3705
3706
|
*/
|
|
3706
3707
|
/**
|
|
3707
3708
|
* An immutable object representing an array of bytes.
|
|
3708
|
-
*/ class
|
|
3709
|
+
*/ class gn {
|
|
3709
3710
|
/** @hideconstructor */
|
|
3710
3711
|
constructor(t) {
|
|
3711
3712
|
this._byteString = t;
|
|
@@ -3717,7 +3718,7 @@ function me(t, n, ...e) {
|
|
|
3717
3718
|
* @param base64 - The Base64 string used to create the `Bytes` object.
|
|
3718
3719
|
*/ static fromBase64String(t) {
|
|
3719
3720
|
try {
|
|
3720
|
-
return new
|
|
3721
|
+
return new gn(It.fromBase64String(t));
|
|
3721
3722
|
} catch (t) {
|
|
3722
3723
|
throw new U(A, "Failed to construct data from Base64 string: " + t);
|
|
3723
3724
|
}
|
|
@@ -3727,7 +3728,7 @@ function me(t, n, ...e) {
|
|
|
3727
3728
|
*
|
|
3728
3729
|
* @param array - The Uint8Array used to create the `Bytes` object.
|
|
3729
3730
|
*/ static fromUint8Array(t) {
|
|
3730
|
-
return new
|
|
3731
|
+
return new gn(It.fromUint8Array(t));
|
|
3731
3732
|
}
|
|
3732
3733
|
/**
|
|
3733
3734
|
* Returns the underlying bytes as a Base64-encoded string.
|
|
@@ -3779,7 +3780,7 @@ function me(t, n, ...e) {
|
|
|
3779
3780
|
/**
|
|
3780
3781
|
* Sentinel values that can be used when writing document fields with `set()`
|
|
3781
3782
|
* or `update()`.
|
|
3782
|
-
*/ class
|
|
3783
|
+
*/ class vn {
|
|
3783
3784
|
/**
|
|
3784
3785
|
* @param _methodName - The public API endpoint that returns this class.
|
|
3785
3786
|
* @hideconstructor
|
|
@@ -3811,17 +3812,17 @@ function me(t, n, ...e) {
|
|
|
3811
3812
|
*
|
|
3812
3813
|
* Latitude values are in the range of [-90, 90].
|
|
3813
3814
|
* Longitude values are in the range of [-180, 180].
|
|
3814
|
-
*/ class
|
|
3815
|
+
*/ class bn {
|
|
3815
3816
|
/**
|
|
3816
3817
|
* Creates a new immutable `GeoPoint` object with the provided latitude and
|
|
3817
3818
|
* longitude values.
|
|
3818
3819
|
* @param latitude - The latitude as number between -90 and 90.
|
|
3819
3820
|
* @param longitude - The longitude as number between -180 and 180.
|
|
3820
3821
|
*/
|
|
3821
|
-
constructor(t,
|
|
3822
|
+
constructor(t, e) {
|
|
3822
3823
|
if (!isFinite(t) || t < -90 || t > 90) throw new U(A, "Latitude must be a number between -90 and 90, but was: " + t);
|
|
3823
|
-
if (!isFinite(
|
|
3824
|
-
this._lat = t, this._long =
|
|
3824
|
+
if (!isFinite(e) || e < -180 || e > 180) throw new U(A, "Longitude must be a number between -180 and 180, but was: " + e);
|
|
3825
|
+
this._lat = t, this._long = e;
|
|
3825
3826
|
}
|
|
3826
3827
|
/**
|
|
3827
3828
|
* The latitude of this `GeoPoint` instance.
|
|
@@ -3870,29 +3871,29 @@ function me(t, n, ...e) {
|
|
|
3870
3871
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3871
3872
|
* See the License for the specific language governing permissions and
|
|
3872
3873
|
* limitations under the License.
|
|
3873
|
-
*/ const
|
|
3874
|
+
*/ const En = /^__.*__$/;
|
|
3874
3875
|
|
|
3875
|
-
/** The result of parsing document data (e.g. for a setData call). */ class
|
|
3876
|
-
constructor(t,
|
|
3877
|
-
this.data = t, this.fieldMask =
|
|
3876
|
+
/** The result of parsing document data (e.g. for a setData call). */ class Tn {
|
|
3877
|
+
constructor(t, e, n) {
|
|
3878
|
+
this.data = t, this.fieldMask = e, this.fieldTransforms = n;
|
|
3878
3879
|
}
|
|
3879
|
-
toMutation(t,
|
|
3880
|
-
return null !== this.fieldMask ? new
|
|
3880
|
+
toMutation(t, e) {
|
|
3881
|
+
return null !== this.fieldMask ? new Ie(t, this.data, this.fieldMask, e, this.fieldTransforms) : new Te(t, this.data, e, this.fieldTransforms);
|
|
3881
3882
|
}
|
|
3882
3883
|
}
|
|
3883
3884
|
|
|
3884
|
-
/** The result of parsing "update" data (i.e. for an updateData call). */ class
|
|
3885
|
+
/** The result of parsing "update" data (i.e. for an updateData call). */ class In {
|
|
3885
3886
|
constructor(t,
|
|
3886
3887
|
// The fieldMask does not include document transforms.
|
|
3887
|
-
|
|
3888
|
-
this.data = t, this.fieldMask =
|
|
3888
|
+
e, n) {
|
|
3889
|
+
this.data = t, this.fieldMask = e, this.fieldTransforms = n;
|
|
3889
3890
|
}
|
|
3890
|
-
toMutation(t,
|
|
3891
|
-
return new
|
|
3891
|
+
toMutation(t, e) {
|
|
3892
|
+
return new Ie(t, this.data, this.fieldMask, e, this.fieldTransforms);
|
|
3892
3893
|
}
|
|
3893
3894
|
}
|
|
3894
3895
|
|
|
3895
|
-
function
|
|
3896
|
+
function An(t) {
|
|
3896
3897
|
switch (t) {
|
|
3897
3898
|
case 0 /* Set */ :
|
|
3898
3899
|
// fall through
|
|
@@ -3910,7 +3911,7 @@ function Re(t) {
|
|
|
3910
3911
|
}
|
|
3911
3912
|
}
|
|
3912
3913
|
|
|
3913
|
-
/** A "context" object passed around while parsing user data. */ class
|
|
3914
|
+
/** A "context" object passed around while parsing user data. */ class Rn {
|
|
3914
3915
|
/**
|
|
3915
3916
|
* Initializes a ParseContext with the given source and path.
|
|
3916
3917
|
*
|
|
@@ -3929,8 +3930,8 @@ function Re(t) {
|
|
|
3929
3930
|
* which case certain features will not work and errors will be somewhat
|
|
3930
3931
|
* compromised).
|
|
3931
3932
|
*/
|
|
3932
|
-
constructor(t,
|
|
3933
|
-
this.settings = t, this.databaseId =
|
|
3933
|
+
constructor(t, e, n, r, s, i) {
|
|
3934
|
+
this.settings = t, this.databaseId = e, this.q = n, this.ignoreUndefinedProperties = r,
|
|
3934
3935
|
// Minor hack: If fieldTransforms is undefined, we assume this is an
|
|
3935
3936
|
// external call and we need to validate the entire path.
|
|
3936
3937
|
void 0 === s && this.Z(), this.fieldTransforms = s || [], this.fieldMask = i || [];
|
|
@@ -3941,21 +3942,21 @@ function Re(t) {
|
|
|
3941
3942
|
get tt() {
|
|
3942
3943
|
return this.settings.tt;
|
|
3943
3944
|
}
|
|
3944
|
-
/** Returns a new context with the specified settings overwritten. */
|
|
3945
|
-
return new
|
|
3945
|
+
/** Returns a new context with the specified settings overwritten. */ et(t) {
|
|
3946
|
+
return new Rn(Object.assign(Object.assign({}, this.settings), t), this.databaseId, this.q, this.ignoreUndefinedProperties, this.fieldTransforms, this.fieldMask);
|
|
3946
3947
|
}
|
|
3947
|
-
|
|
3948
|
-
var
|
|
3949
|
-
const
|
|
3950
|
-
path:
|
|
3948
|
+
nt(t) {
|
|
3949
|
+
var e;
|
|
3950
|
+
const n = null === (e = this.path) || void 0 === e ? void 0 : e.child(t), r = this.et({
|
|
3951
|
+
path: n,
|
|
3951
3952
|
rt: !1
|
|
3952
3953
|
});
|
|
3953
3954
|
return r.st(t), r;
|
|
3954
3955
|
}
|
|
3955
3956
|
it(t) {
|
|
3956
|
-
var
|
|
3957
|
-
const
|
|
3958
|
-
path:
|
|
3957
|
+
var e;
|
|
3958
|
+
const n = null === (e = this.path) || void 0 === e ? void 0 : e.child(t), r = this.et({
|
|
3959
|
+
path: n,
|
|
3959
3960
|
rt: !1
|
|
3960
3961
|
});
|
|
3961
3962
|
return r.Z(), r;
|
|
@@ -3963,16 +3964,16 @@ function Re(t) {
|
|
|
3963
3964
|
ot(t) {
|
|
3964
3965
|
// TODO(b/34871131): We don't support array paths right now; so make path
|
|
3965
3966
|
// undefined.
|
|
3966
|
-
return this.
|
|
3967
|
+
return this.et({
|
|
3967
3968
|
path: void 0,
|
|
3968
3969
|
rt: !0
|
|
3969
3970
|
});
|
|
3970
3971
|
}
|
|
3971
3972
|
ut(t) {
|
|
3972
|
-
return
|
|
3973
|
+
return Qn(t, this.settings.methodName, this.settings.ct || !1, this.path, this.settings.at);
|
|
3973
3974
|
}
|
|
3974
3975
|
/** Returns 'true' if 'fieldPath' was traversed when creating this context. */ contains(t) {
|
|
3975
|
-
return void 0 !== this.fieldMask.find((
|
|
3976
|
+
return void 0 !== this.fieldMask.find((e => t.isPrefixOf(e))) || void 0 !== this.fieldTransforms.find((e => t.isPrefixOf(e.field)));
|
|
3976
3977
|
}
|
|
3977
3978
|
Z() {
|
|
3978
3979
|
// TODO(b/34871131): Remove null check once we have proper paths for fields
|
|
@@ -3981,22 +3982,22 @@ function Re(t) {
|
|
|
3981
3982
|
}
|
|
3982
3983
|
st(t) {
|
|
3983
3984
|
if (0 === t.length) throw this.ut("Document fields must not be empty");
|
|
3984
|
-
if (
|
|
3985
|
+
if (An(this.tt) && En.test(t)) throw this.ut('Document fields cannot begin and end with "__"');
|
|
3985
3986
|
}
|
|
3986
3987
|
}
|
|
3987
3988
|
|
|
3988
3989
|
/**
|
|
3989
3990
|
* Helper for parsing raw user input (provided via the API) into internal model
|
|
3990
3991
|
* classes.
|
|
3991
|
-
*/ class
|
|
3992
|
-
constructor(t,
|
|
3993
|
-
this.databaseId = t, this.ignoreUndefinedProperties =
|
|
3992
|
+
*/ class Pn {
|
|
3993
|
+
constructor(t, e, n) {
|
|
3994
|
+
this.databaseId = t, this.ignoreUndefinedProperties = e, this.q = n || Ye(t);
|
|
3994
3995
|
}
|
|
3995
|
-
/** Creates a new top-level parse context. */ ht(t,
|
|
3996
|
-
return new
|
|
3996
|
+
/** Creates a new top-level parse context. */ ht(t, e, n, r = !1) {
|
|
3997
|
+
return new Rn({
|
|
3997
3998
|
tt: t,
|
|
3998
|
-
methodName:
|
|
3999
|
-
at:
|
|
3999
|
+
methodName: e,
|
|
4000
|
+
at: n,
|
|
4000
4001
|
path: tt.emptyPath(),
|
|
4001
4002
|
rt: !1,
|
|
4002
4003
|
ct: r
|
|
@@ -4004,29 +4005,29 @@ function Re(t) {
|
|
|
4004
4005
|
}
|
|
4005
4006
|
}
|
|
4006
4007
|
|
|
4007
|
-
function
|
|
4008
|
-
const
|
|
4009
|
-
return new
|
|
4008
|
+
function Vn(t) {
|
|
4009
|
+
const e = t._freezeSettings(), n = Ye(t._databaseId);
|
|
4010
|
+
return new Pn(t._databaseId, !!e.ignoreUndefinedProperties, n);
|
|
4010
4011
|
}
|
|
4011
4012
|
|
|
4012
|
-
/** Parse document data from a set() call. */ function
|
|
4013
|
-
const o = t.ht(i.merge || i.mergeFields ? 2 /* MergeSet */ : 0 /* Set */ ,
|
|
4014
|
-
|
|
4015
|
-
const u =
|
|
4013
|
+
/** Parse document data from a set() call. */ function Dn(t, e, n, r, s, i = {}) {
|
|
4014
|
+
const o = t.ht(i.merge || i.mergeFields ? 2 /* MergeSet */ : 0 /* Set */ , e, n, s);
|
|
4015
|
+
Mn("Data must be an object, but it was:", o, r);
|
|
4016
|
+
const u = kn(r, o);
|
|
4016
4017
|
let c, a;
|
|
4017
4018
|
if (i.merge) c = new Tt(o.fieldMask), a = o.fieldTransforms; else if (i.mergeFields) {
|
|
4018
4019
|
const t = [];
|
|
4019
4020
|
for (const r of i.mergeFields) {
|
|
4020
|
-
const s =
|
|
4021
|
+
const s = Bn(e, r, n);
|
|
4021
4022
|
if (!o.contains(s)) throw new U(A, `Field '${s}' is specified in your field mask but missing from your input data.`);
|
|
4022
|
-
|
|
4023
|
+
Wn(t, s) || t.push(s);
|
|
4023
4024
|
}
|
|
4024
4025
|
c = new Tt(t), a = o.fieldTransforms.filter((t => c.covers(t.field)));
|
|
4025
4026
|
} else c = null, a = o.fieldTransforms;
|
|
4026
|
-
return new
|
|
4027
|
+
return new Tn(new Bt(u), c, a);
|
|
4027
4028
|
}
|
|
4028
4029
|
|
|
4029
|
-
class
|
|
4030
|
+
class Nn extends vn {
|
|
4030
4031
|
_toFieldTransform(t) {
|
|
4031
4032
|
if (2 /* MergeSet */ !== t.tt) throw 1 /* Update */ === t.tt ? t.ut(`${this._methodName}() can only appear at the top level of your update data`) : t.ut(`${this._methodName}() cannot be used with set() unless you pass {merge:true}`);
|
|
4032
4033
|
// No transform to add for a delete, but we need to add it to our
|
|
@@ -4034,7 +4035,7 @@ class $e extends be {
|
|
|
4034
4035
|
return t.fieldMask.push(t.path), null;
|
|
4035
4036
|
}
|
|
4036
4037
|
isEqual(t) {
|
|
4037
|
-
return t instanceof
|
|
4038
|
+
return t instanceof Nn;
|
|
4038
4039
|
}
|
|
4039
4040
|
}
|
|
4040
4041
|
|
|
@@ -4053,32 +4054,32 @@ class $e extends be {
|
|
|
4053
4054
|
* context.
|
|
4054
4055
|
* @param context - The parent context.
|
|
4055
4056
|
* @param arrayElement - Whether or not the FieldValue has an array.
|
|
4056
|
-
*/ function
|
|
4057
|
-
return new
|
|
4057
|
+
*/ function $n(t, e, n) {
|
|
4058
|
+
return new Rn({
|
|
4058
4059
|
tt: 3 /* Argument */ ,
|
|
4059
|
-
at:
|
|
4060
|
+
at: e.settings.at,
|
|
4060
4061
|
methodName: t._methodName,
|
|
4061
|
-
rt:
|
|
4062
|
-
},
|
|
4062
|
+
rt: n
|
|
4063
|
+
}, e.databaseId, e.q, e.ignoreUndefinedProperties);
|
|
4063
4064
|
}
|
|
4064
4065
|
|
|
4065
|
-
class
|
|
4066
|
+
class Sn extends vn {
|
|
4066
4067
|
_toFieldTransform(t) {
|
|
4067
|
-
return new
|
|
4068
|
+
return new ve(t.path, new pe);
|
|
4068
4069
|
}
|
|
4069
4070
|
isEqual(t) {
|
|
4070
|
-
return t instanceof
|
|
4071
|
+
return t instanceof Sn;
|
|
4071
4072
|
}
|
|
4072
4073
|
}
|
|
4073
4074
|
|
|
4074
|
-
class
|
|
4075
|
-
constructor(t,
|
|
4076
|
-
super(t), this.lt =
|
|
4075
|
+
class Fn extends vn {
|
|
4076
|
+
constructor(t, e) {
|
|
4077
|
+
super(t), this.lt = e;
|
|
4077
4078
|
}
|
|
4078
4079
|
_toFieldTransform(t) {
|
|
4079
|
-
const
|
|
4080
|
-
/*array=*/ !0),
|
|
4081
|
-
return new
|
|
4080
|
+
const e = $n(this, t,
|
|
4081
|
+
/*array=*/ !0), n = this.lt.map((t => Un(t, e))), r = new ye(n);
|
|
4082
|
+
return new ve(t.path, r);
|
|
4082
4083
|
}
|
|
4083
4084
|
isEqual(t) {
|
|
4084
4085
|
// TODO(mrschmidt): Implement isEquals
|
|
@@ -4086,14 +4087,14 @@ class xe extends be {
|
|
|
4086
4087
|
}
|
|
4087
4088
|
}
|
|
4088
4089
|
|
|
4089
|
-
class
|
|
4090
|
-
constructor(t,
|
|
4091
|
-
super(t), this.lt =
|
|
4090
|
+
class xn extends vn {
|
|
4091
|
+
constructor(t, e) {
|
|
4092
|
+
super(t), this.lt = e;
|
|
4092
4093
|
}
|
|
4093
4094
|
_toFieldTransform(t) {
|
|
4094
|
-
const
|
|
4095
|
-
/*array=*/ !0),
|
|
4096
|
-
return new
|
|
4095
|
+
const e = $n(this, t,
|
|
4096
|
+
/*array=*/ !0), n = this.lt.map((t => Un(t, e))), r = new _e(n);
|
|
4097
|
+
return new ve(t.path, r);
|
|
4097
4098
|
}
|
|
4098
4099
|
isEqual(t) {
|
|
4099
4100
|
// TODO(mrschmidt): Implement isEquals
|
|
@@ -4101,13 +4102,13 @@ class qe extends be {
|
|
|
4101
4102
|
}
|
|
4102
4103
|
}
|
|
4103
4104
|
|
|
4104
|
-
class
|
|
4105
|
-
constructor(t,
|
|
4106
|
-
super(t), this.ft =
|
|
4105
|
+
class qn extends vn {
|
|
4106
|
+
constructor(t, e) {
|
|
4107
|
+
super(t), this.ft = e;
|
|
4107
4108
|
}
|
|
4108
4109
|
_toFieldTransform(t) {
|
|
4109
|
-
const
|
|
4110
|
-
return new
|
|
4110
|
+
const e = new ge(t.q, we(t.q, this.ft));
|
|
4111
|
+
return new ve(t.path, e);
|
|
4111
4112
|
}
|
|
4112
4113
|
isEqual(t) {
|
|
4113
4114
|
// TODO(mrschmidt): Implement isEquals
|
|
@@ -4115,50 +4116,50 @@ class Oe extends be {
|
|
|
4115
4116
|
}
|
|
4116
4117
|
}
|
|
4117
4118
|
|
|
4118
|
-
/** Parse update data from an update() call. */ function
|
|
4119
|
-
const s = t.ht(1 /* Update */ ,
|
|
4120
|
-
|
|
4119
|
+
/** Parse update data from an update() call. */ function On(t, e, n, r) {
|
|
4120
|
+
const s = t.ht(1 /* Update */ , e, n);
|
|
4121
|
+
Mn("Data must be an object, but it was:", s, r);
|
|
4121
4122
|
const i = [], o = Bt.empty();
|
|
4122
4123
|
Et(r, ((t, r) => {
|
|
4123
|
-
const u =
|
|
4124
|
+
const u = Gn(e, t, n);
|
|
4124
4125
|
// For Compat types, we have to "extract" the underlying types before
|
|
4125
4126
|
// performing validation.
|
|
4126
4127
|
r = getModularInstance(r);
|
|
4127
4128
|
const c = s.it(u);
|
|
4128
|
-
if (r instanceof
|
|
4129
|
+
if (r instanceof Nn)
|
|
4129
4130
|
// Add it to the field mask, but don't add anything to updateData.
|
|
4130
4131
|
i.push(u); else {
|
|
4131
|
-
const t =
|
|
4132
|
+
const t = Un(r, c);
|
|
4132
4133
|
null != t && (i.push(u), o.set(u, t));
|
|
4133
4134
|
}
|
|
4134
4135
|
}));
|
|
4135
4136
|
const u = new Tt(i);
|
|
4136
|
-
return new
|
|
4137
|
+
return new In(o, u, s.fieldTransforms);
|
|
4137
4138
|
}
|
|
4138
4139
|
|
|
4139
|
-
/** Parse update data from a list of field/value arguments. */ function
|
|
4140
|
-
const o = t.ht(1 /* Update */ ,
|
|
4141
|
-
if (i.length % 2 != 0) throw new U(A, `Function ${
|
|
4142
|
-
for (let t = 0; t < i.length; t += 2) u.push(
|
|
4140
|
+
/** Parse update data from a list of field/value arguments. */ function Cn(t, e, n, r, s, i) {
|
|
4141
|
+
const o = t.ht(1 /* Update */ , e, n), u = [ Bn(e, r, n) ], c = [ s ];
|
|
4142
|
+
if (i.length % 2 != 0) throw new U(A, `Function ${e}() needs to be called with an even number of arguments that alternate between field names and values.`);
|
|
4143
|
+
for (let t = 0; t < i.length; t += 2) u.push(Bn(e, i[t])), c.push(i[t + 1]);
|
|
4143
4144
|
const a = [], l = Bt.empty();
|
|
4144
4145
|
// We iterate in reverse order to pick the last value for a field if the
|
|
4145
4146
|
// user specified the field multiple times.
|
|
4146
|
-
for (let t = u.length - 1; t >= 0; --t) if (!
|
|
4147
|
-
const
|
|
4148
|
-
let
|
|
4147
|
+
for (let t = u.length - 1; t >= 0; --t) if (!Wn(a, u[t])) {
|
|
4148
|
+
const e = u[t];
|
|
4149
|
+
let n = c[t];
|
|
4149
4150
|
// For Compat types, we have to "extract" the underlying types before
|
|
4150
4151
|
// performing validation.
|
|
4151
|
-
|
|
4152
|
-
const r = o.it(
|
|
4153
|
-
if (
|
|
4152
|
+
n = getModularInstance(n);
|
|
4153
|
+
const r = o.it(e);
|
|
4154
|
+
if (n instanceof Nn)
|
|
4154
4155
|
// Add it to the field mask, but don't add anything to updateData.
|
|
4155
|
-
a.push(
|
|
4156
|
-
const t =
|
|
4157
|
-
null != t && (a.push(
|
|
4156
|
+
a.push(e); else {
|
|
4157
|
+
const t = Un(n, r);
|
|
4158
|
+
null != t && (a.push(e), l.set(e, t));
|
|
4158
4159
|
}
|
|
4159
4160
|
}
|
|
4160
4161
|
const f = new Tt(a);
|
|
4161
|
-
return new
|
|
4162
|
+
return new In(l, f, o.fieldTransforms);
|
|
4162
4163
|
}
|
|
4163
4164
|
|
|
4164
4165
|
/**
|
|
@@ -4167,8 +4168,8 @@ class Oe extends be {
|
|
|
4167
4168
|
*
|
|
4168
4169
|
* @param allowArrays - Whether the query value is an array that may directly
|
|
4169
4170
|
* contain additional arrays (e.g. the operand of an `in` query).
|
|
4170
|
-
*/ function
|
|
4171
|
-
return
|
|
4171
|
+
*/ function Ln(t, e, n, r = !1) {
|
|
4172
|
+
return Un(n, t.ht(r ? 4 /* ArrayArgument */ : 3 /* Argument */ , e));
|
|
4172
4173
|
}
|
|
4173
4174
|
|
|
4174
4175
|
/**
|
|
@@ -4179,12 +4180,12 @@ class Oe extends be {
|
|
|
4179
4180
|
* the source of the data being parsed, etc.
|
|
4180
4181
|
* @returns The parsed value, or null if the value was a FieldValue sentinel
|
|
4181
4182
|
* that should not be included in the resulting parsed data.
|
|
4182
|
-
*/ function
|
|
4183
|
-
if (
|
|
4183
|
+
*/ function Un(t, e) {
|
|
4184
|
+
if (jn(
|
|
4184
4185
|
// Unwrap the API type from the Compat SDK. This will return the API type
|
|
4185
4186
|
// from firestore-exp.
|
|
4186
|
-
t = getModularInstance(t))) return
|
|
4187
|
-
if (t instanceof
|
|
4187
|
+
t = getModularInstance(t))) return Mn("Unsupported field value:", e, t), kn(t, e);
|
|
4188
|
+
if (t instanceof vn)
|
|
4188
4189
|
// FieldValues usually parse into transforms (except deleteField())
|
|
4189
4190
|
// in which case we do not want to include this field in our parsed data
|
|
4190
4191
|
// (as doing so will overwrite the field directly prior to the transform
|
|
@@ -4194,19 +4195,19 @@ class Oe extends be {
|
|
|
4194
4195
|
* "Parses" the provided FieldValueImpl, adding any necessary transforms to
|
|
4195
4196
|
* context.fieldTransforms.
|
|
4196
4197
|
*/
|
|
4197
|
-
return function(t,
|
|
4198
|
+
return function(t, e) {
|
|
4198
4199
|
// Sentinels are only supported with writes, and not within arrays.
|
|
4199
|
-
if (!
|
|
4200
|
-
if (!
|
|
4201
|
-
const
|
|
4202
|
-
|
|
4200
|
+
if (!An(e.tt)) throw e.ut(`${t._methodName}() can only be used with update() and set()`);
|
|
4201
|
+
if (!e.path) throw e.ut(`${t._methodName}() is not currently supported inside arrays`);
|
|
4202
|
+
const n = t._toFieldTransform(e);
|
|
4203
|
+
n && e.fieldTransforms.push(n);
|
|
4203
4204
|
}
|
|
4204
4205
|
/**
|
|
4205
4206
|
* Helper to parse a scalar value (i.e. not an Object, Array, or FieldValue)
|
|
4206
4207
|
*
|
|
4207
4208
|
* @returns The parsed value
|
|
4208
|
-
*/ (t,
|
|
4209
|
-
if (void 0 === t &&
|
|
4209
|
+
*/ (t, e), null;
|
|
4210
|
+
if (void 0 === t && e.ignoreUndefinedProperties)
|
|
4210
4211
|
// If the input is undefined it can never participate in the fieldMask, so
|
|
4211
4212
|
// don't handle this below. If `ignoreUndefinedProperties` is false,
|
|
4212
4213
|
// `parseScalarValue` will reject an undefined value.
|
|
@@ -4214,38 +4215,38 @@ class Oe extends be {
|
|
|
4214
4215
|
if (
|
|
4215
4216
|
// If context.path is null we are inside an array and we don't support
|
|
4216
4217
|
// field mask paths more granular than the top-level array.
|
|
4217
|
-
|
|
4218
|
+
e.path && e.fieldMask.push(e.path), t instanceof Array) {
|
|
4218
4219
|
// TODO(b/34871131): Include the path containing the array in the error
|
|
4219
4220
|
// message.
|
|
4220
4221
|
// In the case of IN queries, the parsed data is an array (representing
|
|
4221
4222
|
// the set of values to be included for the IN query) that may directly
|
|
4222
4223
|
// contain additional arrays (each representing an individual field
|
|
4223
4224
|
// value), so we disable this validation.
|
|
4224
|
-
if (
|
|
4225
|
-
return function(t,
|
|
4226
|
-
const
|
|
4225
|
+
if (e.settings.rt && 4 /* ArrayArgument */ !== e.tt) throw e.ut("Nested arrays are not supported");
|
|
4226
|
+
return function(t, e) {
|
|
4227
|
+
const n = [];
|
|
4227
4228
|
let r = 0;
|
|
4228
4229
|
for (const s of t) {
|
|
4229
|
-
let t =
|
|
4230
|
+
let t = Un(s, e.ot(r));
|
|
4230
4231
|
null == t && (
|
|
4231
4232
|
// Just include nulls in the array for fields being replaced with a
|
|
4232
4233
|
// sentinel.
|
|
4233
4234
|
t = {
|
|
4234
4235
|
nullValue: "NULL_VALUE"
|
|
4235
|
-
}),
|
|
4236
|
+
}), n.push(t), r++;
|
|
4236
4237
|
}
|
|
4237
4238
|
return {
|
|
4238
4239
|
arrayValue: {
|
|
4239
|
-
values:
|
|
4240
|
+
values: n
|
|
4240
4241
|
}
|
|
4241
4242
|
};
|
|
4242
|
-
}(t,
|
|
4243
|
+
}(t, e);
|
|
4243
4244
|
}
|
|
4244
|
-
return function(t,
|
|
4245
|
+
return function(t, e) {
|
|
4245
4246
|
if (null === (t = getModularInstance(t))) return {
|
|
4246
4247
|
nullValue: "NULL_VALUE"
|
|
4247
4248
|
};
|
|
4248
|
-
if ("number" == typeof t) return
|
|
4249
|
+
if ("number" == typeof t) return we(e.q, t);
|
|
4249
4250
|
if ("boolean" == typeof t) return {
|
|
4250
4251
|
booleanValue: t
|
|
4251
4252
|
};
|
|
@@ -4253,37 +4254,37 @@ class Oe extends be {
|
|
|
4253
4254
|
stringValue: t
|
|
4254
4255
|
};
|
|
4255
4256
|
if (t instanceof Date) {
|
|
4256
|
-
const
|
|
4257
|
+
const n = gt.fromDate(t);
|
|
4257
4258
|
return {
|
|
4258
|
-
timestampValue:
|
|
4259
|
+
timestampValue: Ne(e.q, n)
|
|
4259
4260
|
};
|
|
4260
4261
|
}
|
|
4261
4262
|
if (t instanceof gt) {
|
|
4262
4263
|
// Firestore backend truncates precision down to microseconds. To ensure
|
|
4263
4264
|
// offline mode works the same with regards to truncation, perform the
|
|
4264
4265
|
// truncation immediately without waiting for the backend to do that.
|
|
4265
|
-
const
|
|
4266
|
+
const n = new gt(t.seconds, 1e3 * Math.floor(t.nanoseconds / 1e3));
|
|
4266
4267
|
return {
|
|
4267
|
-
timestampValue:
|
|
4268
|
+
timestampValue: Ne(e.q, n)
|
|
4268
4269
|
};
|
|
4269
4270
|
}
|
|
4270
|
-
if (t instanceof
|
|
4271
|
+
if (t instanceof bn) return {
|
|
4271
4272
|
geoPointValue: {
|
|
4272
4273
|
latitude: t.latitude,
|
|
4273
4274
|
longitude: t.longitude
|
|
4274
4275
|
}
|
|
4275
4276
|
};
|
|
4276
|
-
if (t instanceof
|
|
4277
|
-
bytesValue:
|
|
4277
|
+
if (t instanceof gn) return {
|
|
4278
|
+
bytesValue: $e(e.q, t._byteString)
|
|
4278
4279
|
};
|
|
4279
|
-
if (t instanceof
|
|
4280
|
-
const
|
|
4281
|
-
if (!r.isEqual(
|
|
4280
|
+
if (t instanceof an) {
|
|
4281
|
+
const n = e.databaseId, r = t.firestore._databaseId;
|
|
4282
|
+
if (!r.isEqual(n)) throw e.ut(`Document reference is for database ${r.projectId}/${r.database} but should be for database ${n.projectId}/${n.database}`);
|
|
4282
4283
|
return {
|
|
4283
|
-
referenceValue:
|
|
4284
|
+
referenceValue: xe(t.firestore._databaseId || e.databaseId, t._key.path)
|
|
4284
4285
|
};
|
|
4285
4286
|
}
|
|
4286
|
-
throw
|
|
4287
|
+
throw e.ut(`Unsupported field value: ${it(t)}`);
|
|
4287
4288
|
}
|
|
4288
4289
|
/**
|
|
4289
4290
|
* Checks whether an object looks like a JSON object that should be converted
|
|
@@ -4291,56 +4292,56 @@ class Oe extends be {
|
|
|
4291
4292
|
* JSON objects since they should be converted to a struct value. Arrays, Dates,
|
|
4292
4293
|
* GeoPoints, etc. are not considered to look like JSON objects since they map
|
|
4293
4294
|
* to specific FieldValue types other than ObjectValue.
|
|
4294
|
-
*/ (t,
|
|
4295
|
+
*/ (t, e);
|
|
4295
4296
|
}
|
|
4296
4297
|
|
|
4297
|
-
function
|
|
4298
|
-
const
|
|
4298
|
+
function kn(t, e) {
|
|
4299
|
+
const n = {};
|
|
4299
4300
|
return !function(t) {
|
|
4300
|
-
for (const
|
|
4301
|
+
for (const e in t) if (Object.prototype.hasOwnProperty.call(t, e)) return !1;
|
|
4301
4302
|
return !0;
|
|
4302
4303
|
}(t) ? Et(t, ((t, r) => {
|
|
4303
|
-
const s =
|
|
4304
|
-
null != s && (
|
|
4304
|
+
const s = Un(r, e.nt(t));
|
|
4305
|
+
null != s && (n[t] = s);
|
|
4305
4306
|
})) :
|
|
4306
4307
|
// If we encounter an empty object, we explicitly add it to the update
|
|
4307
4308
|
// mask to ensure that the server creates a map entry.
|
|
4308
|
-
|
|
4309
|
+
e.path && e.path.length > 0 && e.fieldMask.push(e.path), {
|
|
4309
4310
|
mapValue: {
|
|
4310
|
-
fields:
|
|
4311
|
+
fields: n
|
|
4311
4312
|
}
|
|
4312
4313
|
};
|
|
4313
4314
|
}
|
|
4314
4315
|
|
|
4315
|
-
function
|
|
4316
|
-
return !("object" != typeof t || null === t || t instanceof Array || t instanceof Date || t instanceof gt || t instanceof
|
|
4316
|
+
function jn(t) {
|
|
4317
|
+
return !("object" != typeof t || null === t || t instanceof Array || t instanceof Date || t instanceof gt || t instanceof bn || t instanceof gn || t instanceof an || t instanceof vn);
|
|
4317
4318
|
}
|
|
4318
4319
|
|
|
4319
|
-
function
|
|
4320
|
-
if (!
|
|
4320
|
+
function Mn(t, e, n) {
|
|
4321
|
+
if (!jn(n) || !function(t) {
|
|
4321
4322
|
return "object" == typeof t && null !== t && (Object.getPrototypeOf(t) === Object.prototype || null === Object.getPrototypeOf(t));
|
|
4322
|
-
}(
|
|
4323
|
-
const r = it(
|
|
4324
|
-
throw "an object" === r ?
|
|
4323
|
+
}(n)) {
|
|
4324
|
+
const r = it(n);
|
|
4325
|
+
throw "an object" === r ? e.ut(t + " a custom object") : e.ut(t + " " + r);
|
|
4325
4326
|
}
|
|
4326
4327
|
}
|
|
4327
4328
|
|
|
4328
4329
|
/**
|
|
4329
4330
|
* Helper that calls fromDotSeparatedString() but wraps any error thrown.
|
|
4330
|
-
*/ function
|
|
4331
|
+
*/ function Bn(t, e, n) {
|
|
4331
4332
|
if ((
|
|
4332
4333
|
// If required, replace the FieldPath Compat class with with the firestore-exp
|
|
4333
4334
|
// FieldPath.
|
|
4334
|
-
|
|
4335
|
-
if ("string" == typeof
|
|
4336
|
-
throw
|
|
4335
|
+
e = getModularInstance(e)) instanceof yn) return e._internalPath;
|
|
4336
|
+
if ("string" == typeof e) return Gn(t, e);
|
|
4337
|
+
throw Qn("Field path arguments must be of type string or ", t,
|
|
4337
4338
|
/* hasConverter= */ !1,
|
|
4338
|
-
/* path= */ void 0,
|
|
4339
|
+
/* path= */ void 0, n);
|
|
4339
4340
|
}
|
|
4340
4341
|
|
|
4341
4342
|
/**
|
|
4342
4343
|
* Matches any characters in a field path string that are reserved.
|
|
4343
|
-
*/ const
|
|
4344
|
+
*/ const zn = new RegExp("[~\\*/\\[\\]]");
|
|
4344
4345
|
|
|
4345
4346
|
/**
|
|
4346
4347
|
* Wraps fromDotSeparatedString with an error message about the method that
|
|
@@ -4350,30 +4351,30 @@ function Be(t, n, e) {
|
|
|
4350
4351
|
* split on dots.
|
|
4351
4352
|
* @param targetDoc - The document against which the field path will be
|
|
4352
4353
|
* evaluated.
|
|
4353
|
-
*/ function
|
|
4354
|
-
if (
|
|
4354
|
+
*/ function Gn(t, e, n) {
|
|
4355
|
+
if (e.search(zn) >= 0) throw Qn(`Invalid field path (${e}). Paths must not contain '~', '*', '/', '[', or ']'`, t,
|
|
4355
4356
|
/* hasConverter= */ !1,
|
|
4356
|
-
/* path= */ void 0,
|
|
4357
|
+
/* path= */ void 0, n);
|
|
4357
4358
|
try {
|
|
4358
|
-
return new
|
|
4359
|
+
return new yn(...e.split("."))._internalPath;
|
|
4359
4360
|
} catch (r) {
|
|
4360
|
-
throw
|
|
4361
|
+
throw Qn(`Invalid field path (${e}). Paths must not be empty, begin with '.', end with '.', or contain '..'`, t,
|
|
4361
4362
|
/* hasConverter= */ !1,
|
|
4362
|
-
/* path= */ void 0,
|
|
4363
|
+
/* path= */ void 0, n);
|
|
4363
4364
|
}
|
|
4364
4365
|
}
|
|
4365
4366
|
|
|
4366
|
-
function
|
|
4367
|
+
function Qn(t, e, n, r, s) {
|
|
4367
4368
|
const i = r && !r.isEmpty(), o = void 0 !== s;
|
|
4368
|
-
let u = `Function ${
|
|
4369
|
-
|
|
4369
|
+
let u = `Function ${e}() called with invalid data`;
|
|
4370
|
+
n && (u += " (via `toFirestore()`)"), u += ". ";
|
|
4370
4371
|
let c = "";
|
|
4371
4372
|
return (i || o) && (c += " (found", i && (c += ` in field ${r}`), o && (c += ` in document ${s}`),
|
|
4372
4373
|
c += ")"), new U(A, u + t + c);
|
|
4373
4374
|
}
|
|
4374
4375
|
|
|
4375
|
-
/** Checks `haystack` if FieldPath `needle` is present. Runs in O(n). */ function
|
|
4376
|
-
return t.some((t => t.isEqual(
|
|
4376
|
+
/** Checks `haystack` if FieldPath `needle` is present. Runs in O(n). */ function Wn(t, e) {
|
|
4377
|
+
return t.some((t => t.isEqual(e)));
|
|
4377
4378
|
}
|
|
4378
4379
|
|
|
4379
4380
|
/**
|
|
@@ -4400,14 +4401,14 @@ function We(t, n, e, r, s) {
|
|
|
4400
4401
|
* For a `DocumentSnapshot` that points to a non-existing document, any data
|
|
4401
4402
|
* access will return 'undefined'. You can use the `exists()` method to
|
|
4402
4403
|
* explicitly verify a document's existence.
|
|
4403
|
-
*/ class
|
|
4404
|
+
*/ class Yn {
|
|
4404
4405
|
// Note: This class is stripped down version of the DocumentSnapshot in
|
|
4405
4406
|
// the legacy SDK. The changes are:
|
|
4406
4407
|
// - No support for SnapshotMetadata.
|
|
4407
4408
|
// - No support for SnapshotOptions.
|
|
4408
4409
|
/** @hideconstructor protected */
|
|
4409
|
-
constructor(t,
|
|
4410
|
-
this._firestore = t, this._userDataWriter =
|
|
4410
|
+
constructor(t, e, n, r, s) {
|
|
4411
|
+
this._firestore = t, this._userDataWriter = e, this._key = n, this._document = r,
|
|
4411
4412
|
this._converter = s;
|
|
4412
4413
|
}
|
|
4413
4414
|
/** Property of the `DocumentSnapshot` that provides the document's ID. */ get id() {
|
|
@@ -4416,7 +4417,7 @@ function We(t, n, e, r, s) {
|
|
|
4416
4417
|
/**
|
|
4417
4418
|
* The `DocumentReference` for the document included in the `DocumentSnapshot`.
|
|
4418
4419
|
*/ get ref() {
|
|
4419
|
-
return new
|
|
4420
|
+
return new an(this._firestore, this._converter, this._key);
|
|
4420
4421
|
}
|
|
4421
4422
|
/**
|
|
4422
4423
|
* Signals whether or not the document at the snapshot's location exists.
|
|
@@ -4436,7 +4437,7 @@ function We(t, n, e, r, s) {
|
|
|
4436
4437
|
if (this._converter) {
|
|
4437
4438
|
// We only want to use the converter and create a new DocumentSnapshot
|
|
4438
4439
|
// if a converter has been provided.
|
|
4439
|
-
const t = new
|
|
4440
|
+
const t = new Hn(this._firestore, this._userDataWriter, this._key, this._document,
|
|
4440
4441
|
/* converter= */ null);
|
|
4441
4442
|
return this._converter.fromFirestore(t);
|
|
4442
4443
|
}
|
|
@@ -4456,8 +4457,8 @@ function We(t, n, e, r, s) {
|
|
|
4456
4457
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4457
4458
|
get(t) {
|
|
4458
4459
|
if (this._document) {
|
|
4459
|
-
const
|
|
4460
|
-
if (null !==
|
|
4460
|
+
const e = this._document.data.field(Xn("DocumentSnapshot.get", t));
|
|
4461
|
+
if (null !== e) return this._userDataWriter.convertValue(e);
|
|
4461
4462
|
}
|
|
4462
4463
|
}
|
|
4463
4464
|
}
|
|
@@ -4472,7 +4473,7 @@ function We(t, n, e, r, s) {
|
|
|
4472
4473
|
* `DocumentSnapshot`. Since query results contain only existing documents, the
|
|
4473
4474
|
* `exists` property will always be true and `data()` will never return
|
|
4474
4475
|
* 'undefined'.
|
|
4475
|
-
*/ class
|
|
4476
|
+
*/ class Hn extends Yn {
|
|
4476
4477
|
/**
|
|
4477
4478
|
* Retrieves all fields in the document as an `Object`.
|
|
4478
4479
|
*
|
|
@@ -4490,10 +4491,10 @@ function We(t, n, e, r, s) {
|
|
|
4490
4491
|
* array via the `docs` property or enumerated using the `forEach` method. The
|
|
4491
4492
|
* number of documents can be determined via the `empty` and `size`
|
|
4492
4493
|
* properties.
|
|
4493
|
-
*/ class
|
|
4494
|
+
*/ class Kn {
|
|
4494
4495
|
/** @hideconstructor */
|
|
4495
|
-
constructor(t,
|
|
4496
|
-
this._docs =
|
|
4496
|
+
constructor(t, e) {
|
|
4497
|
+
this._docs = e, this.query = t;
|
|
4497
4498
|
}
|
|
4498
4499
|
/** An array of all the documents in the `QuerySnapshot`. */ get docs() {
|
|
4499
4500
|
return [ ...this._docs ];
|
|
@@ -4510,8 +4511,8 @@ function We(t, n, e, r, s) {
|
|
|
4510
4511
|
* @param callback - A callback to be called with a `QueryDocumentSnapshot` for
|
|
4511
4512
|
* each document in the snapshot.
|
|
4512
4513
|
* @param thisArg - The `this` binding for the callback.
|
|
4513
|
-
*/ forEach(t,
|
|
4514
|
-
this._docs.forEach(t,
|
|
4514
|
+
*/ forEach(t, e) {
|
|
4515
|
+
this._docs.forEach(t, e);
|
|
4515
4516
|
}
|
|
4516
4517
|
}
|
|
4517
4518
|
|
|
@@ -4521,14 +4522,14 @@ function We(t, n, e, r, s) {
|
|
|
4521
4522
|
* @param left - A snapshot to compare.
|
|
4522
4523
|
* @param right - A snapshot to compare.
|
|
4523
4524
|
* @returns true if the snapshots are equal.
|
|
4524
|
-
*/ function
|
|
4525
|
-
return t = getModularInstance(t),
|
|
4525
|
+
*/ function Jn(t, e) {
|
|
4526
|
+
return t = getModularInstance(t), e = getModularInstance(e), t instanceof Yn && e instanceof Yn ? t._firestore === e._firestore && t._key.isEqual(e._key) && (null === t._document ? null === e._document : t._document.isEqual(e._document)) && t._converter === e._converter : t instanceof Kn && e instanceof Kn && (pn(t.query, e.query) && _t(t.docs, e.docs, Jn));
|
|
4526
4527
|
}
|
|
4527
4528
|
|
|
4528
4529
|
/**
|
|
4529
4530
|
* Helper that calls `fromDotSeparatedString()` but wraps any error thrown.
|
|
4530
|
-
*/ function
|
|
4531
|
-
return "string" == typeof
|
|
4531
|
+
*/ function Xn(t, e) {
|
|
4532
|
+
return "string" == typeof e ? Gn(t, e) : e instanceof yn ? e._internalPath : e._delegate._internalPath;
|
|
4532
4533
|
}
|
|
4533
4534
|
|
|
4534
4535
|
/**
|
|
@@ -4555,7 +4556,7 @@ function We(t, n, e, r, s) {
|
|
|
4555
4556
|
* can then be passed to {@link query} to create a new query instance that
|
|
4556
4557
|
* also contains this `QueryConstraint`.
|
|
4557
4558
|
*/
|
|
4558
|
-
class
|
|
4559
|
+
class Zn {}
|
|
4559
4560
|
|
|
4560
4561
|
/**
|
|
4561
4562
|
* Creates a new immutable instance of {@link Query} that is extended to also include
|
|
@@ -4565,43 +4566,43 @@ class tr {}
|
|
|
4565
4566
|
* @param queryConstraints - The list of {@link QueryConstraint}s to apply.
|
|
4566
4567
|
* @throws if any of the provided query constraints cannot be combined with the
|
|
4567
4568
|
* existing or new constraints.
|
|
4568
|
-
*/ function
|
|
4569
|
-
for (const
|
|
4569
|
+
*/ function tr(t, ...e) {
|
|
4570
|
+
for (const n of e) t = n._apply(t);
|
|
4570
4571
|
return t;
|
|
4571
4572
|
}
|
|
4572
4573
|
|
|
4573
|
-
class er extends
|
|
4574
|
-
constructor(t,
|
|
4575
|
-
super(), this.dt = t, this.wt =
|
|
4574
|
+
class er extends Zn {
|
|
4575
|
+
constructor(t, e, n) {
|
|
4576
|
+
super(), this.dt = t, this.wt = e, this.yt = n, this.type = "where";
|
|
4576
4577
|
}
|
|
4577
4578
|
_apply(t) {
|
|
4578
|
-
const
|
|
4579
|
+
const e = Vn(t.firestore), n = function(t, e, n, r, s, i, o) {
|
|
4579
4580
|
let u;
|
|
4580
4581
|
if (s.isKeyField()) {
|
|
4581
4582
|
if ("array-contains" /* ARRAY_CONTAINS */ === i || "array-contains-any" /* ARRAY_CONTAINS_ANY */ === i) throw new U(A, `Invalid Query. You can't perform '${i}' queries on documentId().`);
|
|
4582
4583
|
if ("in" /* IN */ === i || "not-in" /* NOT_IN */ === i) {
|
|
4583
|
-
|
|
4584
|
-
const
|
|
4585
|
-
for (const
|
|
4584
|
+
pr(o, i);
|
|
4585
|
+
const e = [];
|
|
4586
|
+
for (const n of o) e.push(mr(r, t, n));
|
|
4586
4587
|
u = {
|
|
4587
4588
|
arrayValue: {
|
|
4588
|
-
values:
|
|
4589
|
+
values: e
|
|
4589
4590
|
}
|
|
4590
4591
|
};
|
|
4591
|
-
} else u =
|
|
4592
|
-
} else "in" /* IN */ !== i && "not-in" /* NOT_IN */ !== i && "array-contains-any" /* ARRAY_CONTAINS_ANY */ !== i ||
|
|
4593
|
-
u =
|
|
4592
|
+
} else u = mr(r, t, o);
|
|
4593
|
+
} else "in" /* IN */ !== i && "not-in" /* NOT_IN */ !== i && "array-contains-any" /* ARRAY_CONTAINS_ANY */ !== i || pr(o, i),
|
|
4594
|
+
u = Ln(n, e, o,
|
|
4594
4595
|
/* allowArrays= */ "in" /* IN */ === i || "not-in" /* NOT_IN */ === i);
|
|
4595
4596
|
const c = Wt.create(s, i, u);
|
|
4596
|
-
return function(t,
|
|
4597
|
-
if (
|
|
4598
|
-
const
|
|
4599
|
-
if (null !==
|
|
4600
|
-
const r =
|
|
4601
|
-
null !== r &&
|
|
4597
|
+
return function(t, e) {
|
|
4598
|
+
if (e.N()) {
|
|
4599
|
+
const n = ae(t);
|
|
4600
|
+
if (null !== n && !n.isEqual(e.field)) throw new U(A, `Invalid query. All where filters with an inequality (<, <=, !=, not-in, >, or >=) must be on the same field. But you have inequality filters on '${n.toString()}' and '${e.field.toString()}'`);
|
|
4601
|
+
const r = ce(t);
|
|
4602
|
+
null !== r && yr(t, e.field, r);
|
|
4602
4603
|
}
|
|
4603
|
-
const
|
|
4604
|
-
for (const
|
|
4604
|
+
const n = function(t, e) {
|
|
4605
|
+
for (const n of t.filters) if (e.indexOf(n.op) >= 0) return n.op;
|
|
4605
4606
|
return null;
|
|
4606
4607
|
}(t,
|
|
4607
4608
|
/**
|
|
@@ -4636,16 +4637,16 @@ class er extends tr {
|
|
|
4636
4637
|
default:
|
|
4637
4638
|
return [];
|
|
4638
4639
|
}
|
|
4639
|
-
}(
|
|
4640
|
-
if (null !==
|
|
4640
|
+
}(e.op));
|
|
4641
|
+
if (null !== n)
|
|
4641
4642
|
// Special case when it's a duplicate op to give a slightly clearer error message.
|
|
4642
|
-
throw
|
|
4643
|
+
throw n === e.op ? new U(A, `Invalid query. You cannot use more than one '${e.op.toString()}' filter.`) : new U(A, `Invalid query. You cannot use '${e.op.toString()}' filters with '${n.toString()}' filters.`);
|
|
4643
4644
|
}(t, c), c;
|
|
4644
|
-
}(t._query, "where",
|
|
4645
|
-
return new
|
|
4646
|
-
const
|
|
4647
|
-
return new
|
|
4648
|
-
}(t._query,
|
|
4645
|
+
}(t._query, "where", e, t.firestore._databaseId, this.dt, this.wt, this.yt);
|
|
4646
|
+
return new hn(t.firestore, t.converter, function(t, e) {
|
|
4647
|
+
const n = t.filters.concat([ e ]);
|
|
4648
|
+
return new oe(t.path, t.collectionGroup, t.explicitOrderBy.slice(), n, t.limit, t.limitType, t.startAt, t.endAt);
|
|
4649
|
+
}(t._query, n));
|
|
4649
4650
|
}
|
|
4650
4651
|
}
|
|
4651
4652
|
|
|
@@ -4659,25 +4660,25 @@ class er extends tr {
|
|
|
4659
4660
|
* "<=", "!=").
|
|
4660
4661
|
* @param value - The value for comparison
|
|
4661
4662
|
* @returns The created {@link Query}.
|
|
4662
|
-
*/ function
|
|
4663
|
-
const r =
|
|
4664
|
-
return new er(s, r,
|
|
4663
|
+
*/ function nr(t, e, n) {
|
|
4664
|
+
const r = e, s = Xn("where", t);
|
|
4665
|
+
return new er(s, r, n);
|
|
4665
4666
|
}
|
|
4666
4667
|
|
|
4667
|
-
class
|
|
4668
|
-
constructor(t,
|
|
4669
|
-
super(), this.dt = t, this._t =
|
|
4668
|
+
class rr extends Zn {
|
|
4669
|
+
constructor(t, e) {
|
|
4670
|
+
super(), this.dt = t, this._t = e, this.type = "orderBy";
|
|
4670
4671
|
}
|
|
4671
4672
|
_apply(t) {
|
|
4672
|
-
const
|
|
4673
|
+
const e = function(t, e, n) {
|
|
4673
4674
|
if (null !== t.startAt) throw new U(A, "Invalid query. You must not call startAt() or startAfter() before calling orderBy().");
|
|
4674
4675
|
if (null !== t.endAt) throw new U(A, "Invalid query. You must not call endAt() or endBefore() before calling orderBy().");
|
|
4675
|
-
const r = new
|
|
4676
|
-
return function(t,
|
|
4677
|
-
if (null ===
|
|
4676
|
+
const r = new re(e, n);
|
|
4677
|
+
return function(t, e) {
|
|
4678
|
+
if (null === ce(t)) {
|
|
4678
4679
|
// This is the first order by. It must match any inequality.
|
|
4679
|
-
const
|
|
4680
|
-
null !==
|
|
4680
|
+
const n = ae(t);
|
|
4681
|
+
null !== n && yr(t, n, e.field);
|
|
4681
4682
|
}
|
|
4682
4683
|
}(t, r), r;
|
|
4683
4684
|
}
|
|
@@ -4692,11 +4693,11 @@ class sr extends tr {
|
|
|
4692
4693
|
* of the query or if any of the fields in the order by are an uncommitted
|
|
4693
4694
|
* server timestamp.
|
|
4694
4695
|
*/ (t._query, this.dt, this._t);
|
|
4695
|
-
return new
|
|
4696
|
+
return new hn(t.firestore, t.converter, function(t, e) {
|
|
4696
4697
|
// TODO(dimond): validate that orderBy does not list the same key twice.
|
|
4697
|
-
const
|
|
4698
|
-
return new
|
|
4699
|
-
}(t._query,
|
|
4698
|
+
const n = t.explicitOrderBy.concat([ e ]);
|
|
4699
|
+
return new oe(t.path, t.collectionGroup, n, t.filters.slice(), t.limit, t.limitType, t.startAt, t.endAt);
|
|
4700
|
+
}(t._query, e));
|
|
4700
4701
|
}
|
|
4701
4702
|
}
|
|
4702
4703
|
|
|
@@ -4708,18 +4709,18 @@ class sr extends tr {
|
|
|
4708
4709
|
* @param directionStr - Optional direction to sort by ('asc' or 'desc'). If
|
|
4709
4710
|
* not specified, order will be ascending.
|
|
4710
4711
|
* @returns The created {@link Query}.
|
|
4711
|
-
*/ function
|
|
4712
|
-
const
|
|
4713
|
-
return new
|
|
4712
|
+
*/ function sr(t, e = "asc") {
|
|
4713
|
+
const n = e, r = Xn("orderBy", t);
|
|
4714
|
+
return new rr(r, n);
|
|
4714
4715
|
}
|
|
4715
4716
|
|
|
4716
|
-
class
|
|
4717
|
-
constructor(t,
|
|
4718
|
-
super(), this.type = t, this.gt =
|
|
4717
|
+
class ir extends Zn {
|
|
4718
|
+
constructor(t, e, n) {
|
|
4719
|
+
super(), this.type = t, this.gt = e, this.vt = n;
|
|
4719
4720
|
}
|
|
4720
4721
|
_apply(t) {
|
|
4721
|
-
return new
|
|
4722
|
-
return new
|
|
4722
|
+
return new hn(t.firestore, t.converter, function(t, e, n) {
|
|
4723
|
+
return new oe(t.path, t.collectionGroup, t.explicitOrderBy.slice(), t.filters.slice(), e, n, t.startAt, t.endAt);
|
|
4723
4724
|
}(t._query, this.gt, this.vt));
|
|
4724
4725
|
}
|
|
4725
4726
|
}
|
|
@@ -4729,8 +4730,8 @@ class or extends tr {
|
|
|
4729
4730
|
*
|
|
4730
4731
|
* @param limit - The maximum number of items to return.
|
|
4731
4732
|
* @returns The created {@link Query}.
|
|
4732
|
-
*/ function
|
|
4733
|
-
return ut("limit", t), new
|
|
4733
|
+
*/ function or(t) {
|
|
4734
|
+
return ut("limit", t), new ir("limit", t, "F" /* First */);
|
|
4734
4735
|
}
|
|
4735
4736
|
|
|
4736
4737
|
/**
|
|
@@ -4741,54 +4742,56 @@ class or extends tr {
|
|
|
4741
4742
|
*
|
|
4742
4743
|
* @param limit - The maximum number of items to return.
|
|
4743
4744
|
* @returns The created {@link Query}.
|
|
4744
|
-
*/ function
|
|
4745
|
-
return ut("limitToLast", t), new
|
|
4745
|
+
*/ function ur(t) {
|
|
4746
|
+
return ut("limitToLast", t), new ir("limitToLast", t, "L" /* Last */);
|
|
4746
4747
|
}
|
|
4747
4748
|
|
|
4748
|
-
class
|
|
4749
|
-
constructor(t,
|
|
4750
|
-
super(), this.type = t, this.bt =
|
|
4749
|
+
class cr extends Zn {
|
|
4750
|
+
constructor(t, e, n) {
|
|
4751
|
+
super(), this.type = t, this.bt = e, this.Et = n;
|
|
4751
4752
|
}
|
|
4752
4753
|
_apply(t) {
|
|
4753
|
-
const
|
|
4754
|
-
return new
|
|
4755
|
-
return new
|
|
4756
|
-
}(t._query,
|
|
4754
|
+
const e = wr(t, this.type, this.bt, this.Et);
|
|
4755
|
+
return new hn(t.firestore, t.converter, function(t, e) {
|
|
4756
|
+
return new oe(t.path, t.collectionGroup, t.explicitOrderBy.slice(), t.filters.slice(), t.limit, t.limitType, e, t.endAt);
|
|
4757
|
+
}(t._query, e));
|
|
4757
4758
|
}
|
|
4758
4759
|
}
|
|
4759
4760
|
|
|
4760
|
-
function
|
|
4761
|
-
return new
|
|
4761
|
+
function ar(...t) {
|
|
4762
|
+
return new cr("startAt", t,
|
|
4763
|
+
/*inclusive=*/ !0);
|
|
4762
4764
|
}
|
|
4763
4765
|
|
|
4764
|
-
function
|
|
4765
|
-
return new
|
|
4766
|
-
/*
|
|
4766
|
+
function hr(...t) {
|
|
4767
|
+
return new cr("startAfter", t,
|
|
4768
|
+
/*inclusive=*/ !1);
|
|
4767
4769
|
}
|
|
4768
4770
|
|
|
4769
|
-
class
|
|
4770
|
-
constructor(t,
|
|
4771
|
-
super(), this.type = t, this.bt =
|
|
4771
|
+
class lr extends Zn {
|
|
4772
|
+
constructor(t, e, n) {
|
|
4773
|
+
super(), this.type = t, this.bt = e, this.Et = n;
|
|
4772
4774
|
}
|
|
4773
4775
|
_apply(t) {
|
|
4774
|
-
const
|
|
4775
|
-
return new
|
|
4776
|
-
return new
|
|
4777
|
-
}(t._query,
|
|
4776
|
+
const e = wr(t, this.type, this.bt, this.Et);
|
|
4777
|
+
return new hn(t.firestore, t.converter, function(t, e) {
|
|
4778
|
+
return new oe(t.path, t.collectionGroup, t.explicitOrderBy.slice(), t.filters.slice(), t.limit, t.limitType, t.startAt, e);
|
|
4779
|
+
}(t._query, e));
|
|
4778
4780
|
}
|
|
4779
4781
|
}
|
|
4780
4782
|
|
|
4781
|
-
function
|
|
4782
|
-
return new
|
|
4783
|
+
function fr(...t) {
|
|
4784
|
+
return new lr("endBefore", t,
|
|
4785
|
+
/*inclusive=*/ !1);
|
|
4783
4786
|
}
|
|
4784
4787
|
|
|
4785
|
-
function
|
|
4786
|
-
return new
|
|
4788
|
+
function dr(...t) {
|
|
4789
|
+
return new lr("endAt", t, /*inclusive=*/ !0);
|
|
4787
4790
|
}
|
|
4788
4791
|
|
|
4789
|
-
/** Helper function to create a bound from a document or fields */ function
|
|
4790
|
-
if (
|
|
4791
|
-
if (!r) throw new U(P, `Can't use a DocumentSnapshot that doesn't exist for ${
|
|
4792
|
+
/** Helper function to create a bound from a document or fields */ function wr(t, e, n, r) {
|
|
4793
|
+
if (n[0] = getModularInstance(n[0]), n[0] instanceof Yn) return function(t, e, n, r, s) {
|
|
4794
|
+
if (!r) throw new U(P, `Can't use a DocumentSnapshot that doesn't exist for ${n}().`);
|
|
4792
4795
|
const i = [];
|
|
4793
4796
|
// Because people expect to continue/end a query at the exact document
|
|
4794
4797
|
// provided, we need to use the implicit sort order rather than the explicit
|
|
@@ -4797,23 +4800,23 @@ function wr(...t) {
|
|
|
4797
4800
|
// the provided document. Without the key (by using the explicit sort
|
|
4798
4801
|
// orders), multiple documents could match the position, yielding duplicate
|
|
4799
4802
|
// results.
|
|
4800
|
-
for (const
|
|
4801
|
-
const t = r.data.field(
|
|
4802
|
-
if (Dt(t)) throw new U(A, 'Invalid query. You are trying to start or end a query using a document for which the field "' +
|
|
4803
|
+
for (const n of le(t)) if (n.field.isKeyField()) i.push(Ct(e, r.key)); else {
|
|
4804
|
+
const t = r.data.field(n.field);
|
|
4805
|
+
if (Dt(t)) throw new U(A, 'Invalid query. You are trying to start or end a query using a document for which the field "' + n.field + '" is an uncommitted server timestamp. (Since the value of this field is unknown, you cannot start/end a query with it.)');
|
|
4803
4806
|
if (null === t) {
|
|
4804
|
-
const t =
|
|
4807
|
+
const t = n.field.canonicalString();
|
|
4805
4808
|
throw new U(A, `Invalid query. You are trying to start or end a query using a document for which the field '${t}' (used as the orderBy) does not exist.`);
|
|
4806
4809
|
}
|
|
4807
4810
|
i.push(t);
|
|
4808
4811
|
}
|
|
4809
|
-
return new
|
|
4812
|
+
return new ne(i, s);
|
|
4810
4813
|
}
|
|
4811
4814
|
/**
|
|
4812
4815
|
* Converts a list of field values to a `Bound` for the given query.
|
|
4813
|
-
*/ (t._query, t.firestore._databaseId,
|
|
4816
|
+
*/ (t._query, t.firestore._databaseId, e, n[0]._document, r);
|
|
4814
4817
|
{
|
|
4815
|
-
const s =
|
|
4816
|
-
return function(t,
|
|
4818
|
+
const s = Vn(t.firestore);
|
|
4819
|
+
return function(t, e, n, r, s, i) {
|
|
4817
4820
|
// Use explicit order by's because it has to match the query the user made
|
|
4818
4821
|
const o = t.explicitOrderBy;
|
|
4819
4822
|
if (s.length > o.length) throw new U(A, `Too many arguments provided to ${r}(). The number of arguments must be less than or equal to the number of orderBy() clauses`);
|
|
@@ -4822,48 +4825,48 @@ function wr(...t) {
|
|
|
4822
4825
|
const c = s[i];
|
|
4823
4826
|
if (o[i].field.isKeyField()) {
|
|
4824
4827
|
if ("string" != typeof c) throw new U(A, `Invalid query. Expected a string for document ID in ${r}(), but got a ${typeof c}`);
|
|
4825
|
-
if (!
|
|
4826
|
-
const
|
|
4827
|
-
if (!
|
|
4828
|
-
const s = new
|
|
4829
|
-
u.push(Ct(
|
|
4828
|
+
if (!he(t) && -1 !== c.indexOf("/")) throw new U(A, `Invalid query. When querying a collection and ordering by documentId(), the value passed to ${r}() must be a plain document ID, but '${c}' contains a slash.`);
|
|
4829
|
+
const n = t.path.child(X.fromString(c));
|
|
4830
|
+
if (!et.isDocumentKey(n)) throw new U(A, `Invalid query. When querying a collection group and ordering by documentId(), the value passed to ${r}() must result in a valid document path, but '${n}' is not because it contains an odd number of segments.`);
|
|
4831
|
+
const s = new et(n);
|
|
4832
|
+
u.push(Ct(e, s));
|
|
4830
4833
|
} else {
|
|
4831
|
-
const t =
|
|
4834
|
+
const t = Ln(n, r, c);
|
|
4832
4835
|
u.push(t);
|
|
4833
4836
|
}
|
|
4834
4837
|
}
|
|
4835
|
-
return new
|
|
4838
|
+
return new ne(u, i);
|
|
4836
4839
|
}
|
|
4837
4840
|
/**
|
|
4838
4841
|
* Parses the given `documentIdValue` into a `ReferenceValue`, throwing
|
|
4839
4842
|
* appropriate errors if the value is anything other than a `DocumentReference`
|
|
4840
4843
|
* or `string`, or if the string is malformed.
|
|
4841
|
-
*/ (t._query, t.firestore._databaseId, s,
|
|
4844
|
+
*/ (t._query, t.firestore._databaseId, s, e, n, r);
|
|
4842
4845
|
}
|
|
4843
4846
|
}
|
|
4844
4847
|
|
|
4845
|
-
function
|
|
4846
|
-
if ("string" == typeof (
|
|
4847
|
-
if ("" ===
|
|
4848
|
-
if (!
|
|
4849
|
-
const r =
|
|
4850
|
-
if (!
|
|
4851
|
-
return Ct(t, new
|
|
4848
|
+
function mr(t, e, n) {
|
|
4849
|
+
if ("string" == typeof (n = getModularInstance(n))) {
|
|
4850
|
+
if ("" === n) throw new U(A, "Invalid query. When querying with documentId(), you must provide a valid document ID, but it was an empty string.");
|
|
4851
|
+
if (!he(e) && -1 !== n.indexOf("/")) throw new U(A, `Invalid query. When querying a collection by documentId(), you must provide a plain document ID, but '${n}' contains a '/' character.`);
|
|
4852
|
+
const r = e.path.child(X.fromString(n));
|
|
4853
|
+
if (!et.isDocumentKey(r)) throw new U(A, `Invalid query. When querying a collection group by documentId(), the value provided must result in a valid document path, but '${r}' is not because it has an odd number of segments (${r.length}).`);
|
|
4854
|
+
return Ct(t, new et(r));
|
|
4852
4855
|
}
|
|
4853
|
-
if (
|
|
4854
|
-
throw new U(A, `Invalid query. When querying with documentId(), you must provide a valid string or a DocumentReference, but it was: ${it(
|
|
4856
|
+
if (n instanceof an) return Ct(t, n._key);
|
|
4857
|
+
throw new U(A, `Invalid query. When querying with documentId(), you must provide a valid string or a DocumentReference, but it was: ${it(n)}.`);
|
|
4855
4858
|
}
|
|
4856
4859
|
|
|
4857
4860
|
/**
|
|
4858
4861
|
* Validates that the value passed into a disjunctive filter satisfies all
|
|
4859
4862
|
* array requirements.
|
|
4860
|
-
*/ function
|
|
4861
|
-
if (!Array.isArray(t) || 0 === t.length) throw new U(A, `Invalid Query. A non-empty array is required for '${
|
|
4862
|
-
if (t.length > 10) throw new U(A, `Invalid Query. '${
|
|
4863
|
+
*/ function pr(t, e) {
|
|
4864
|
+
if (!Array.isArray(t) || 0 === t.length) throw new U(A, `Invalid Query. A non-empty array is required for '${e.toString()}' filters.`);
|
|
4865
|
+
if (t.length > 10) throw new U(A, `Invalid Query. '${e.toString()}' filters support a maximum of 10 elements in the value array.`);
|
|
4863
4866
|
}
|
|
4864
4867
|
|
|
4865
|
-
function
|
|
4866
|
-
if (!
|
|
4868
|
+
function yr(t, e, n) {
|
|
4869
|
+
if (!n.isEqual(e)) throw new U(A, `Invalid query. You have a where filter with an inequality (<, <=, !=, not-in, >, or >=) on field '${e.toString()}' and so you must also use '${e.toString()}' as your first argument to orderBy(), but your first orderBy() is on field '${n.toString()}' instead.`);
|
|
4867
4870
|
}
|
|
4868
4871
|
|
|
4869
4872
|
/**
|
|
@@ -4913,17 +4916,17 @@ function _r(t, n, e) {
|
|
|
4913
4916
|
* their `set()` or fails due to invalid data originating from a `toFirestore()`
|
|
4914
4917
|
* call.
|
|
4915
4918
|
*/
|
|
4916
|
-
function
|
|
4919
|
+
function _r(t, e, n) {
|
|
4917
4920
|
let r;
|
|
4918
4921
|
// Cast to `any` in order to satisfy the union type constraint on
|
|
4919
4922
|
// toFirestore().
|
|
4920
4923
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4921
|
-
return r = t ?
|
|
4924
|
+
return r = t ? n && (n.merge || n.mergeFields) ? t.toFirestore(e, n) : t.toFirestore(e) : e,
|
|
4922
4925
|
r;
|
|
4923
4926
|
}
|
|
4924
4927
|
|
|
4925
|
-
class
|
|
4926
|
-
convertValue(t,
|
|
4928
|
+
class gr extends class {
|
|
4929
|
+
convertValue(t, e = "none") {
|
|
4927
4930
|
switch (St(t)) {
|
|
4928
4931
|
case 0 /* NullValue */ :
|
|
4929
4932
|
return null;
|
|
@@ -4938,7 +4941,7 @@ class vr extends class {
|
|
|
4938
4941
|
return this.convertTimestamp(t.timestampValue);
|
|
4939
4942
|
|
|
4940
4943
|
case 4 /* ServerTimestampValue */ :
|
|
4941
|
-
return this.convertServerTimestamp(t,
|
|
4944
|
+
return this.convertServerTimestamp(t, e);
|
|
4942
4945
|
|
|
4943
4946
|
case 5 /* StringValue */ :
|
|
4944
4947
|
return t.stringValue;
|
|
@@ -4953,32 +4956,32 @@ class vr extends class {
|
|
|
4953
4956
|
return this.convertGeoPoint(t.geoPointValue);
|
|
4954
4957
|
|
|
4955
4958
|
case 9 /* ArrayValue */ :
|
|
4956
|
-
return this.convertArray(t.arrayValue,
|
|
4959
|
+
return this.convertArray(t.arrayValue, e);
|
|
4957
4960
|
|
|
4958
4961
|
case 10 /* ObjectValue */ :
|
|
4959
|
-
return this.convertObject(t.mapValue,
|
|
4962
|
+
return this.convertObject(t.mapValue, e);
|
|
4960
4963
|
|
|
4961
4964
|
default:
|
|
4962
4965
|
throw g();
|
|
4963
4966
|
}
|
|
4964
4967
|
}
|
|
4965
|
-
convertObject(t,
|
|
4966
|
-
const
|
|
4968
|
+
convertObject(t, e) {
|
|
4969
|
+
const n = {};
|
|
4967
4970
|
return Et(t.fields, ((t, r) => {
|
|
4968
|
-
|
|
4969
|
-
})),
|
|
4971
|
+
n[t] = this.convertValue(r, e);
|
|
4972
|
+
})), n;
|
|
4970
4973
|
}
|
|
4971
4974
|
convertGeoPoint(t) {
|
|
4972
|
-
return new
|
|
4975
|
+
return new bn(Pt(t.latitude), Pt(t.longitude));
|
|
4973
4976
|
}
|
|
4974
|
-
convertArray(t,
|
|
4975
|
-
return (t.values || []).map((t => this.convertValue(t,
|
|
4977
|
+
convertArray(t, e) {
|
|
4978
|
+
return (t.values || []).map((t => this.convertValue(t, e)));
|
|
4976
4979
|
}
|
|
4977
|
-
convertServerTimestamp(t,
|
|
4978
|
-
switch (
|
|
4980
|
+
convertServerTimestamp(t, e) {
|
|
4981
|
+
switch (e) {
|
|
4979
4982
|
case "previous":
|
|
4980
|
-
const
|
|
4981
|
-
return null ==
|
|
4983
|
+
const n = Nt(t);
|
|
4984
|
+
return null == n ? null : this.convertValue(n, e);
|
|
4982
4985
|
|
|
4983
4986
|
case "estimate":
|
|
4984
4987
|
return this.convertTimestamp($t(t));
|
|
@@ -4988,16 +4991,16 @@ class vr extends class {
|
|
|
4988
4991
|
}
|
|
4989
4992
|
}
|
|
4990
4993
|
convertTimestamp(t) {
|
|
4991
|
-
const
|
|
4992
|
-
return new gt(
|
|
4994
|
+
const e = Rt(t);
|
|
4995
|
+
return new gt(e.seconds, e.nanos);
|
|
4993
4996
|
}
|
|
4994
|
-
convertDocumentKey(t,
|
|
4995
|
-
const
|
|
4996
|
-
v(
|
|
4997
|
-
const r = new K(
|
|
4998
|
-
return r.isEqual(
|
|
4997
|
+
convertDocumentKey(t, e) {
|
|
4998
|
+
const n = X.fromString(t);
|
|
4999
|
+
v(We(n));
|
|
5000
|
+
const r = new K(n.get(1), n.get(3)), s = new et(n.popFirst(5));
|
|
5001
|
+
return r.isEqual(e) ||
|
|
4999
5002
|
// TODO(b/64130202): Somehow support foreign references.
|
|
5000
|
-
p(`Document ${s} contains a document reference within a different database (${r.projectId}/${r.database}) which is not supported. It will be treated as a reference in the current database (${
|
|
5003
|
+
p(`Document ${s} contains a document reference within a different database (${r.projectId}/${r.database}) which is not supported. It will be treated as a reference in the current database (${e.projectId}/${e.database}) instead.`),
|
|
5001
5004
|
s;
|
|
5002
5005
|
}
|
|
5003
5006
|
} {
|
|
@@ -5005,11 +5008,11 @@ class vr extends class {
|
|
|
5005
5008
|
super(), this.firestore = t;
|
|
5006
5009
|
}
|
|
5007
5010
|
convertBytes(t) {
|
|
5008
|
-
return new
|
|
5011
|
+
return new gn(t);
|
|
5009
5012
|
}
|
|
5010
5013
|
convertReference(t) {
|
|
5011
|
-
const
|
|
5012
|
-
return new
|
|
5014
|
+
const e = this.convertDocumentKey(t, this.firestore._databaseId);
|
|
5015
|
+
return new an(this.firestore, /* converter= */ null, e);
|
|
5013
5016
|
}
|
|
5014
5017
|
}
|
|
5015
5018
|
|
|
@@ -5025,12 +5028,12 @@ class vr extends class {
|
|
|
5025
5028
|
* @param reference - The reference of the document to fetch.
|
|
5026
5029
|
* @returns A Promise resolved with a `DocumentSnapshot` containing the current
|
|
5027
5030
|
* document contents.
|
|
5028
|
-
*/ function
|
|
5029
|
-
const
|
|
5030
|
-
return
|
|
5031
|
-
v(1 ===
|
|
5032
|
-
const r =
|
|
5033
|
-
return new
|
|
5031
|
+
*/ function vr(t) {
|
|
5032
|
+
const e = en((t = ot(t, an)).firestore), n = new gr(t.firestore);
|
|
5033
|
+
return Xe(e, [ t._key ]).then((e => {
|
|
5034
|
+
v(1 === e.length);
|
|
5035
|
+
const r = e[0];
|
|
5036
|
+
return new Yn(t.firestore, n, t._key, r.isFoundDocument() ? r : null, t.converter);
|
|
5034
5037
|
}));
|
|
5035
5038
|
}
|
|
5036
5039
|
|
|
@@ -5045,33 +5048,33 @@ class vr extends class {
|
|
|
5045
5048
|
*
|
|
5046
5049
|
* @param query - The `Query` to execute.
|
|
5047
5050
|
* @returns A Promise that will be resolved with the results of the query.
|
|
5048
|
-
*/ function
|
|
5051
|
+
*/ function br(t) {
|
|
5049
5052
|
!function(t) {
|
|
5050
|
-
if (
|
|
5051
|
-
}((t = ot(t,
|
|
5052
|
-
const
|
|
5053
|
-
return
|
|
5054
|
-
const r =
|
|
5055
|
-
return
|
|
5053
|
+
if (ue(t) && 0 === t.explicitOrderBy.length) throw new U(q, "limitToLast() queries require specifying at least one orderBy() clause");
|
|
5054
|
+
}((t = ot(t, hn))._query);
|
|
5055
|
+
const e = en(t.firestore), n = new gr(t.firestore);
|
|
5056
|
+
return Ze(e, t._query).then((e => {
|
|
5057
|
+
const r = e.map((e => new Hn(t.firestore, n, e.key, e, t.converter)));
|
|
5058
|
+
return ue(t._query) &&
|
|
5056
5059
|
// Limit to last queries reverse the orderBy constraint that was
|
|
5057
5060
|
// specified by the user. As such, we need to reverse the order of the
|
|
5058
5061
|
// results to return the documents in the expected order.
|
|
5059
|
-
r.reverse(), new
|
|
5062
|
+
r.reverse(), new Kn(t, r);
|
|
5060
5063
|
}));
|
|
5061
5064
|
}
|
|
5062
5065
|
|
|
5063
|
-
function
|
|
5064
|
-
const r =
|
|
5065
|
-
return
|
|
5066
|
+
function Er(t, e, n) {
|
|
5067
|
+
const r = _r((t = ot(t, an)).converter, e, n), s = Dn(Vn(t.firestore), "setDoc", t._key, r, null !== t.converter, n);
|
|
5068
|
+
return Je(en(t.firestore), [ s.toMutation(t._key, be.none()) ]);
|
|
5066
5069
|
}
|
|
5067
5070
|
|
|
5068
|
-
function
|
|
5069
|
-
const s =
|
|
5071
|
+
function Tr(t, e, n, ...r) {
|
|
5072
|
+
const s = Vn((t = ot(t, an)).firestore);
|
|
5070
5073
|
// For Compat types, we have to "extract" the underlying types before
|
|
5071
5074
|
// performing validation.
|
|
5072
5075
|
let i;
|
|
5073
|
-
i = "string" == typeof (
|
|
5074
|
-
return
|
|
5076
|
+
i = "string" == typeof (e = getModularInstance(e)) || e instanceof yn ? Cn(s, "updateDoc", t._key, e, n, r) : On(s, "updateDoc", t._key, e);
|
|
5077
|
+
return Je(en(t.firestore), [ i.toMutation(t._key, be.exists(!0)) ]);
|
|
5075
5078
|
}
|
|
5076
5079
|
|
|
5077
5080
|
/**
|
|
@@ -5085,8 +5088,8 @@ function Ir(t, n, e, ...r) {
|
|
|
5085
5088
|
* @param reference - A reference to the document to delete.
|
|
5086
5089
|
* @returns A `Promise` resolved once the document has been successfully
|
|
5087
5090
|
* deleted from the backend.
|
|
5088
|
-
*/ function
|
|
5089
|
-
return
|
|
5091
|
+
*/ function Ir(t) {
|
|
5092
|
+
return Je(en((t = ot(t, an)).firestore), [ new Ae(t._key, be.none()) ]);
|
|
5090
5093
|
}
|
|
5091
5094
|
|
|
5092
5095
|
/**
|
|
@@ -5103,9 +5106,9 @@ function Ir(t, n, e, ...r) {
|
|
|
5103
5106
|
* @throws Error - If the provided input is not a valid Firestore document.
|
|
5104
5107
|
* @returns A `Promise` resolved with a `DocumentReference` pointing to the
|
|
5105
5108
|
* newly created document after it has been written to the backend.
|
|
5106
|
-
*/ function
|
|
5107
|
-
const
|
|
5108
|
-
return
|
|
5109
|
+
*/ function Ar(t, e) {
|
|
5110
|
+
const n = wn(t = ot(t, ln)), r = _r(t.converter, e), s = Dn(Vn(t.firestore), "addDoc", n._key, r, null !== n.converter, {});
|
|
5111
|
+
return Je(en(t.firestore), [ s.toMutation(n._key, be.exists(!1)) ]).then((() => n));
|
|
5109
5112
|
}
|
|
5110
5113
|
|
|
5111
5114
|
/**
|
|
@@ -5127,15 +5130,15 @@ function Ir(t, n, e, ...r) {
|
|
|
5127
5130
|
/**
|
|
5128
5131
|
* Returns a sentinel for use with {@link @firebase/firestore/lite#(updateDoc:1)} or
|
|
5129
5132
|
* {@link @firebase/firestore/lite#(setDoc:1)} with `{merge: true}` to mark a field for deletion.
|
|
5130
|
-
*/ function
|
|
5131
|
-
return new
|
|
5133
|
+
*/ function Rr() {
|
|
5134
|
+
return new Nn("deleteField");
|
|
5132
5135
|
}
|
|
5133
5136
|
|
|
5134
5137
|
/**
|
|
5135
5138
|
* Returns a sentinel used with {@link @firebase/firestore/lite#(setDoc:1)} or {@link @firebase/firestore/lite#(updateDoc:1)} to
|
|
5136
5139
|
* include a server-generated timestamp in the written data.
|
|
5137
|
-
*/ function
|
|
5138
|
-
return new
|
|
5140
|
+
*/ function Pr() {
|
|
5141
|
+
return new Sn("serverTimestamp");
|
|
5139
5142
|
}
|
|
5140
5143
|
|
|
5141
5144
|
/**
|
|
@@ -5149,10 +5152,10 @@ function Ir(t, n, e, ...r) {
|
|
|
5149
5152
|
* @param elements - The elements to union into the array.
|
|
5150
5153
|
* @returns The `FieldValue` sentinel for use in a call to `setDoc()` or
|
|
5151
5154
|
* `updateDoc()`.
|
|
5152
|
-
*/ function
|
|
5155
|
+
*/ function Vr(...t) {
|
|
5153
5156
|
// NOTE: We don't actually parse the data until it's used in set() or
|
|
5154
5157
|
// update() since we'd need the Firestore instance to do this.
|
|
5155
|
-
return new
|
|
5158
|
+
return new Fn("arrayUnion", t);
|
|
5156
5159
|
}
|
|
5157
5160
|
|
|
5158
5161
|
/**
|
|
@@ -5165,10 +5168,10 @@ function Ir(t, n, e, ...r) {
|
|
|
5165
5168
|
* @param elements - The elements to remove from the array.
|
|
5166
5169
|
* @returns The `FieldValue` sentinel for use in a call to `setDoc()` or
|
|
5167
5170
|
* `updateDoc()`
|
|
5168
|
-
*/ function
|
|
5171
|
+
*/ function Dr(...t) {
|
|
5169
5172
|
// NOTE: We don't actually parse the data until it's used in set() or
|
|
5170
5173
|
// update() since we'd need the Firestore instance to do this.
|
|
5171
|
-
return new
|
|
5174
|
+
return new xn("arrayRemove", t);
|
|
5172
5175
|
}
|
|
5173
5176
|
|
|
5174
5177
|
/**
|
|
@@ -5189,8 +5192,8 @@ function Ir(t, n, e, ...r) {
|
|
|
5189
5192
|
* @param n - The value to increment by.
|
|
5190
5193
|
* @returns The `FieldValue` sentinel for use in a call to `setDoc()` or
|
|
5191
5194
|
* `updateDoc()`
|
|
5192
|
-
*/ function
|
|
5193
|
-
return new
|
|
5195
|
+
*/ function Nr(t) {
|
|
5196
|
+
return new qn("increment", t);
|
|
5194
5197
|
}
|
|
5195
5198
|
|
|
5196
5199
|
/**
|
|
@@ -5216,25 +5219,25 @@ function Ir(t, n, e, ...r) {
|
|
|
5216
5219
|
* provides methods for adding writes to the write batch. None of the writes
|
|
5217
5220
|
* will be committed (or visible locally) until {@link WriteBatch.commit} is
|
|
5218
5221
|
* called.
|
|
5219
|
-
*/ class
|
|
5222
|
+
*/ class $r {
|
|
5220
5223
|
/** @hideconstructor */
|
|
5221
|
-
constructor(t,
|
|
5222
|
-
this._firestore = t, this._commitHandler =
|
|
5223
|
-
this._dataReader =
|
|
5224
|
+
constructor(t, e) {
|
|
5225
|
+
this._firestore = t, this._commitHandler = e, this._mutations = [], this._committed = !1,
|
|
5226
|
+
this._dataReader = Vn(t);
|
|
5224
5227
|
}
|
|
5225
|
-
set(t,
|
|
5228
|
+
set(t, e, n) {
|
|
5226
5229
|
this._verifyNotCommitted();
|
|
5227
|
-
const r =
|
|
5228
|
-
return this._mutations.push(i.toMutation(r._key,
|
|
5230
|
+
const r = Sr(t, this._firestore), s = _r(r.converter, e, n), i = Dn(this._dataReader, "WriteBatch.set", r._key, s, null !== r.converter, n);
|
|
5231
|
+
return this._mutations.push(i.toMutation(r._key, be.none())), this;
|
|
5229
5232
|
}
|
|
5230
|
-
update(t,
|
|
5233
|
+
update(t, e, n, ...r) {
|
|
5231
5234
|
this._verifyNotCommitted();
|
|
5232
|
-
const s =
|
|
5235
|
+
const s = Sr(t, this._firestore);
|
|
5233
5236
|
// For Compat types, we have to "extract" the underlying types before
|
|
5234
5237
|
// performing validation.
|
|
5235
5238
|
let i;
|
|
5236
|
-
return i = "string" == typeof (
|
|
5237
|
-
this._mutations.push(i.toMutation(s._key,
|
|
5239
|
+
return i = "string" == typeof (e = getModularInstance(e)) || e instanceof yn ? Cn(this._dataReader, "WriteBatch.update", s._key, e, n, r) : On(this._dataReader, "WriteBatch.update", s._key, e),
|
|
5240
|
+
this._mutations.push(i.toMutation(s._key, be.exists(!0))), this;
|
|
5238
5241
|
}
|
|
5239
5242
|
/**
|
|
5240
5243
|
* Deletes the document referred to by the provided {@link DocumentReference}.
|
|
@@ -5243,8 +5246,8 @@ function Ir(t, n, e, ...r) {
|
|
|
5243
5246
|
* @returns This `WriteBatch` instance. Used for chaining method calls.
|
|
5244
5247
|
*/ delete(t) {
|
|
5245
5248
|
this._verifyNotCommitted();
|
|
5246
|
-
const
|
|
5247
|
-
return this._mutations = this._mutations.concat(new
|
|
5249
|
+
const e = Sr(t, this._firestore);
|
|
5250
|
+
return this._mutations = this._mutations.concat(new Ae(e._key, be.none())), this;
|
|
5248
5251
|
}
|
|
5249
5252
|
/**
|
|
5250
5253
|
* Commits all of the writes in this write batch as a single atomic unit.
|
|
@@ -5265,8 +5268,8 @@ function Ir(t, n, e, ...r) {
|
|
|
5265
5268
|
}
|
|
5266
5269
|
}
|
|
5267
5270
|
|
|
5268
|
-
function
|
|
5269
|
-
if ((t = getModularInstance(t)).firestore !==
|
|
5271
|
+
function Sr(t, e) {
|
|
5272
|
+
if ((t = getModularInstance(t)).firestore !== e) throw new U(A, "Provided document reference is from a different Firestore instance.");
|
|
5270
5273
|
return t;
|
|
5271
5274
|
}
|
|
5272
5275
|
|
|
@@ -5282,9 +5285,9 @@ function Fr(t, n) {
|
|
|
5282
5285
|
*
|
|
5283
5286
|
* @returns A `WriteBatch` that can be used to atomically execute multiple
|
|
5284
5287
|
* writes.
|
|
5285
|
-
*/ function
|
|
5286
|
-
const
|
|
5287
|
-
return new
|
|
5288
|
+
*/ function Fr(t) {
|
|
5289
|
+
const e = en(t = ot(t, rn));
|
|
5290
|
+
return new $r(t, (t => Je(e, t)));
|
|
5288
5291
|
}
|
|
5289
5292
|
|
|
5290
5293
|
/**
|
|
@@ -5306,7 +5309,7 @@ function Fr(t, n) {
|
|
|
5306
5309
|
/**
|
|
5307
5310
|
* Internal transaction object responsible for accumulating the mutations to
|
|
5308
5311
|
* perform and the base versions for any documents read.
|
|
5309
|
-
*/ class
|
|
5312
|
+
*/ class xr {
|
|
5310
5313
|
constructor(t) {
|
|
5311
5314
|
this.datastore = t,
|
|
5312
5315
|
// The version of each document that was read during this transaction.
|
|
@@ -5326,66 +5329,66 @@ function Fr(t, n) {
|
|
|
5326
5329
|
}
|
|
5327
5330
|
async lookup(t) {
|
|
5328
5331
|
if (this.ensureCommitNotCalled(), this.mutations.length > 0) throw new U(A, "Firestore transactions require all reads to be executed before all writes.");
|
|
5329
|
-
const
|
|
5330
|
-
return
|
|
5332
|
+
const e = await Xe(this.datastore, t);
|
|
5333
|
+
return e.forEach((t => this.recordVersion(t))), e;
|
|
5331
5334
|
}
|
|
5332
|
-
set(t,
|
|
5333
|
-
this.write(
|
|
5335
|
+
set(t, e) {
|
|
5336
|
+
this.write(e.toMutation(t, this.precondition(t))), this.writtenDocs.add(t.toString());
|
|
5334
5337
|
}
|
|
5335
|
-
update(t,
|
|
5338
|
+
update(t, e) {
|
|
5336
5339
|
try {
|
|
5337
|
-
this.write(
|
|
5340
|
+
this.write(e.toMutation(t, this.preconditionForUpdate(t)));
|
|
5338
5341
|
} catch (t) {
|
|
5339
5342
|
this.lastWriteError = t;
|
|
5340
5343
|
}
|
|
5341
5344
|
this.writtenDocs.add(t.toString());
|
|
5342
5345
|
}
|
|
5343
5346
|
delete(t) {
|
|
5344
|
-
this.write(new
|
|
5347
|
+
this.write(new Ae(t, this.precondition(t))), this.writtenDocs.add(t.toString());
|
|
5345
5348
|
}
|
|
5346
5349
|
async commit() {
|
|
5347
5350
|
if (this.ensureCommitNotCalled(), this.lastWriteError) throw this.lastWriteError;
|
|
5348
5351
|
const t = this.readVersions;
|
|
5349
5352
|
// For each mutation, note that the doc was written.
|
|
5350
|
-
this.mutations.forEach((
|
|
5351
|
-
t.delete(
|
|
5353
|
+
this.mutations.forEach((e => {
|
|
5354
|
+
t.delete(e.key.toString());
|
|
5352
5355
|
})),
|
|
5353
5356
|
// For each document that was read but not written to, we want to perform
|
|
5354
5357
|
// a `verify` operation.
|
|
5355
|
-
t.forEach(((t,
|
|
5356
|
-
const
|
|
5357
|
-
this.mutations.push(new
|
|
5358
|
-
})), await
|
|
5358
|
+
t.forEach(((t, e) => {
|
|
5359
|
+
const n = et.fromPath(e);
|
|
5360
|
+
this.mutations.push(new Re(n, this.precondition(n)));
|
|
5361
|
+
})), await Je(this.datastore, this.mutations), this.committed = !0;
|
|
5359
5362
|
}
|
|
5360
5363
|
recordVersion(t) {
|
|
5361
|
-
let
|
|
5362
|
-
if (t.isFoundDocument())
|
|
5364
|
+
let e;
|
|
5365
|
+
if (t.isFoundDocument()) e = t.version; else {
|
|
5363
5366
|
if (!t.isNoDocument()) throw g();
|
|
5364
5367
|
// For deleted docs, we must use baseVersion 0 when we overwrite them.
|
|
5365
|
-
|
|
5368
|
+
e = vt.min();
|
|
5366
5369
|
}
|
|
5367
|
-
const
|
|
5368
|
-
if (
|
|
5369
|
-
if (!
|
|
5370
|
+
const n = this.readVersions.get(t.key.toString());
|
|
5371
|
+
if (n) {
|
|
5372
|
+
if (!e.isEqual(n))
|
|
5370
5373
|
// This transaction will fail no matter what.
|
|
5371
5374
|
throw new U(F, "Document version changed between two reads.");
|
|
5372
|
-
} else this.readVersions.set(t.key.toString(),
|
|
5375
|
+
} else this.readVersions.set(t.key.toString(), e);
|
|
5373
5376
|
}
|
|
5374
5377
|
/**
|
|
5375
5378
|
* Returns the version of this document when it was read in this transaction,
|
|
5376
5379
|
* as a precondition, or no precondition if it was not read.
|
|
5377
5380
|
*/ precondition(t) {
|
|
5378
|
-
const
|
|
5379
|
-
return !this.writtenDocs.has(t.toString()) &&
|
|
5381
|
+
const e = this.readVersions.get(t.toString());
|
|
5382
|
+
return !this.writtenDocs.has(t.toString()) && e ? be.updateTime(e) : be.none();
|
|
5380
5383
|
}
|
|
5381
5384
|
/**
|
|
5382
5385
|
* Returns the precondition for a document if the operation is an update.
|
|
5383
5386
|
*/ preconditionForUpdate(t) {
|
|
5384
|
-
const
|
|
5387
|
+
const e = this.readVersions.get(t.toString());
|
|
5385
5388
|
// The first time a document is written, we want to take into account the
|
|
5386
5389
|
// read time and existence
|
|
5387
|
-
if (!this.writtenDocs.has(t.toString()) &&
|
|
5388
|
-
if (
|
|
5390
|
+
if (!this.writtenDocs.has(t.toString()) && e) {
|
|
5391
|
+
if (e.isEqual(vt.min()))
|
|
5389
5392
|
// The document doesn't exist, so fail the transaction.
|
|
5390
5393
|
// This has to be validated locally because you can't send a
|
|
5391
5394
|
// precondition that a document does not exist without changing the
|
|
@@ -5397,11 +5400,11 @@ function Fr(t, n) {
|
|
|
5397
5400
|
// transaction.
|
|
5398
5401
|
throw new U(A, "Can't update a document that doesn't exist.");
|
|
5399
5402
|
// Document exists, base precondition on document update time.
|
|
5400
|
-
return
|
|
5403
|
+
return be.updateTime(e);
|
|
5401
5404
|
}
|
|
5402
5405
|
// Document was not read, so we just use the preconditions for a blind
|
|
5403
5406
|
// update.
|
|
5404
|
-
return
|
|
5407
|
+
return be.exists(!0);
|
|
5405
5408
|
}
|
|
5406
5409
|
write(t) {
|
|
5407
5410
|
this.ensureCommitNotCalled(), this.mutations.push(t);
|
|
@@ -5429,20 +5432,20 @@ function Fr(t, n) {
|
|
|
5429
5432
|
* TransactionRunner encapsulates the logic needed to run and retry transactions
|
|
5430
5433
|
* with backoff.
|
|
5431
5434
|
*/
|
|
5432
|
-
class
|
|
5433
|
-
constructor(t,
|
|
5434
|
-
this.asyncQueue = t, this.datastore =
|
|
5435
|
-
this.Tt = 5, this.It = new
|
|
5435
|
+
class qr {
|
|
5436
|
+
constructor(t, e, n, r) {
|
|
5437
|
+
this.asyncQueue = t, this.datastore = e, this.updateFunction = n, this.deferred = r,
|
|
5438
|
+
this.Tt = 5, this.It = new He(this.asyncQueue, "transaction_retry" /* TransactionRetry */);
|
|
5436
5439
|
}
|
|
5437
5440
|
/** Runs the transaction and sets the result on deferred. */ run() {
|
|
5438
5441
|
this.Tt -= 1, this.At();
|
|
5439
5442
|
}
|
|
5440
5443
|
At() {
|
|
5441
5444
|
this.It.W((async () => {
|
|
5442
|
-
const t = new
|
|
5443
|
-
|
|
5445
|
+
const t = new xr(this.datastore), e = this.Rt(t);
|
|
5446
|
+
e && e.then((e => {
|
|
5444
5447
|
this.asyncQueue.enqueueAndForget((() => t.commit().then((() => {
|
|
5445
|
-
this.deferred.resolve(
|
|
5448
|
+
this.deferred.resolve(e);
|
|
5446
5449
|
})).catch((t => {
|
|
5447
5450
|
this.Pt(t);
|
|
5448
5451
|
}))));
|
|
@@ -5453,8 +5456,8 @@ class Or {
|
|
|
5453
5456
|
}
|
|
5454
5457
|
Rt(t) {
|
|
5455
5458
|
try {
|
|
5456
|
-
const
|
|
5457
|
-
return !ct(
|
|
5459
|
+
const e = this.updateFunction(t);
|
|
5460
|
+
return !ct(e) && e.catch && e.then ? e : (this.deferred.reject(Error("Transaction callback must return a Promise")),
|
|
5458
5461
|
null);
|
|
5459
5462
|
} catch (t) {
|
|
5460
5463
|
// Do not retry errors thrown by user provided updateFunction.
|
|
@@ -5469,8 +5472,8 @@ class Or {
|
|
|
5469
5472
|
if ("FirebaseError" === t.name) {
|
|
5470
5473
|
// In transactions, the backend will fail outdated reads with FAILED_PRECONDITION and
|
|
5471
5474
|
// non-matching document versions with ABORTED. These errors should be retried.
|
|
5472
|
-
const
|
|
5473
|
-
return "aborted" ===
|
|
5475
|
+
const e = t.code;
|
|
5476
|
+
return "aborted" === e || "failed-precondition" === e || !
|
|
5474
5477
|
/**
|
|
5475
5478
|
* Determines whether an error code represents a permanent error when received
|
|
5476
5479
|
* in response to a non-write operation.
|
|
@@ -5507,7 +5510,7 @@ class Or {
|
|
|
5507
5510
|
case L:
|
|
5508
5511
|
return !0;
|
|
5509
5512
|
}
|
|
5510
|
-
}(
|
|
5513
|
+
}(e);
|
|
5511
5514
|
}
|
|
5512
5515
|
return !1;
|
|
5513
5516
|
}
|
|
@@ -5529,7 +5532,7 @@ class Or {
|
|
|
5529
5532
|
* See the License for the specific language governing permissions and
|
|
5530
5533
|
* limitations under the License.
|
|
5531
5534
|
*/
|
|
5532
|
-
/** The Platform's 'document' implementation or null if not available. */ function
|
|
5535
|
+
/** The Platform's 'document' implementation or null if not available. */ function Or() {
|
|
5533
5536
|
// `document` is not always available, e.g. in ReactNative and WebWorkers.
|
|
5534
5537
|
// eslint-disable-next-line no-restricted-globals
|
|
5535
5538
|
return "undefined" != typeof document ? document : null;
|
|
@@ -5561,9 +5564,9 @@ class Or {
|
|
|
5561
5564
|
* Note: We implement `PromiseLike` instead of `Promise`, as the `Promise` type
|
|
5562
5565
|
* in newer versions of TypeScript defines `finally`, which is not available in
|
|
5563
5566
|
* IE.
|
|
5564
|
-
*/ class
|
|
5565
|
-
constructor(t,
|
|
5566
|
-
this.asyncQueue = t, this.timerId =
|
|
5567
|
+
*/ class Cr {
|
|
5568
|
+
constructor(t, e, n, r, s) {
|
|
5569
|
+
this.asyncQueue = t, this.timerId = e, this.targetTimeMs = n, this.op = r, this.removalCallback = s,
|
|
5567
5570
|
this.deferred = new k, this.then = this.deferred.promise.then.bind(this.deferred.promise),
|
|
5568
5571
|
// It's normal for the deferred promise to be canceled (due to cancellation)
|
|
5569
5572
|
// and so we attach a dummy catch callback to avoid
|
|
@@ -5583,9 +5586,9 @@ class Or {
|
|
|
5583
5586
|
* from its delayedOperations list.
|
|
5584
5587
|
* PORTING NOTE: This exists to prevent making removeDelayedOperation() and
|
|
5585
5588
|
* the DelayedOperation class public.
|
|
5586
|
-
*/ static createAndSchedule(t,
|
|
5587
|
-
const i = Date.now() +
|
|
5588
|
-
return o.start(
|
|
5589
|
+
*/ static createAndSchedule(t, e, n, r, s) {
|
|
5590
|
+
const i = Date.now() + n, o = new Cr(t, e, i, r, s);
|
|
5591
|
+
return o.start(n), o;
|
|
5589
5592
|
}
|
|
5590
5593
|
/**
|
|
5591
5594
|
* Starts the timer. This is called immediately after construction by
|
|
@@ -5633,7 +5636,7 @@ class Or {
|
|
|
5633
5636
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
5634
5637
|
* See the License for the specific language governing permissions and
|
|
5635
5638
|
* limitations under the License.
|
|
5636
|
-
*/ class
|
|
5639
|
+
*/ class Lr {
|
|
5637
5640
|
constructor() {
|
|
5638
5641
|
// The last promise in the queue.
|
|
5639
5642
|
this.Dt = Promise.resolve(),
|
|
@@ -5656,15 +5659,15 @@ class Or {
|
|
|
5656
5659
|
// List of TimerIds to fast-forward delays for.
|
|
5657
5660
|
this.Ot = [],
|
|
5658
5661
|
// Backoff timer used to schedule retries for retryable operations
|
|
5659
|
-
this.It = new
|
|
5662
|
+
this.It = new He(this, "async_queue_retry" /* AsyncQueueRetry */),
|
|
5660
5663
|
// Visibility handler that triggers an immediate retry of all retryable
|
|
5661
5664
|
// operations. Meant to speed up recovery when we regain file system access
|
|
5662
5665
|
// after page comes into foreground.
|
|
5663
5666
|
this.Ct = () => {
|
|
5664
|
-
const t =
|
|
5667
|
+
const t = Or();
|
|
5665
5668
|
t && m("AsyncQueue", "Visibility state changed to " + t.visibilityState), this.It.H();
|
|
5666
5669
|
};
|
|
5667
|
-
const t =
|
|
5670
|
+
const t = Or();
|
|
5668
5671
|
t && "function" == typeof t.addEventListener && t.addEventListener("visibilitychange", this.Ct);
|
|
5669
5672
|
}
|
|
5670
5673
|
get isShuttingDown() {
|
|
@@ -5685,8 +5688,8 @@ class Or {
|
|
|
5685
5688
|
enterRestrictedMode(t) {
|
|
5686
5689
|
if (!this.$t) {
|
|
5687
5690
|
this.$t = !0, this.qt = t || !1;
|
|
5688
|
-
const
|
|
5689
|
-
|
|
5691
|
+
const e = Or();
|
|
5692
|
+
e && "function" == typeof e.removeEventListener && e.removeEventListener("visibilitychange", this.Ct);
|
|
5690
5693
|
}
|
|
5691
5694
|
}
|
|
5692
5695
|
enqueue(t) {
|
|
@@ -5696,9 +5699,9 @@ class Or {
|
|
|
5696
5699
|
// Create a deferred Promise that we can return to the callee. This
|
|
5697
5700
|
// allows us to return a "hanging Promise" only to the callee and still
|
|
5698
5701
|
// advance the queue even when the operation is not run.
|
|
5699
|
-
const
|
|
5700
|
-
return this.Ut((() => this.$t && this.qt ? Promise.resolve() : (t().then(
|
|
5701
|
-
|
|
5702
|
+
const e = new k;
|
|
5703
|
+
return this.Ut((() => this.$t && this.qt ? Promise.resolve() : (t().then(e.resolve, e.reject),
|
|
5704
|
+
e.promise))).then((() => e.promise));
|
|
5702
5705
|
}
|
|
5703
5706
|
enqueueRetryable(t) {
|
|
5704
5707
|
this.enqueueAndForget((() => (this.Nt.push(t), this.kt())));
|
|
@@ -5768,18 +5771,18 @@ class Or {
|
|
|
5768
5771
|
}
|
|
5769
5772
|
}
|
|
5770
5773
|
Ut(t) {
|
|
5771
|
-
const
|
|
5774
|
+
const e = this.Dt.then((() => (this.xt = !0, t().catch((t => {
|
|
5772
5775
|
this.Ft = t, this.xt = !1;
|
|
5773
|
-
const
|
|
5776
|
+
const e =
|
|
5774
5777
|
/**
|
|
5775
5778
|
* Chrome includes Error.message in Error.stack. Other browsers do not.
|
|
5776
5779
|
* This returns expected output of message + stack when available.
|
|
5777
5780
|
* @param error - Error or FirestoreError
|
|
5778
5781
|
*/
|
|
5779
5782
|
function(t) {
|
|
5780
|
-
let
|
|
5781
|
-
t.stack && (
|
|
5782
|
-
return
|
|
5783
|
+
let e = t.message || "";
|
|
5784
|
+
t.stack && (e = t.stack.includes(t.message) ? t.stack : t.message + "\n" + t.stack);
|
|
5785
|
+
return e;
|
|
5783
5786
|
}
|
|
5784
5787
|
/**
|
|
5785
5788
|
* @license
|
|
@@ -5809,15 +5812,15 @@ class Or {
|
|
|
5809
5812
|
// Re-throw the error so that this.tail becomes a rejected Promise and
|
|
5810
5813
|
// all further attempts to chain (via .then) will just short-circuit
|
|
5811
5814
|
// and return the rejected Promise.
|
|
5812
|
-
throw p("INTERNAL UNHANDLED ERROR: ",
|
|
5815
|
+
throw p("INTERNAL UNHANDLED ERROR: ", e), t;
|
|
5813
5816
|
})).then((t => (this.xt = !1, t))))));
|
|
5814
|
-
return this.Dt =
|
|
5817
|
+
return this.Dt = e, e;
|
|
5815
5818
|
}
|
|
5816
|
-
enqueueAfterDelay(t,
|
|
5819
|
+
enqueueAfterDelay(t, e, n) {
|
|
5817
5820
|
this.Lt(),
|
|
5818
5821
|
// Fast-forward delays for timerIds that have been overriden.
|
|
5819
|
-
this.Ot.indexOf(t) > -1 && (
|
|
5820
|
-
const r =
|
|
5822
|
+
this.Ot.indexOf(t) > -1 && (e = 0);
|
|
5823
|
+
const r = Cr.createAndSchedule(this, t, e, n, (t => this.jt(t)));
|
|
5821
5824
|
return this.St.push(r), r;
|
|
5822
5825
|
}
|
|
5823
5826
|
Lt() {
|
|
@@ -5841,7 +5844,7 @@ class Or {
|
|
|
5841
5844
|
* For Tests: Determine if a delayed operation with a particular TimerId
|
|
5842
5845
|
* exists.
|
|
5843
5846
|
*/ Bt(t) {
|
|
5844
|
-
for (const
|
|
5847
|
+
for (const e of this.St) if (e.timerId === t) return !0;
|
|
5845
5848
|
return !1;
|
|
5846
5849
|
}
|
|
5847
5850
|
/**
|
|
@@ -5854,8 +5857,8 @@ class Or {
|
|
|
5854
5857
|
// Note that draining may generate more delayed ops, so we do that first.
|
|
5855
5858
|
return this.Mt().then((() => {
|
|
5856
5859
|
// Run ops in the same order they'd run if they ran naturally.
|
|
5857
|
-
this.St.sort(((t,
|
|
5858
|
-
for (const
|
|
5860
|
+
this.St.sort(((t, e) => t.targetTimeMs - e.targetTimeMs));
|
|
5861
|
+
for (const e of this.St) if (e.skipDelay(), "all" /* All */ !== t && e.timerId === t) break;
|
|
5859
5862
|
return this.Mt();
|
|
5860
5863
|
}));
|
|
5861
5864
|
}
|
|
@@ -5866,15 +5869,15 @@ class Or {
|
|
|
5866
5869
|
}
|
|
5867
5870
|
/** Called once a DelayedOperation is run or canceled. */ jt(t) {
|
|
5868
5871
|
// NOTE: indexOf / slice are O(n), but delayedOperations is expected to be small.
|
|
5869
|
-
const
|
|
5870
|
-
this.St.splice(
|
|
5872
|
+
const e = this.St.indexOf(t);
|
|
5873
|
+
this.St.splice(e, 1);
|
|
5871
5874
|
}
|
|
5872
5875
|
}
|
|
5873
5876
|
|
|
5874
|
-
class
|
|
5877
|
+
class Ur {
|
|
5875
5878
|
/** @hideconstructor */
|
|
5876
|
-
constructor(t,
|
|
5877
|
-
this._firestore = t, this._transaction =
|
|
5879
|
+
constructor(t, e) {
|
|
5880
|
+
this._firestore = t, this._transaction = e, this._dataReader = Vn(t);
|
|
5878
5881
|
}
|
|
5879
5882
|
/**
|
|
5880
5883
|
* Reads the document referenced by the provided {@link DocumentReference}.
|
|
@@ -5882,25 +5885,25 @@ class kr {
|
|
|
5882
5885
|
* @param documentRef - A reference to the document to be read.
|
|
5883
5886
|
* @returns A `DocumentSnapshot` with the read data.
|
|
5884
5887
|
*/ get(t) {
|
|
5885
|
-
const
|
|
5886
|
-
return this._transaction.lookup([
|
|
5888
|
+
const e = Sr(t, this._firestore), n = new gr(this._firestore);
|
|
5889
|
+
return this._transaction.lookup([ e._key ]).then((t => {
|
|
5887
5890
|
if (!t || 1 !== t.length) return g();
|
|
5888
5891
|
const r = t[0];
|
|
5889
|
-
if (r.isFoundDocument()) return new
|
|
5890
|
-
if (r.isNoDocument()) return new
|
|
5892
|
+
if (r.isFoundDocument()) return new Yn(this._firestore, n, r.key, r, e.converter);
|
|
5893
|
+
if (r.isNoDocument()) return new Yn(this._firestore, n, e._key, null, e.converter);
|
|
5891
5894
|
throw g();
|
|
5892
5895
|
}));
|
|
5893
5896
|
}
|
|
5894
|
-
set(t,
|
|
5895
|
-
const r =
|
|
5897
|
+
set(t, e, n) {
|
|
5898
|
+
const r = Sr(t, this._firestore), s = _r(r.converter, e, n), i = Dn(this._dataReader, "Transaction.set", r._key, s, null !== r.converter, n);
|
|
5896
5899
|
return this._transaction.set(r._key, i), this;
|
|
5897
5900
|
}
|
|
5898
|
-
update(t,
|
|
5899
|
-
const s =
|
|
5901
|
+
update(t, e, n, ...r) {
|
|
5902
|
+
const s = Sr(t, this._firestore);
|
|
5900
5903
|
// For Compat types, we have to "extract" the underlying types before
|
|
5901
5904
|
// performing validation.
|
|
5902
5905
|
let i;
|
|
5903
|
-
return i = "string" == typeof (
|
|
5906
|
+
return i = "string" == typeof (e = getModularInstance(e)) || e instanceof yn ? Cn(this._dataReader, "Transaction.update", s._key, e, n, r) : On(this._dataReader, "Transaction.update", s._key, e),
|
|
5904
5907
|
this._transaction.update(s._key, i), this;
|
|
5905
5908
|
}
|
|
5906
5909
|
/**
|
|
@@ -5909,8 +5912,8 @@ class kr {
|
|
|
5909
5912
|
* @param documentRef - A reference to the document to be deleted.
|
|
5910
5913
|
* @returns This `Transaction` instance. Used for chaining method calls.
|
|
5911
5914
|
*/ delete(t) {
|
|
5912
|
-
const
|
|
5913
|
-
return this._transaction.delete(
|
|
5915
|
+
const e = Sr(t, this._firestore);
|
|
5916
|
+
return this._transaction.delete(e._key), this;
|
|
5914
5917
|
}
|
|
5915
5918
|
}
|
|
5916
5919
|
|
|
@@ -5930,9 +5933,9 @@ class kr {
|
|
|
5930
5933
|
* (the `updateFunction` returned a failed promise), the promise returned by the
|
|
5931
5934
|
* `updateFunction `is returned here. Otherwise, if the transaction failed, a
|
|
5932
5935
|
* rejected promise with the corresponding failure error is returned.
|
|
5933
|
-
*/ function
|
|
5934
|
-
const
|
|
5935
|
-
return new
|
|
5936
|
+
*/ function kr(t, e) {
|
|
5937
|
+
const n = en(t = ot(t, rn)), r = new k;
|
|
5938
|
+
return new qr(new Lr, n, (n => e(new Ur(t, n))), r).run(), r.promise;
|
|
5936
5939
|
}
|
|
5937
5940
|
|
|
5938
5941
|
/**
|
|
@@ -5944,12 +5947,12 @@ class kr {
|
|
|
5944
5947
|
* @packageDocumentation
|
|
5945
5948
|
*/ !function(t) {
|
|
5946
5949
|
f = t;
|
|
5947
|
-
}(`${SDK_VERSION}_lite`), _registerComponent(new Component("firestore/lite", ((t, {options:
|
|
5948
|
-
const
|
|
5949
|
-
return
|
|
5950
|
+
}(`${SDK_VERSION}_lite`), _registerComponent(new Component("firestore/lite", ((t, {options: e}) => {
|
|
5951
|
+
const n = t.getProvider("app").getImmediate(), r = new rn(n, new z(t.getProvider("auth-internal")), new Y(t.getProvider("app-check-internal")));
|
|
5952
|
+
return e && r._setSettings(e), r;
|
|
5950
5953
|
}), "PUBLIC")),
|
|
5951
5954
|
// RUNTIME_ENV and BUILD_TARGET are replaced by real values during the compilation
|
|
5952
|
-
registerVersion("firestore-lite", "3.4.4-canary.
|
|
5955
|
+
registerVersion("firestore-lite", "3.4.4-canary.434d87ee2", ""), registerVersion("firestore-lite", "3.4.4-canary.434d87ee2", "esm2017");
|
|
5953
5956
|
|
|
5954
|
-
export {
|
|
5957
|
+
export { gn as Bytes, ln as CollectionReference, an as DocumentReference, Yn as DocumentSnapshot, yn as FieldPath, vn as FieldValue, rn as Firestore, U as FirestoreError, bn as GeoPoint, hn as Query, Zn as QueryConstraint, Hn as QueryDocumentSnapshot, Kn as QuerySnapshot, gt as Timestamp, Ur as Transaction, $r as WriteBatch, Ar as addDoc, Dr as arrayRemove, Vr as arrayUnion, fn as collection, dn as collectionGroup, un as connectFirestoreEmulator, Ir as deleteDoc, Rr as deleteField, wn as doc, _n as documentId, dr as endAt, fr as endBefore, vr as getDoc, br as getDocs, on as getFirestore, Nr as increment, sn as initializeFirestore, or as limit, ur as limitToLast, sr as orderBy, tr as query, pn as queryEqual, mn as refEqual, kr as runTransaction, Pr as serverTimestamp, Er as setDoc, w as setLogLevel, Jn as snapshotEqual, hr as startAfter, ar as startAt, cn as terminate, Tr as updateDoc, nr as where, Fr as writeBatch };
|
|
5955
5958
|
//# sourceMappingURL=index.browser.esm2017.js.map
|