@firebase/firestore 3.4.4 → 3.4.5-2022116201138
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/CHANGELOG.md +12 -0
- package/dist/firestore/src/api/credentials.d.ts +1 -0
- package/dist/firestore/src/api/{query.d.ts → filter.d.ts} +0 -0
- package/dist/firestore/src/api/snapshot.d.ts +1 -2
- package/dist/firestore/src/api.d.ts +1 -1
- package/dist/firestore/src/core/database_info.d.ts +1 -0
- package/dist/firestore/src/core/target.d.ts +34 -5
- package/dist/firestore/src/index/index_byte_encoder.d.ts +18 -1
- package/dist/firestore/src/index/index_entry.d.ts +26 -0
- package/dist/firestore/src/lite-api/query.d.ts +2 -2
- package/dist/firestore/src/local/document_overlay_cache.d.ts +72 -0
- package/dist/firestore/src/local/index_manager.d.ts +52 -0
- package/dist/firestore/src/local/indexeddb_document_overlay_cache.d.ts +45 -0
- package/dist/firestore/src/local/indexeddb_index_manager.d.ts +40 -2
- package/dist/firestore/src/local/indexeddb_persistence.d.ts +6 -4
- package/dist/firestore/src/local/indexeddb_remote_document_cache.d.ts +2 -8
- package/dist/firestore/src/local/indexeddb_schema.d.ts +195 -7
- package/dist/firestore/src/local/local_documents_view.d.ts +0 -1
- package/dist/firestore/src/local/local_serializer.d.ts +19 -3
- package/dist/firestore/src/local/memory_document_overlay_cache.d.ts +37 -0
- package/dist/firestore/src/local/memory_index_manager.d.ts +11 -0
- package/dist/firestore/src/local/memory_persistence.d.ts +6 -2
- package/dist/firestore/src/local/memory_remote_document_cache.d.ts +1 -3
- package/dist/firestore/src/local/persistence.d.ts +8 -2
- package/dist/firestore/src/local/remote_document_cache.d.ts +7 -9
- package/dist/firestore/src/local/remote_document_change_buffer.d.ts +3 -12
- package/dist/firestore/src/local/simple_db.d.ts +1 -0
- package/dist/firestore/src/model/document.d.ts +7 -0
- package/dist/firestore/src/model/document_key.d.ts +6 -0
- package/dist/firestore/src/model/field_index.d.ts +87 -7
- package/dist/firestore/src/model/overlay.d.ts +32 -0
- package/dist/firestore/src/model/target_index_matcher.d.ts +70 -0
- package/dist/firestore/src/model/values.d.ts +7 -0
- package/dist/firestore/src/platform/node/grpc_connection.d.ts +2 -2
- package/dist/firestore/src/platform/node/load_protos.d.ts +2 -2
- package/dist/firestore/src/util/sorted_set.d.ts +18 -0
- package/dist/firestore/test/unit/local/counting_query_engine.d.ts +3 -3
- package/dist/firestore/test/unit/local/document_overlay_cache.test.d.ts +1 -0
- package/dist/firestore/test/unit/local/persistence_test_helpers.d.ts +1 -0
- package/dist/firestore/test/unit/local/test_document_overlay_cache.d.ts +38 -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 +5 -3
- package/dist/firestore/test/unit/local/test_remote_document_change_buffer.d.ts +1 -1
- package/dist/firestore/test/unit/model/field_index.test.d.ts +17 -0
- package/dist/firestore/test/unit/model/target.test.d.ts +17 -0
- package/dist/firestore/test/unit/model/target_index_matcher.test.d.ts +17 -0
- package/dist/firestore/test/util/helpers.d.ts +8 -2
- package/dist/index.d.ts +1 -2
- package/dist/index.esm2017.js +4815 -3708
- package/dist/index.esm2017.js.map +1 -1
- package/dist/index.esm5.js +4500 -3545
- package/dist/index.esm5.js.map +1 -1
- package/dist/index.node.cjs.js +2001 -389
- package/dist/index.node.cjs.js.map +1 -1
- package/dist/index.node.mjs +1981 -390
- package/dist/index.node.mjs.map +1 -1
- package/dist/index.rn.js +4798 -3733
- package/dist/index.rn.js.map +1 -1
- package/dist/internal.d.ts +265 -26
- package/dist/lite/firestore/src/api/credentials.d.ts +1 -0
- package/dist/lite/firestore/src/api/{query.d.ts → filter.d.ts} +0 -0
- package/dist/lite/firestore/src/api/snapshot.d.ts +1 -2
- package/dist/lite/firestore/src/api.d.ts +1 -1
- package/dist/lite/firestore/src/core/database_info.d.ts +1 -0
- package/dist/lite/firestore/src/core/target.d.ts +34 -5
- package/dist/lite/firestore/src/index/index_byte_encoder.d.ts +18 -1
- package/dist/lite/firestore/src/index/index_entry.d.ts +26 -0
- package/dist/lite/firestore/src/lite-api/query.d.ts +2 -2
- package/dist/lite/firestore/src/local/document_overlay_cache.d.ts +72 -0
- package/dist/lite/firestore/src/local/index_manager.d.ts +52 -0
- package/dist/lite/firestore/src/local/indexeddb_document_overlay_cache.d.ts +45 -0
- package/dist/lite/firestore/src/local/indexeddb_index_manager.d.ts +40 -2
- package/dist/lite/firestore/src/local/indexeddb_persistence.d.ts +6 -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 +195 -7
- package/dist/lite/firestore/src/local/local_documents_view.d.ts +0 -1
- package/dist/lite/firestore/src/local/local_serializer.d.ts +19 -3
- package/dist/lite/firestore/src/local/memory_document_overlay_cache.d.ts +37 -0
- package/dist/lite/firestore/src/local/memory_index_manager.d.ts +11 -0
- package/dist/lite/firestore/src/local/memory_persistence.d.ts +6 -2
- package/dist/lite/firestore/src/local/memory_remote_document_cache.d.ts +1 -3
- package/dist/lite/firestore/src/local/persistence.d.ts +8 -2
- package/dist/lite/firestore/src/local/remote_document_cache.d.ts +7 -9
- package/dist/lite/firestore/src/local/remote_document_change_buffer.d.ts +3 -12
- package/dist/lite/firestore/src/local/simple_db.d.ts +1 -0
- package/dist/lite/firestore/src/model/document.d.ts +7 -0
- package/dist/lite/firestore/src/model/document_key.d.ts +6 -0
- package/dist/lite/firestore/src/model/field_index.d.ts +87 -7
- package/dist/lite/firestore/src/model/overlay.d.ts +32 -0
- package/dist/lite/firestore/src/model/target_index_matcher.d.ts +70 -0
- package/dist/lite/firestore/src/model/values.d.ts +7 -0
- package/dist/lite/firestore/src/platform/node/grpc_connection.d.ts +2 -2
- package/dist/lite/firestore/src/platform/node/load_protos.d.ts +2 -2
- package/dist/lite/firestore/src/util/sorted_set.d.ts +18 -0
- package/dist/lite/firestore/test/unit/local/counting_query_engine.d.ts +3 -3
- package/dist/lite/firestore/test/unit/local/document_overlay_cache.test.d.ts +1 -0
- package/dist/lite/firestore/test/unit/local/persistence_test_helpers.d.ts +1 -0
- package/dist/lite/firestore/test/unit/local/test_document_overlay_cache.d.ts +38 -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 +5 -3
- package/dist/lite/firestore/test/unit/local/test_remote_document_change_buffer.d.ts +1 -1
- package/dist/lite/firestore/test/unit/model/field_index.test.d.ts +17 -0
- package/dist/lite/firestore/test/unit/model/target.test.d.ts +17 -0
- package/dist/lite/firestore/test/unit/model/target_index_matcher.test.d.ts +17 -0
- package/dist/lite/firestore/test/util/helpers.d.ts +8 -2
- package/dist/lite/index.browser.esm2017.js +1166 -1143
- package/dist/lite/index.browser.esm2017.js.map +1 -1
- package/dist/lite/index.browser.esm5.js +357 -337
- package/dist/lite/index.browser.esm5.js.map +1 -1
- package/dist/lite/index.node.cjs.js +64 -34
- package/dist/lite/index.node.cjs.js.map +1 -1
- package/dist/lite/index.node.mjs +64 -34
- package/dist/lite/index.node.mjs.map +1 -1
- package/dist/lite/index.rn.esm2017.js +344 -321
- package/dist/lite/index.rn.esm2017.js.map +1 -1
- package/dist/lite/internal.d.ts +16 -2
- package/dist/lite/packages/firestore/dist/lite/index.browser.esm2017.d.ts +122 -121
- package/dist/lite/packages/firestore/src/api/credentials.d.ts +1 -0
- package/dist/lite/packages/firestore/src/api/{query.d.ts → filter.d.ts} +0 -0
- package/dist/lite/packages/firestore/src/api/snapshot.d.ts +1 -2
- package/dist/lite/packages/firestore/src/api.d.ts +1 -1
- package/dist/lite/packages/firestore/src/core/database_info.d.ts +1 -0
- package/dist/lite/packages/firestore/src/core/target.d.ts +34 -5
- package/dist/lite/packages/firestore/src/index/index_byte_encoder.d.ts +18 -1
- package/dist/lite/packages/firestore/src/index/index_entry.d.ts +26 -0
- package/dist/lite/packages/firestore/src/lite-api/query.d.ts +2 -2
- package/dist/lite/packages/firestore/src/local/document_overlay_cache.d.ts +72 -0
- package/dist/lite/packages/firestore/src/local/index_manager.d.ts +52 -0
- package/dist/lite/packages/firestore/src/local/indexeddb_document_overlay_cache.d.ts +45 -0
- package/dist/lite/packages/firestore/src/local/indexeddb_index_manager.d.ts +40 -2
- package/dist/lite/packages/firestore/src/local/indexeddb_persistence.d.ts +6 -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 +195 -7
- package/dist/lite/packages/firestore/src/local/local_documents_view.d.ts +0 -1
- package/dist/lite/packages/firestore/src/local/local_serializer.d.ts +19 -3
- package/dist/lite/packages/firestore/src/local/memory_document_overlay_cache.d.ts +37 -0
- 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 +6 -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 +8 -2
- package/dist/lite/packages/firestore/src/local/remote_document_cache.d.ts +7 -9
- package/dist/lite/packages/firestore/src/local/remote_document_change_buffer.d.ts +3 -12
- package/dist/lite/packages/firestore/src/local/simple_db.d.ts +1 -0
- package/dist/lite/packages/firestore/src/model/document.d.ts +7 -0
- package/dist/lite/packages/firestore/src/model/document_key.d.ts +6 -0
- package/dist/lite/packages/firestore/src/model/field_index.d.ts +87 -7
- package/dist/lite/packages/firestore/src/model/overlay.d.ts +32 -0
- package/dist/lite/packages/firestore/src/model/target_index_matcher.d.ts +70 -0
- package/dist/lite/packages/firestore/src/model/values.d.ts +7 -0
- package/dist/lite/packages/firestore/src/platform/node/grpc_connection.d.ts +2 -2
- package/dist/lite/packages/firestore/src/platform/node/load_protos.d.ts +2 -2
- package/dist/lite/packages/firestore/src/util/sorted_set.d.ts +18 -0
- package/dist/lite/packages/firestore/test/unit/local/counting_query_engine.d.ts +3 -3
- package/dist/lite/packages/firestore/test/unit/local/document_overlay_cache.test.d.ts +1 -0
- package/dist/lite/packages/firestore/test/unit/local/persistence_test_helpers.d.ts +1 -0
- package/dist/lite/packages/firestore/test/unit/local/test_document_overlay_cache.d.ts +38 -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 +5 -3
- package/dist/lite/packages/firestore/test/unit/local/test_remote_document_change_buffer.d.ts +1 -1
- package/dist/lite/packages/firestore/test/unit/model/field_index.test.d.ts +17 -0
- package/dist/lite/packages/firestore/test/unit/model/target.test.d.ts +17 -0
- package/dist/lite/packages/firestore/test/unit/model/target_index_matcher.test.d.ts +17 -0
- package/dist/lite/packages/firestore/test/util/helpers.d.ts +8 -2
- package/dist/lite/private.d.ts +9 -2
- package/dist/packages/firestore/dist/index.esm2017.d.ts +199 -194
- package/dist/packages/firestore/src/api/credentials.d.ts +1 -0
- package/dist/packages/firestore/src/api/{query.d.ts → filter.d.ts} +0 -0
- package/dist/packages/firestore/src/api/snapshot.d.ts +1 -2
- package/dist/packages/firestore/src/api.d.ts +1 -1
- package/dist/packages/firestore/src/core/database_info.d.ts +1 -0
- package/dist/packages/firestore/src/core/target.d.ts +34 -5
- package/dist/packages/firestore/src/index/index_byte_encoder.d.ts +18 -1
- package/dist/packages/firestore/src/index/index_entry.d.ts +26 -0
- package/dist/packages/firestore/src/lite-api/query.d.ts +2 -2
- package/dist/packages/firestore/src/local/document_overlay_cache.d.ts +72 -0
- package/dist/packages/firestore/src/local/index_manager.d.ts +52 -0
- package/dist/packages/firestore/src/local/indexeddb_document_overlay_cache.d.ts +45 -0
- package/dist/packages/firestore/src/local/indexeddb_index_manager.d.ts +40 -2
- package/dist/packages/firestore/src/local/indexeddb_persistence.d.ts +6 -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 +195 -7
- package/dist/packages/firestore/src/local/local_documents_view.d.ts +0 -1
- package/dist/packages/firestore/src/local/local_serializer.d.ts +19 -3
- package/dist/packages/firestore/src/local/memory_document_overlay_cache.d.ts +37 -0
- package/dist/packages/firestore/src/local/memory_index_manager.d.ts +11 -0
- package/dist/packages/firestore/src/local/memory_persistence.d.ts +6 -2
- package/dist/packages/firestore/src/local/memory_remote_document_cache.d.ts +1 -3
- package/dist/packages/firestore/src/local/persistence.d.ts +8 -2
- package/dist/packages/firestore/src/local/remote_document_cache.d.ts +7 -9
- package/dist/packages/firestore/src/local/remote_document_change_buffer.d.ts +3 -12
- package/dist/packages/firestore/src/local/simple_db.d.ts +1 -0
- package/dist/packages/firestore/src/model/document.d.ts +7 -0
- package/dist/packages/firestore/src/model/document_key.d.ts +6 -0
- package/dist/packages/firestore/src/model/field_index.d.ts +87 -7
- package/dist/packages/firestore/src/model/overlay.d.ts +32 -0
- package/dist/packages/firestore/src/model/target_index_matcher.d.ts +70 -0
- package/dist/packages/firestore/src/model/values.d.ts +7 -0
- package/dist/packages/firestore/src/platform/node/grpc_connection.d.ts +2 -2
- package/dist/packages/firestore/src/platform/node/load_protos.d.ts +2 -2
- package/dist/packages/firestore/src/util/sorted_set.d.ts +18 -0
- package/dist/packages/firestore/test/unit/local/counting_query_engine.d.ts +3 -3
- package/dist/packages/firestore/test/unit/local/document_overlay_cache.test.d.ts +1 -0
- package/dist/packages/firestore/test/unit/local/persistence_test_helpers.d.ts +1 -0
- package/dist/packages/firestore/test/unit/local/test_document_overlay_cache.d.ts +38 -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 +5 -3
- package/dist/packages/firestore/test/unit/local/test_remote_document_change_buffer.d.ts +1 -1
- package/dist/packages/firestore/test/unit/model/field_index.test.d.ts +17 -0
- package/dist/packages/firestore/test/unit/model/target.test.d.ts +17 -0
- package/dist/packages/firestore/test/unit/model/target_index_matcher.test.d.ts +17 -0
- package/dist/packages/firestore/test/util/helpers.d.ts +8 -2
- package/dist/private.d.ts +258 -26
- package/package.json +4 -4
|
@@ -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.7-2022116201138";
|
|
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,11 @@ 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
|
+
}
|
|
450
|
+
static empty() {
|
|
451
|
+
return new K("", "");
|
|
449
452
|
}
|
|
450
453
|
get isDefaultDatabase() {
|
|
451
454
|
return "(default)" === this.database;
|
|
@@ -475,9 +478,9 @@ class K {
|
|
|
475
478
|
* Path represents an ordered sequence of string segments.
|
|
476
479
|
*/
|
|
477
480
|
class J {
|
|
478
|
-
constructor(t,
|
|
479
|
-
void 0 ===
|
|
480
|
-
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;
|
|
481
484
|
}
|
|
482
485
|
get length() {
|
|
483
486
|
return this.len;
|
|
@@ -486,10 +489,10 @@ class J {
|
|
|
486
489
|
return 0 === J.comparator(this, t);
|
|
487
490
|
}
|
|
488
491
|
child(t) {
|
|
489
|
-
const
|
|
492
|
+
const e = this.segments.slice(this.offset, this.limit());
|
|
490
493
|
return t instanceof J ? t.forEach((t => {
|
|
491
|
-
|
|
492
|
-
})) :
|
|
494
|
+
e.push(t);
|
|
495
|
+
})) : e.push(t), this.construct(e);
|
|
493
496
|
}
|
|
494
497
|
/** The index of one past the last segment of the path. */ limit() {
|
|
495
498
|
return this.offset + this.length;
|
|
@@ -514,28 +517,28 @@ class J {
|
|
|
514
517
|
}
|
|
515
518
|
isPrefixOf(t) {
|
|
516
519
|
if (t.length < this.length) return !1;
|
|
517
|
-
for (let
|
|
520
|
+
for (let e = 0; e < this.length; e++) if (this.get(e) !== t.get(e)) return !1;
|
|
518
521
|
return !0;
|
|
519
522
|
}
|
|
520
523
|
isImmediateParentOf(t) {
|
|
521
524
|
if (this.length + 1 !== t.length) return !1;
|
|
522
|
-
for (let
|
|
525
|
+
for (let e = 0; e < this.length; e++) if (this.get(e) !== t.get(e)) return !1;
|
|
523
526
|
return !0;
|
|
524
527
|
}
|
|
525
528
|
forEach(t) {
|
|
526
|
-
for (let
|
|
529
|
+
for (let e = this.offset, n = this.limit(); e < n; e++) t(this.segments[e]);
|
|
527
530
|
}
|
|
528
531
|
toArray() {
|
|
529
532
|
return this.segments.slice(this.offset, this.limit());
|
|
530
533
|
}
|
|
531
|
-
static comparator(t,
|
|
532
|
-
const
|
|
533
|
-
for (let r = 0; r <
|
|
534
|
-
const
|
|
535
|
-
if (
|
|
536
|
-
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;
|
|
537
540
|
}
|
|
538
|
-
return t.length <
|
|
541
|
+
return t.length < e.length ? -1 : t.length > e.length ? 1 : 0;
|
|
539
542
|
}
|
|
540
543
|
}
|
|
541
544
|
|
|
@@ -545,8 +548,8 @@ class J {
|
|
|
545
548
|
*
|
|
546
549
|
* @internal
|
|
547
550
|
*/ class X extends J {
|
|
548
|
-
construct(t,
|
|
549
|
-
return new X(t,
|
|
551
|
+
construct(t, e, n) {
|
|
552
|
+
return new X(t, e, n);
|
|
550
553
|
}
|
|
551
554
|
canonicalString() {
|
|
552
555
|
// NOTE: The client is ignorant of any path segments containing escape
|
|
@@ -565,13 +568,13 @@ class J {
|
|
|
565
568
|
// NOTE: The client is ignorant of any path segments containing escape
|
|
566
569
|
// sequences (e.g. __id123__) and just passes them through raw (they exist
|
|
567
570
|
// for legacy reasons and should not be used frequently).
|
|
568
|
-
const
|
|
569
|
-
for (const
|
|
570
|
-
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.`);
|
|
571
574
|
// Strip leading and traling slashed.
|
|
572
|
-
|
|
575
|
+
e.push(...n.split("/").filter((t => t.length > 0)));
|
|
573
576
|
}
|
|
574
|
-
return new X(
|
|
577
|
+
return new X(e);
|
|
575
578
|
}
|
|
576
579
|
static emptyPath() {
|
|
577
580
|
return new X([]);
|
|
@@ -584,8 +587,8 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
584
587
|
* A dot-separated path for navigating sub-objects within a document.
|
|
585
588
|
* @internal
|
|
586
589
|
*/ class tt extends J {
|
|
587
|
-
construct(t,
|
|
588
|
-
return new tt(t,
|
|
590
|
+
construct(t, e, n) {
|
|
591
|
+
return new tt(t, e, n);
|
|
589
592
|
}
|
|
590
593
|
/**
|
|
591
594
|
* Returns true if the string could be used as a segment in a field path
|
|
@@ -620,24 +623,24 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
620
623
|
* TODO(b/37244157): we should make this more strict. Right now, it allows
|
|
621
624
|
* non-identifier path components, even if they aren't escaped.
|
|
622
625
|
*/ static fromServerFormat(t) {
|
|
623
|
-
const
|
|
624
|
-
let
|
|
626
|
+
const e = [];
|
|
627
|
+
let n = "", r = 0;
|
|
625
628
|
const s = () => {
|
|
626
|
-
if (0 ===
|
|
627
|
-
|
|
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 = "";
|
|
628
631
|
};
|
|
629
632
|
let i = !1;
|
|
630
633
|
for (;r < t.length; ) {
|
|
631
|
-
const
|
|
632
|
-
if ("\\" ===
|
|
634
|
+
const e = t[r];
|
|
635
|
+
if ("\\" === e) {
|
|
633
636
|
if (r + 1 === t.length) throw new U(A, "Path has trailing escape character: " + t);
|
|
634
|
-
const
|
|
635
|
-
if ("\\" !==
|
|
636
|
-
|
|
637
|
-
} 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++);
|
|
638
641
|
}
|
|
639
642
|
if (s(), i) throw new U(A, "Unterminated ` in path: " + t);
|
|
640
|
-
return new tt(
|
|
643
|
+
return new tt(e);
|
|
641
644
|
}
|
|
642
645
|
static emptyPath() {
|
|
643
646
|
return new tt([]);
|
|
@@ -662,27 +665,39 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
662
665
|
*/
|
|
663
666
|
/**
|
|
664
667
|
* @internal
|
|
665
|
-
*/ class
|
|
668
|
+
*/ class et {
|
|
666
669
|
constructor(t) {
|
|
667
670
|
this.path = t;
|
|
668
671
|
}
|
|
669
672
|
static fromPath(t) {
|
|
670
|
-
return new
|
|
673
|
+
return new et(X.fromString(t));
|
|
671
674
|
}
|
|
672
675
|
static fromName(t) {
|
|
673
|
-
return new
|
|
676
|
+
return new et(X.fromString(t).popFirst(5));
|
|
677
|
+
}
|
|
678
|
+
static empty() {
|
|
679
|
+
return new et(X.emptyPath());
|
|
680
|
+
}
|
|
681
|
+
get collectionGroup() {
|
|
682
|
+
return this.path.popLast().lastSegment();
|
|
674
683
|
}
|
|
675
684
|
/** Returns true if the document is in the specified collectionId. */ hasCollectionId(t) {
|
|
676
685
|
return this.path.length >= 2 && this.path.get(this.path.length - 2) === t;
|
|
677
686
|
}
|
|
687
|
+
/** Returns the collection group (i.e. the name of the parent collection) for this key. */ getCollectionGroup() {
|
|
688
|
+
return this.path.get(this.path.length - 2);
|
|
689
|
+
}
|
|
690
|
+
/** Returns the fully qualified path to the parent collection. */ getCollectionPath() {
|
|
691
|
+
return this.path.popLast();
|
|
692
|
+
}
|
|
678
693
|
isEqual(t) {
|
|
679
694
|
return null !== t && 0 === X.comparator(this.path, t.path);
|
|
680
695
|
}
|
|
681
696
|
toString() {
|
|
682
697
|
return this.path.toString();
|
|
683
698
|
}
|
|
684
|
-
static comparator(t,
|
|
685
|
-
return X.comparator(t.path,
|
|
699
|
+
static comparator(t, e) {
|
|
700
|
+
return X.comparator(t.path, e.path);
|
|
686
701
|
}
|
|
687
702
|
static isDocumentKey(t) {
|
|
688
703
|
return t.length % 2 == 0;
|
|
@@ -693,7 +708,7 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
693
708
|
* @param segments - The segments of the path to the document
|
|
694
709
|
* @returns A new instance of DocumentKey
|
|
695
710
|
*/ static fromSegments(t) {
|
|
696
|
-
return new
|
|
711
|
+
return new et(new X(t.slice()));
|
|
697
712
|
}
|
|
698
713
|
}
|
|
699
714
|
|
|
@@ -712,8 +727,8 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
712
727
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
713
728
|
* See the License for the specific language governing permissions and
|
|
714
729
|
* limitations under the License.
|
|
715
|
-
*/ function
|
|
716
|
-
if (!
|
|
730
|
+
*/ function nt(t, e, n) {
|
|
731
|
+
if (!n) throw new U(A, `Function ${t}() cannot be called with an empty ${e}.`);
|
|
717
732
|
}
|
|
718
733
|
|
|
719
734
|
/**
|
|
@@ -725,14 +740,14 @@ const Z = /^[_a-zA-Z][_a-zA-Z0-9]*$/;
|
|
|
725
740
|
* an even numbers of segments).
|
|
726
741
|
*/
|
|
727
742
|
function rt(t) {
|
|
728
|
-
if (!
|
|
743
|
+
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}.`);
|
|
729
744
|
}
|
|
730
745
|
|
|
731
746
|
/**
|
|
732
747
|
* Validates that `path` refers to a collection (indicated by the fact it
|
|
733
748
|
* contains an odd numbers of segments).
|
|
734
749
|
*/ function st(t) {
|
|
735
|
-
if (
|
|
750
|
+
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}.`);
|
|
736
751
|
}
|
|
737
752
|
|
|
738
753
|
/**
|
|
@@ -749,7 +764,7 @@ function it(t) {
|
|
|
749
764
|
if ("object" == typeof t) {
|
|
750
765
|
if (t instanceof Array) return "an array";
|
|
751
766
|
{
|
|
752
|
-
const
|
|
767
|
+
const e =
|
|
753
768
|
/** try to get the constructor name for an object. */
|
|
754
769
|
function(t) {
|
|
755
770
|
if (t.constructor) return t.constructor.name;
|
|
@@ -763,7 +778,7 @@ function it(t) {
|
|
|
763
778
|
* arguments passed to the public API.
|
|
764
779
|
* @internal
|
|
765
780
|
*/ (t);
|
|
766
|
-
return
|
|
781
|
+
return e ? `a custom ${e} object` : "an object";
|
|
767
782
|
}
|
|
768
783
|
}
|
|
769
784
|
return "function" == typeof t ? "a function" : g();
|
|
@@ -771,22 +786,22 @@ function it(t) {
|
|
|
771
786
|
|
|
772
787
|
function ot(t,
|
|
773
788
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
774
|
-
|
|
789
|
+
e) {
|
|
775
790
|
if ("_delegate" in t && (
|
|
776
791
|
// Unwrap Compat types
|
|
777
792
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
778
|
-
t = t._delegate), !(t instanceof
|
|
779
|
-
if (
|
|
793
|
+
t = t._delegate), !(t instanceof e)) {
|
|
794
|
+
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?");
|
|
780
795
|
{
|
|
781
|
-
const
|
|
782
|
-
throw new U(A, `Expected type '${
|
|
796
|
+
const n = it(t);
|
|
797
|
+
throw new U(A, `Expected type '${e.name}', but it was: ${n}`);
|
|
783
798
|
}
|
|
784
799
|
}
|
|
785
800
|
return t;
|
|
786
801
|
}
|
|
787
802
|
|
|
788
|
-
function ut(t,
|
|
789
|
-
if (
|
|
803
|
+
function ut(t, e) {
|
|
804
|
+
if (e <= 0) throw new U(A, `Function ${t}() requires a positive number, but it was: ${e}.`);
|
|
790
805
|
}
|
|
791
806
|
|
|
792
807
|
/**
|
|
@@ -993,58 +1008,58 @@ class wt extends
|
|
|
993
1008
|
class {
|
|
994
1009
|
constructor(t) {
|
|
995
1010
|
this.databaseInfo = t, this.databaseId = t.databaseId;
|
|
996
|
-
const
|
|
997
|
-
this.h =
|
|
1011
|
+
const e = t.ssl ? "https" : "http";
|
|
1012
|
+
this.h = e + "://" + t.host, this.l = "projects/" + this.databaseId.projectId + "/databases/" + this.databaseId.database + "/documents";
|
|
998
1013
|
}
|
|
999
|
-
m(t,
|
|
1000
|
-
const i = this.p(t,
|
|
1001
|
-
m("RestConnection", "Sending: ", i,
|
|
1014
|
+
m(t, e, n, r, s) {
|
|
1015
|
+
const i = this.p(t, e);
|
|
1016
|
+
m("RestConnection", "Sending: ", i, n);
|
|
1002
1017
|
const o = {};
|
|
1003
|
-
return this.g(o, r, s), this.v(t, i, o,
|
|
1004
|
-
t)), (
|
|
1005
|
-
throw y("RestConnection", `${t} failed with error: `,
|
|
1006
|
-
|
|
1018
|
+
return this.g(o, r, s), this.v(t, i, o, n).then((t => (m("RestConnection", "Received: ", t),
|
|
1019
|
+
t)), (e => {
|
|
1020
|
+
throw y("RestConnection", `${t} failed with error: `, e, "url: ", i, "request:", n),
|
|
1021
|
+
e;
|
|
1007
1022
|
}));
|
|
1008
1023
|
}
|
|
1009
|
-
T(t,
|
|
1024
|
+
T(t, e, n, r, s) {
|
|
1010
1025
|
// The REST API automatically aggregates all of the streamed results, so we
|
|
1011
1026
|
// can just use the normal invoke() method.
|
|
1012
|
-
return this.m(t,
|
|
1027
|
+
return this.m(t, e, n, r, s);
|
|
1013
1028
|
}
|
|
1014
1029
|
/**
|
|
1015
1030
|
* Modifies the headers for a request, adding any authorization token if
|
|
1016
1031
|
* present and any additional headers for the request.
|
|
1017
|
-
*/ g(t,
|
|
1032
|
+
*/ g(t, e, n) {
|
|
1018
1033
|
t["X-Goog-Api-Client"] = "gl-js/ fire/" + f,
|
|
1019
1034
|
// Content-Type: text/plain will avoid preflight requests which might
|
|
1020
1035
|
// mess with CORS and redirects by proxies. If we add custom headers
|
|
1021
1036
|
// we will need to change this code to potentially use the $httpOverwrite
|
|
1022
1037
|
// parameter supported by ESF to avoid triggering preflight requests.
|
|
1023
1038
|
t["Content-Type"] = "text/plain", this.databaseInfo.appId && (t["X-Firebase-GMPID"] = this.databaseInfo.appId),
|
|
1024
|
-
|
|
1039
|
+
e && e.headers.forEach(((e, n) => t[n] = e)), n && n.headers.forEach(((e, n) => t[n] = e));
|
|
1025
1040
|
}
|
|
1026
|
-
p(t,
|
|
1027
|
-
const
|
|
1028
|
-
return `${this.h}/v1/${
|
|
1041
|
+
p(t, e) {
|
|
1042
|
+
const n = ht[t];
|
|
1043
|
+
return `${this.h}/v1/${e}:${n}`;
|
|
1029
1044
|
}
|
|
1030
1045
|
} {
|
|
1031
1046
|
/**
|
|
1032
1047
|
* @param databaseInfo - The connection info.
|
|
1033
1048
|
* @param fetchImpl - `fetch` or a Polyfill that implements the fetch API.
|
|
1034
1049
|
*/
|
|
1035
|
-
constructor(t,
|
|
1036
|
-
super(t), this.I =
|
|
1050
|
+
constructor(t, e) {
|
|
1051
|
+
super(t), this.I = e;
|
|
1037
1052
|
}
|
|
1038
|
-
A(t,
|
|
1053
|
+
A(t, e) {
|
|
1039
1054
|
throw new Error("Not supported by FetchConnection");
|
|
1040
1055
|
}
|
|
1041
|
-
async v(t,
|
|
1056
|
+
async v(t, e, n, r) {
|
|
1042
1057
|
const s = JSON.stringify(r);
|
|
1043
1058
|
let i;
|
|
1044
1059
|
try {
|
|
1045
|
-
i = await this.I(
|
|
1060
|
+
i = await this.I(e, {
|
|
1046
1061
|
method: "POST",
|
|
1047
|
-
headers:
|
|
1062
|
+
headers: n,
|
|
1048
1063
|
body: s
|
|
1049
1064
|
});
|
|
1050
1065
|
} catch (t) {
|
|
@@ -1095,13 +1110,13 @@ class {
|
|
|
1095
1110
|
*/
|
|
1096
1111
|
function mt(t) {
|
|
1097
1112
|
// Polyfills for IE and WebWorker by using `self` and `msCrypto` when `crypto` is not available.
|
|
1098
|
-
const
|
|
1113
|
+
const e =
|
|
1099
1114
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1100
|
-
"undefined" != typeof self && (self.crypto || self.msCrypto),
|
|
1101
|
-
if (
|
|
1115
|
+
"undefined" != typeof self && (self.crypto || self.msCrypto), n = new Uint8Array(t);
|
|
1116
|
+
if (e && "function" == typeof e.getRandomValues) e.getRandomValues(n); else
|
|
1102
1117
|
// Falls back to Math.random
|
|
1103
|
-
for (let
|
|
1104
|
-
return
|
|
1118
|
+
for (let e = 0; e < t; e++) n[e] = Math.floor(256 * Math.random());
|
|
1119
|
+
return n;
|
|
1105
1120
|
}
|
|
1106
1121
|
|
|
1107
1122
|
/**
|
|
@@ -1122,26 +1137,26 @@ function mt(t) {
|
|
|
1122
1137
|
*/ class pt {
|
|
1123
1138
|
static R() {
|
|
1124
1139
|
// Alphanumeric characters
|
|
1125
|
-
const t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
|
|
1140
|
+
const t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", e = Math.floor(256 / t.length) * t.length;
|
|
1126
1141
|
// The largest byte value that is a multiple of `char.length`.
|
|
1127
|
-
let
|
|
1128
|
-
for (;
|
|
1142
|
+
let n = "";
|
|
1143
|
+
for (;n.length < 20; ) {
|
|
1129
1144
|
const r = mt(40);
|
|
1130
1145
|
for (let s = 0; s < r.length; ++s)
|
|
1131
1146
|
// Only accept values that are [0, maxMultiple), this ensures they can
|
|
1132
1147
|
// be evenly mapped to indices of `chars` via a modulo operation.
|
|
1133
|
-
|
|
1148
|
+
n.length < 20 && r[s] < e && (n += t.charAt(r[s] % t.length));
|
|
1134
1149
|
}
|
|
1135
|
-
return
|
|
1150
|
+
return n;
|
|
1136
1151
|
}
|
|
1137
1152
|
}
|
|
1138
1153
|
|
|
1139
|
-
function yt(t,
|
|
1140
|
-
return t <
|
|
1154
|
+
function yt(t, e) {
|
|
1155
|
+
return t < e ? -1 : t > e ? 1 : 0;
|
|
1141
1156
|
}
|
|
1142
1157
|
|
|
1143
|
-
/** Helper to compare arrays using isEqual(). */ function _t(t,
|
|
1144
|
-
return t.length ===
|
|
1158
|
+
/** Helper to compare arrays using isEqual(). */ function _t(t, e, n) {
|
|
1159
|
+
return t.length === e.length && t.every(((t, r) => n(t, e[r])));
|
|
1145
1160
|
}
|
|
1146
1161
|
|
|
1147
1162
|
/**
|
|
@@ -1195,9 +1210,9 @@ class gt {
|
|
|
1195
1210
|
/**
|
|
1196
1211
|
* The fractions of a second at nanosecond resolution.*
|
|
1197
1212
|
*/
|
|
1198
|
-
|
|
1199
|
-
if (this.seconds = t, this.nanoseconds =
|
|
1200
|
-
if (
|
|
1213
|
+
e) {
|
|
1214
|
+
if (this.seconds = t, this.nanoseconds = e, e < 0) throw new U(A, "Timestamp nanoseconds out of range: " + e);
|
|
1215
|
+
if (e >= 1e9) throw new U(A, "Timestamp nanoseconds out of range: " + e);
|
|
1201
1216
|
if (t < -62135596800) throw new U(A, "Timestamp seconds out of range: " + t);
|
|
1202
1217
|
// This will break in the year 10,000.
|
|
1203
1218
|
if (t >= 253402300800) throw new U(A, "Timestamp seconds out of range: " + t);
|
|
@@ -1226,8 +1241,8 @@ class gt {
|
|
|
1226
1241
|
* @returns A new `Timestamp` representing the same point in time as the given
|
|
1227
1242
|
* number of milliseconds.
|
|
1228
1243
|
*/ static fromMillis(t) {
|
|
1229
|
-
const
|
|
1230
|
-
return new gt(
|
|
1244
|
+
const e = Math.floor(t / 1e3), n = Math.floor(1e6 * (t - 1e3 * e));
|
|
1245
|
+
return new gt(e, n);
|
|
1231
1246
|
}
|
|
1232
1247
|
/**
|
|
1233
1248
|
* Converts a `Timestamp` to a JavaScript `Date` object. This conversion
|
|
@@ -1349,13 +1364,13 @@ class gt {
|
|
|
1349
1364
|
* See the License for the specific language governing permissions and
|
|
1350
1365
|
* limitations under the License.
|
|
1351
1366
|
*/ function bt(t) {
|
|
1352
|
-
let
|
|
1353
|
-
for (const
|
|
1354
|
-
return
|
|
1367
|
+
let e = 0;
|
|
1368
|
+
for (const n in t) Object.prototype.hasOwnProperty.call(t, n) && e++;
|
|
1369
|
+
return e;
|
|
1355
1370
|
}
|
|
1356
1371
|
|
|
1357
|
-
function Et(t,
|
|
1358
|
-
for (const
|
|
1372
|
+
function Et(t, e) {
|
|
1373
|
+
for (const n in t) Object.prototype.hasOwnProperty.call(t, n) && e(n, t[n]);
|
|
1359
1374
|
}
|
|
1360
1375
|
|
|
1361
1376
|
/**
|
|
@@ -1397,11 +1412,11 @@ class Tt {
|
|
|
1397
1412
|
*
|
|
1398
1413
|
* This is an O(n) operation, where `n` is the size of the field mask.
|
|
1399
1414
|
*/ covers(t) {
|
|
1400
|
-
for (const
|
|
1415
|
+
for (const e of this.fields) if (e.isPrefixOf(t)) return !0;
|
|
1401
1416
|
return !1;
|
|
1402
1417
|
}
|
|
1403
1418
|
isEqual(t) {
|
|
1404
|
-
return _t(this.fields, t.fields, ((t,
|
|
1419
|
+
return _t(this.fields, t.fields, ((t, e) => t.isEqual(e)));
|
|
1405
1420
|
}
|
|
1406
1421
|
}
|
|
1407
1422
|
|
|
@@ -1452,23 +1467,23 @@ class It {
|
|
|
1452
1467
|
this.binaryString = t;
|
|
1453
1468
|
}
|
|
1454
1469
|
static fromBase64String(t) {
|
|
1455
|
-
const
|
|
1456
|
-
return new It(
|
|
1470
|
+
const e = atob(t);
|
|
1471
|
+
return new It(e);
|
|
1457
1472
|
}
|
|
1458
1473
|
static fromUint8Array(t) {
|
|
1459
|
-
const
|
|
1474
|
+
const e =
|
|
1460
1475
|
/**
|
|
1461
1476
|
* Helper function to convert an Uint8array to a binary string.
|
|
1462
1477
|
*/
|
|
1463
1478
|
function(t) {
|
|
1464
|
-
let
|
|
1465
|
-
for (let
|
|
1466
|
-
return
|
|
1479
|
+
let e = "";
|
|
1480
|
+
for (let n = 0; n < t.length; ++n) e += String.fromCharCode(t[n]);
|
|
1481
|
+
return e;
|
|
1467
1482
|
}
|
|
1468
1483
|
/**
|
|
1469
1484
|
* Helper function to convert a binary string to an Uint8Array.
|
|
1470
1485
|
*/ (t);
|
|
1471
|
-
return new It(
|
|
1486
|
+
return new It(e);
|
|
1472
1487
|
}
|
|
1473
1488
|
[Symbol.iterator]() {
|
|
1474
1489
|
let t = 0;
|
|
@@ -1489,9 +1504,9 @@ class It {
|
|
|
1489
1504
|
}
|
|
1490
1505
|
toUint8Array() {
|
|
1491
1506
|
return function(t) {
|
|
1492
|
-
const
|
|
1493
|
-
for (let
|
|
1494
|
-
return
|
|
1507
|
+
const e = new Uint8Array(t.length);
|
|
1508
|
+
for (let n = 0; n < t.length; n++) e[n] = t.charCodeAt(n);
|
|
1509
|
+
return e;
|
|
1495
1510
|
}
|
|
1496
1511
|
/**
|
|
1497
1512
|
* @license
|
|
@@ -1538,18 +1553,18 @@ const At = new RegExp(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.(\d+))?Z$/);
|
|
|
1538
1553
|
// The date string can have higher precision (nanos) than the Date class
|
|
1539
1554
|
// (millis), so we do some custom parsing here.
|
|
1540
1555
|
// Parse the nanos right out of the string.
|
|
1541
|
-
let
|
|
1542
|
-
const
|
|
1543
|
-
if (v(!!
|
|
1556
|
+
let e = 0;
|
|
1557
|
+
const n = At.exec(t);
|
|
1558
|
+
if (v(!!n), n[1]) {
|
|
1544
1559
|
// Pad the fraction out to 9 digits (nanos).
|
|
1545
|
-
let t =
|
|
1546
|
-
t = (t + "000000000").substr(0, 9),
|
|
1560
|
+
let t = n[1];
|
|
1561
|
+
t = (t + "000000000").substr(0, 9), e = Number(t);
|
|
1547
1562
|
}
|
|
1548
1563
|
// Parse the date to get the seconds.
|
|
1549
1564
|
const r = new Date(t);
|
|
1550
1565
|
return {
|
|
1551
1566
|
seconds: Math.floor(r.getTime() / 1e3),
|
|
1552
|
-
nanos:
|
|
1567
|
+
nanos: e
|
|
1553
1568
|
};
|
|
1554
1569
|
}
|
|
1555
1570
|
return {
|
|
@@ -1604,8 +1619,8 @@ const At = new RegExp(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.(\d+))?Z$/);
|
|
|
1604
1619
|
* - With respect to other ServerTimestampValues, they sort by their
|
|
1605
1620
|
* localWriteTime.
|
|
1606
1621
|
*/ function Dt(t) {
|
|
1607
|
-
var
|
|
1608
|
-
return "server_timestamp" === (null === (
|
|
1622
|
+
var e, n;
|
|
1623
|
+
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);
|
|
1609
1624
|
}
|
|
1610
1625
|
|
|
1611
1626
|
/**
|
|
@@ -1614,15 +1629,15 @@ const At = new RegExp(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.(\d+))?Z$/);
|
|
|
1614
1629
|
* Preserving the previous values allows the user to display the last resoled
|
|
1615
1630
|
* value until the backend responds with the timestamp.
|
|
1616
1631
|
*/ function Nt(t) {
|
|
1617
|
-
const
|
|
1618
|
-
return Dt(
|
|
1632
|
+
const e = t.mapValue.fields.__previous_value__;
|
|
1633
|
+
return Dt(e) ? Nt(e) : e;
|
|
1619
1634
|
}
|
|
1620
1635
|
|
|
1621
1636
|
/**
|
|
1622
1637
|
* Returns the local time at which this timestamp was first set.
|
|
1623
1638
|
*/ function $t(t) {
|
|
1624
|
-
const
|
|
1625
|
-
return new gt(
|
|
1639
|
+
const e = Rt(t.mapValue.fields.__local_write_time__.timestampValue);
|
|
1640
|
+
return new gt(e.seconds, e.nanos);
|
|
1626
1641
|
}
|
|
1627
1642
|
|
|
1628
1643
|
/**
|
|
@@ -1645,169 +1660,169 @@ const At = new RegExp(/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.(\d+))?Z$/);
|
|
|
1645
1660
|
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();
|
|
1646
1661
|
}
|
|
1647
1662
|
|
|
1648
|
-
/** Tests `left` and `right` for equality based on the backend semantics. */ function Ft(t,
|
|
1649
|
-
if (t ===
|
|
1650
|
-
const
|
|
1651
|
-
if (
|
|
1652
|
-
switch (
|
|
1663
|
+
/** Tests `left` and `right` for equality based on the backend semantics. */ function Ft(t, e) {
|
|
1664
|
+
if (t === e) return !0;
|
|
1665
|
+
const n = St(t);
|
|
1666
|
+
if (n !== St(e)) return !1;
|
|
1667
|
+
switch (n) {
|
|
1653
1668
|
case 0 /* NullValue */ :
|
|
1654
1669
|
return !0;
|
|
1655
1670
|
|
|
1656
1671
|
case 1 /* BooleanValue */ :
|
|
1657
|
-
return t.booleanValue ===
|
|
1672
|
+
return t.booleanValue === e.booleanValue;
|
|
1658
1673
|
|
|
1659
1674
|
case 4 /* ServerTimestampValue */ :
|
|
1660
|
-
return $t(t).isEqual($t(
|
|
1675
|
+
return $t(t).isEqual($t(e));
|
|
1661
1676
|
|
|
1662
1677
|
case 3 /* TimestampValue */ :
|
|
1663
|
-
return function(t,
|
|
1664
|
-
if ("string" == typeof t.timestampValue && "string" == typeof
|
|
1678
|
+
return function(t, e) {
|
|
1679
|
+
if ("string" == typeof t.timestampValue && "string" == typeof e.timestampValue && t.timestampValue.length === e.timestampValue.length)
|
|
1665
1680
|
// Use string equality for ISO 8601 timestamps
|
|
1666
|
-
return t.timestampValue ===
|
|
1667
|
-
const
|
|
1668
|
-
return
|
|
1669
|
-
}(t,
|
|
1681
|
+
return t.timestampValue === e.timestampValue;
|
|
1682
|
+
const n = Rt(t.timestampValue), r = Rt(e.timestampValue);
|
|
1683
|
+
return n.seconds === r.seconds && n.nanos === r.nanos;
|
|
1684
|
+
}(t, e);
|
|
1670
1685
|
|
|
1671
1686
|
case 5 /* StringValue */ :
|
|
1672
|
-
return t.stringValue ===
|
|
1687
|
+
return t.stringValue === e.stringValue;
|
|
1673
1688
|
|
|
1674
1689
|
case 6 /* BlobValue */ :
|
|
1675
|
-
return function(t,
|
|
1676
|
-
return Vt(t.bytesValue).isEqual(Vt(
|
|
1677
|
-
}(t,
|
|
1690
|
+
return function(t, e) {
|
|
1691
|
+
return Vt(t.bytesValue).isEqual(Vt(e.bytesValue));
|
|
1692
|
+
}(t, e);
|
|
1678
1693
|
|
|
1679
1694
|
case 7 /* RefValue */ :
|
|
1680
|
-
return t.referenceValue ===
|
|
1695
|
+
return t.referenceValue === e.referenceValue;
|
|
1681
1696
|
|
|
1682
1697
|
case 8 /* GeoPointValue */ :
|
|
1683
|
-
return function(t,
|
|
1684
|
-
return Pt(t.geoPointValue.latitude) === Pt(
|
|
1685
|
-
}(t,
|
|
1698
|
+
return function(t, e) {
|
|
1699
|
+
return Pt(t.geoPointValue.latitude) === Pt(e.geoPointValue.latitude) && Pt(t.geoPointValue.longitude) === Pt(e.geoPointValue.longitude);
|
|
1700
|
+
}(t, e);
|
|
1686
1701
|
|
|
1687
1702
|
case 2 /* NumberValue */ :
|
|
1688
|
-
return function(t,
|
|
1689
|
-
if ("integerValue" in t && "integerValue" in
|
|
1690
|
-
if ("doubleValue" in t && "doubleValue" in
|
|
1691
|
-
const
|
|
1692
|
-
return
|
|
1703
|
+
return function(t, e) {
|
|
1704
|
+
if ("integerValue" in t && "integerValue" in e) return Pt(t.integerValue) === Pt(e.integerValue);
|
|
1705
|
+
if ("doubleValue" in t && "doubleValue" in e) {
|
|
1706
|
+
const n = Pt(t.doubleValue), r = Pt(e.doubleValue);
|
|
1707
|
+
return n === r ? at(n) === at(r) : isNaN(n) && isNaN(r);
|
|
1693
1708
|
}
|
|
1694
1709
|
return !1;
|
|
1695
|
-
}(t,
|
|
1710
|
+
}(t, e);
|
|
1696
1711
|
|
|
1697
1712
|
case 9 /* ArrayValue */ :
|
|
1698
|
-
return _t(t.arrayValue.values || [],
|
|
1713
|
+
return _t(t.arrayValue.values || [], e.arrayValue.values || [], Ft);
|
|
1699
1714
|
|
|
1700
1715
|
case 10 /* ObjectValue */ :
|
|
1701
|
-
return function(t,
|
|
1702
|
-
const
|
|
1703
|
-
if (bt(
|
|
1704
|
-
for (const t in
|
|
1716
|
+
return function(t, e) {
|
|
1717
|
+
const n = t.mapValue.fields || {}, r = e.mapValue.fields || {};
|
|
1718
|
+
if (bt(n) !== bt(r)) return !1;
|
|
1719
|
+
for (const t in n) if (n.hasOwnProperty(t) && (void 0 === r[t] || !Ft(n[t], r[t]))) return !1;
|
|
1705
1720
|
return !0;
|
|
1706
1721
|
}
|
|
1707
|
-
/** Returns true if the ArrayValue contains the specified element. */ (t,
|
|
1722
|
+
/** Returns true if the ArrayValue contains the specified element. */ (t, e);
|
|
1708
1723
|
|
|
1709
1724
|
default:
|
|
1710
1725
|
return g();
|
|
1711
1726
|
}
|
|
1712
1727
|
}
|
|
1713
1728
|
|
|
1714
|
-
function xt(t,
|
|
1715
|
-
return void 0 !== (t.values || []).find((t => Ft(t,
|
|
1729
|
+
function xt(t, e) {
|
|
1730
|
+
return void 0 !== (t.values || []).find((t => Ft(t, e)));
|
|
1716
1731
|
}
|
|
1717
1732
|
|
|
1718
|
-
function qt(t,
|
|
1719
|
-
if (t ===
|
|
1720
|
-
const
|
|
1721
|
-
if (
|
|
1722
|
-
switch (
|
|
1733
|
+
function qt(t, e) {
|
|
1734
|
+
if (t === e) return 0;
|
|
1735
|
+
const n = St(t), r = St(e);
|
|
1736
|
+
if (n !== r) return yt(n, r);
|
|
1737
|
+
switch (n) {
|
|
1723
1738
|
case 0 /* NullValue */ :
|
|
1724
1739
|
return 0;
|
|
1725
1740
|
|
|
1726
1741
|
case 1 /* BooleanValue */ :
|
|
1727
|
-
return yt(t.booleanValue,
|
|
1742
|
+
return yt(t.booleanValue, e.booleanValue);
|
|
1728
1743
|
|
|
1729
1744
|
case 2 /* NumberValue */ :
|
|
1730
|
-
return function(t,
|
|
1731
|
-
const
|
|
1732
|
-
return
|
|
1745
|
+
return function(t, e) {
|
|
1746
|
+
const n = Pt(t.integerValue || t.doubleValue), r = Pt(e.integerValue || e.doubleValue);
|
|
1747
|
+
return n < r ? -1 : n > r ? 1 : n === r ? 0 :
|
|
1733
1748
|
// one or both are NaN.
|
|
1734
|
-
isNaN(
|
|
1735
|
-
}(t,
|
|
1749
|
+
isNaN(n) ? isNaN(r) ? 0 : -1 : 1;
|
|
1750
|
+
}(t, e);
|
|
1736
1751
|
|
|
1737
1752
|
case 3 /* TimestampValue */ :
|
|
1738
|
-
return Ot(t.timestampValue,
|
|
1753
|
+
return Ot(t.timestampValue, e.timestampValue);
|
|
1739
1754
|
|
|
1740
1755
|
case 4 /* ServerTimestampValue */ :
|
|
1741
|
-
return Ot($t(t), $t(
|
|
1756
|
+
return Ot($t(t), $t(e));
|
|
1742
1757
|
|
|
1743
1758
|
case 5 /* StringValue */ :
|
|
1744
|
-
return yt(t.stringValue,
|
|
1759
|
+
return yt(t.stringValue, e.stringValue);
|
|
1745
1760
|
|
|
1746
1761
|
case 6 /* BlobValue */ :
|
|
1747
|
-
return function(t,
|
|
1748
|
-
const
|
|
1749
|
-
return
|
|
1750
|
-
}(t.bytesValue,
|
|
1762
|
+
return function(t, e) {
|
|
1763
|
+
const n = Vt(t), r = Vt(e);
|
|
1764
|
+
return n.compareTo(r);
|
|
1765
|
+
}(t.bytesValue, e.bytesValue);
|
|
1751
1766
|
|
|
1752
1767
|
case 7 /* RefValue */ :
|
|
1753
|
-
return function(t,
|
|
1754
|
-
const
|
|
1755
|
-
for (let t = 0; t <
|
|
1756
|
-
const
|
|
1757
|
-
if (0 !==
|
|
1768
|
+
return function(t, e) {
|
|
1769
|
+
const n = t.split("/"), r = e.split("/");
|
|
1770
|
+
for (let t = 0; t < n.length && t < r.length; t++) {
|
|
1771
|
+
const e = yt(n[t], r[t]);
|
|
1772
|
+
if (0 !== e) return e;
|
|
1758
1773
|
}
|
|
1759
|
-
return yt(
|
|
1760
|
-
}(t.referenceValue,
|
|
1774
|
+
return yt(n.length, r.length);
|
|
1775
|
+
}(t.referenceValue, e.referenceValue);
|
|
1761
1776
|
|
|
1762
1777
|
case 8 /* GeoPointValue */ :
|
|
1763
|
-
return function(t,
|
|
1764
|
-
const
|
|
1765
|
-
if (0 !==
|
|
1766
|
-
return yt(Pt(t.longitude), Pt(
|
|
1767
|
-
}(t.geoPointValue,
|
|
1778
|
+
return function(t, e) {
|
|
1779
|
+
const n = yt(Pt(t.latitude), Pt(e.latitude));
|
|
1780
|
+
if (0 !== n) return n;
|
|
1781
|
+
return yt(Pt(t.longitude), Pt(e.longitude));
|
|
1782
|
+
}(t.geoPointValue, e.geoPointValue);
|
|
1768
1783
|
|
|
1769
1784
|
case 9 /* ArrayValue */ :
|
|
1770
|
-
return function(t,
|
|
1771
|
-
const
|
|
1772
|
-
for (let t = 0; t <
|
|
1773
|
-
const
|
|
1774
|
-
if (
|
|
1785
|
+
return function(t, e) {
|
|
1786
|
+
const n = t.values || [], r = e.values || [];
|
|
1787
|
+
for (let t = 0; t < n.length && t < r.length; ++t) {
|
|
1788
|
+
const e = qt(n[t], r[t]);
|
|
1789
|
+
if (e) return e;
|
|
1775
1790
|
}
|
|
1776
|
-
return yt(
|
|
1777
|
-
}(t.arrayValue,
|
|
1791
|
+
return yt(n.length, r.length);
|
|
1792
|
+
}(t.arrayValue, e.arrayValue);
|
|
1778
1793
|
|
|
1779
1794
|
case 10 /* ObjectValue */ :
|
|
1780
|
-
return function(t,
|
|
1781
|
-
const
|
|
1795
|
+
return function(t, e) {
|
|
1796
|
+
const n = t.fields || {}, r = Object.keys(n), s = e.fields || {}, i = Object.keys(s);
|
|
1782
1797
|
// Even though MapValues are likely sorted correctly based on their insertion
|
|
1783
1798
|
// order (e.g. when received from the backend), local modifications can bring
|
|
1784
1799
|
// elements out of order. We need to re-sort the elements to ensure that
|
|
1785
1800
|
// canonical IDs are independent of insertion order.
|
|
1786
1801
|
r.sort(), i.sort();
|
|
1787
1802
|
for (let t = 0; t < r.length && t < i.length; ++t) {
|
|
1788
|
-
const
|
|
1789
|
-
if (0 !==
|
|
1790
|
-
const o = qt(
|
|
1803
|
+
const e = yt(r[t], i[t]);
|
|
1804
|
+
if (0 !== e) return e;
|
|
1805
|
+
const o = qt(n[r[t]], s[i[t]]);
|
|
1791
1806
|
if (0 !== o) return o;
|
|
1792
1807
|
}
|
|
1793
1808
|
return yt(r.length, i.length);
|
|
1794
1809
|
}
|
|
1795
|
-
/** Returns a reference value for the provided database and key. */ (t.mapValue,
|
|
1810
|
+
/** Returns a reference value for the provided database and key. */ (t.mapValue, e.mapValue);
|
|
1796
1811
|
|
|
1797
1812
|
default:
|
|
1798
1813
|
throw g();
|
|
1799
1814
|
}
|
|
1800
1815
|
}
|
|
1801
1816
|
|
|
1802
|
-
function Ot(t,
|
|
1803
|
-
if ("string" == typeof t && "string" == typeof
|
|
1804
|
-
const
|
|
1805
|
-
return 0 !== s ? s : yt(
|
|
1817
|
+
function Ot(t, e) {
|
|
1818
|
+
if ("string" == typeof t && "string" == typeof e && t.length === e.length) return yt(t, e);
|
|
1819
|
+
const n = Rt(t), r = Rt(e), s = yt(n.seconds, r.seconds);
|
|
1820
|
+
return 0 !== s ? s : yt(n.nanos, r.nanos);
|
|
1806
1821
|
}
|
|
1807
1822
|
|
|
1808
|
-
function Ct(t,
|
|
1823
|
+
function Ct(t, e) {
|
|
1809
1824
|
return {
|
|
1810
|
-
referenceValue: `projects/${t.projectId}/databases/${t.database}/documents/${
|
|
1825
|
+
referenceValue: `projects/${t.projectId}/databases/${t.database}/documents/${e.path.canonicalString()}`
|
|
1811
1826
|
};
|
|
1812
1827
|
}
|
|
1813
1828
|
|
|
@@ -1835,21 +1850,21 @@ function Ct(t, n) {
|
|
|
1835
1850
|
timestampValue: Object.assign({}, t.timestampValue)
|
|
1836
1851
|
};
|
|
1837
1852
|
if (t.mapValue) {
|
|
1838
|
-
const
|
|
1853
|
+
const e = {
|
|
1839
1854
|
mapValue: {
|
|
1840
1855
|
fields: {}
|
|
1841
1856
|
}
|
|
1842
1857
|
};
|
|
1843
|
-
return Et(t.mapValue.fields, ((t,
|
|
1858
|
+
return Et(t.mapValue.fields, ((t, n) => e.mapValue.fields[t] = Mt(n))), e;
|
|
1844
1859
|
}
|
|
1845
1860
|
if (t.arrayValue) {
|
|
1846
|
-
const
|
|
1861
|
+
const e = {
|
|
1847
1862
|
arrayValue: {
|
|
1848
1863
|
values: []
|
|
1849
1864
|
}
|
|
1850
1865
|
};
|
|
1851
|
-
for (let
|
|
1852
|
-
return
|
|
1866
|
+
for (let n = 0; n < (t.arrayValue.values || []).length; ++n) e.arrayValue.values[n] = Mt(t.arrayValue.values[n]);
|
|
1867
|
+
return e;
|
|
1853
1868
|
}
|
|
1854
1869
|
return Object.assign({}, t);
|
|
1855
1870
|
}
|
|
@@ -1890,10 +1905,10 @@ function Ct(t, n) {
|
|
|
1890
1905
|
*/ field(t) {
|
|
1891
1906
|
if (t.isEmpty()) return this.value;
|
|
1892
1907
|
{
|
|
1893
|
-
let
|
|
1894
|
-
for (let
|
|
1895
|
-
!jt(
|
|
1896
|
-
return
|
|
1908
|
+
let e = this.value;
|
|
1909
|
+
for (let n = 0; n < t.length - 1; ++n) if (e = (e.mapValue.fields || {})[t.get(n)],
|
|
1910
|
+
!jt(e)) return null;
|
|
1911
|
+
return e = (e.mapValue.fields || {})[t.lastSegment()], e || null;
|
|
1897
1912
|
}
|
|
1898
1913
|
}
|
|
1899
1914
|
/**
|
|
@@ -1901,25 +1916,25 @@ function Ct(t, n) {
|
|
|
1901
1916
|
*
|
|
1902
1917
|
* @param path - The field path to set.
|
|
1903
1918
|
* @param value - The value to set.
|
|
1904
|
-
*/ set(t,
|
|
1905
|
-
this.getFieldsMap(t.popLast())[t.lastSegment()] = Mt(
|
|
1919
|
+
*/ set(t, e) {
|
|
1920
|
+
this.getFieldsMap(t.popLast())[t.lastSegment()] = Mt(e);
|
|
1906
1921
|
}
|
|
1907
1922
|
/**
|
|
1908
1923
|
* Sets the provided fields to the provided values.
|
|
1909
1924
|
*
|
|
1910
1925
|
* @param data - A map of fields to values (or null for deletes).
|
|
1911
1926
|
*/ setAll(t) {
|
|
1912
|
-
let
|
|
1927
|
+
let e = tt.emptyPath(), n = {}, r = [];
|
|
1913
1928
|
t.forEach(((t, s) => {
|
|
1914
|
-
if (!
|
|
1929
|
+
if (!e.isImmediateParentOf(s)) {
|
|
1915
1930
|
// Insert the accumulated changes at this parent location
|
|
1916
|
-
const t = this.getFieldsMap(
|
|
1917
|
-
this.applyChanges(t,
|
|
1931
|
+
const t = this.getFieldsMap(e);
|
|
1932
|
+
this.applyChanges(t, n, r), n = {}, r = [], e = s.popLast();
|
|
1918
1933
|
}
|
|
1919
|
-
t ?
|
|
1934
|
+
t ? n[s.lastSegment()] = Mt(t) : r.push(s.lastSegment());
|
|
1920
1935
|
}));
|
|
1921
|
-
const s = this.getFieldsMap(
|
|
1922
|
-
this.applyChanges(s,
|
|
1936
|
+
const s = this.getFieldsMap(e);
|
|
1937
|
+
this.applyChanges(s, n, r);
|
|
1923
1938
|
}
|
|
1924
1939
|
/**
|
|
1925
1940
|
* Removes the field at the specified path. If there is no field at the
|
|
@@ -1927,8 +1942,8 @@ function Ct(t, n) {
|
|
|
1927
1942
|
*
|
|
1928
1943
|
* @param path - The field path to remove.
|
|
1929
1944
|
*/ delete(t) {
|
|
1930
|
-
const
|
|
1931
|
-
jt(
|
|
1945
|
+
const e = this.field(t.popLast());
|
|
1946
|
+
jt(e) && e.mapValue.fields && delete e.mapValue.fields[t.lastSegment()];
|
|
1932
1947
|
}
|
|
1933
1948
|
isEqual(t) {
|
|
1934
1949
|
return Ft(this.value, t.value);
|
|
@@ -1937,26 +1952,26 @@ function Ct(t, n) {
|
|
|
1937
1952
|
* Returns the map that contains the leaf element of `path`. If the parent
|
|
1938
1953
|
* entry does not yet exist, or if it is not a map, a new map will be created.
|
|
1939
1954
|
*/ getFieldsMap(t) {
|
|
1940
|
-
let
|
|
1941
|
-
|
|
1955
|
+
let e = this.value;
|
|
1956
|
+
e.mapValue.fields || (e.mapValue = {
|
|
1942
1957
|
fields: {}
|
|
1943
1958
|
});
|
|
1944
|
-
for (let
|
|
1945
|
-
let r =
|
|
1959
|
+
for (let n = 0; n < t.length; ++n) {
|
|
1960
|
+
let r = e.mapValue.fields[t.get(n)];
|
|
1946
1961
|
jt(r) && r.mapValue.fields || (r = {
|
|
1947
1962
|
mapValue: {
|
|
1948
1963
|
fields: {}
|
|
1949
1964
|
}
|
|
1950
|
-
},
|
|
1965
|
+
}, e.mapValue.fields[t.get(n)] = r), e = r;
|
|
1951
1966
|
}
|
|
1952
|
-
return
|
|
1967
|
+
return e.mapValue.fields;
|
|
1953
1968
|
}
|
|
1954
1969
|
/**
|
|
1955
1970
|
* Modifies `fieldsMap` by adding, replacing or deleting the specified
|
|
1956
1971
|
* entries.
|
|
1957
|
-
*/ applyChanges(t,
|
|
1958
|
-
Et(
|
|
1959
|
-
for (const
|
|
1972
|
+
*/ applyChanges(t, e, n) {
|
|
1973
|
+
Et(e, ((e, n) => t[e] = n));
|
|
1974
|
+
for (const e of n) delete t[e];
|
|
1960
1975
|
}
|
|
1961
1976
|
clone() {
|
|
1962
1977
|
return new Bt(Mt(this.value));
|
|
@@ -1989,36 +2004,37 @@ function Ct(t, n) {
|
|
|
1989
2004
|
* applied, `isValidDocument()` returns false and the document should be removed
|
|
1990
2005
|
* from all views.
|
|
1991
2006
|
*/ class zt {
|
|
1992
|
-
constructor(t,
|
|
1993
|
-
this.key = t, this.documentType =
|
|
2007
|
+
constructor(t, e, n, r, s, i) {
|
|
2008
|
+
this.key = t, this.documentType = e, this.version = n, this.readTime = r, this.data = s,
|
|
2009
|
+
this.documentState = i;
|
|
1994
2010
|
}
|
|
1995
2011
|
/**
|
|
1996
2012
|
* Creates a document with no known version or data, but which can serve as
|
|
1997
2013
|
* base document for mutations.
|
|
1998
2014
|
*/ static newInvalidDocument(t) {
|
|
1999
|
-
return new zt(t, 0 /* INVALID */ , vt.min(), Bt.empty(), 0 /* SYNCED */);
|
|
2015
|
+
return new zt(t, 0 /* INVALID */ , vt.min(), vt.min(), Bt.empty(), 0 /* SYNCED */);
|
|
2000
2016
|
}
|
|
2001
2017
|
/**
|
|
2002
2018
|
* Creates a new document that is known to exist with the given data at the
|
|
2003
2019
|
* given version.
|
|
2004
|
-
*/ static newFoundDocument(t,
|
|
2005
|
-
return new zt(t, 1 /* FOUND_DOCUMENT */ ,
|
|
2020
|
+
*/ static newFoundDocument(t, e, n) {
|
|
2021
|
+
return new zt(t, 1 /* FOUND_DOCUMENT */ , e, vt.min(), n, 0 /* SYNCED */);
|
|
2006
2022
|
}
|
|
2007
|
-
/** Creates a new document that is known to not exist at the given version. */ static newNoDocument(t,
|
|
2008
|
-
return new zt(t, 2 /* NO_DOCUMENT */ ,
|
|
2023
|
+
/** Creates a new document that is known to not exist at the given version. */ static newNoDocument(t, e) {
|
|
2024
|
+
return new zt(t, 2 /* NO_DOCUMENT */ , e, vt.min(), Bt.empty(), 0 /* SYNCED */);
|
|
2009
2025
|
}
|
|
2010
2026
|
/**
|
|
2011
2027
|
* Creates a new document that is known to exist at the given version but
|
|
2012
2028
|
* whose data is not known (e.g. a document that was updated without a known
|
|
2013
2029
|
* base document).
|
|
2014
|
-
*/ static newUnknownDocument(t,
|
|
2015
|
-
return new zt(t, 3 /* UNKNOWN_DOCUMENT */ ,
|
|
2030
|
+
*/ static newUnknownDocument(t, e) {
|
|
2031
|
+
return new zt(t, 3 /* UNKNOWN_DOCUMENT */ , e, vt.min(), Bt.empty(), 2 /* HAS_COMMITTED_MUTATIONS */);
|
|
2016
2032
|
}
|
|
2017
2033
|
/**
|
|
2018
2034
|
* Changes the document type to indicate that it exists and that its version
|
|
2019
2035
|
* and data are known.
|
|
2020
|
-
*/ convertToFoundDocument(t,
|
|
2021
|
-
return this.version = t, this.documentType = 1 /* FOUND_DOCUMENT */ , this.data =
|
|
2036
|
+
*/ convertToFoundDocument(t, e) {
|
|
2037
|
+
return this.version = t, this.documentType = 1 /* FOUND_DOCUMENT */ , this.data = e,
|
|
2022
2038
|
this.documentState = 0 /* SYNCED */ , this;
|
|
2023
2039
|
}
|
|
2024
2040
|
/**
|
|
@@ -2042,6 +2058,9 @@ function Ct(t, n) {
|
|
|
2042
2058
|
setHasLocalMutations() {
|
|
2043
2059
|
return this.documentState = 1 /* HAS_LOCAL_MUTATIONS */ , this;
|
|
2044
2060
|
}
|
|
2061
|
+
setReadTime(t) {
|
|
2062
|
+
return this.readTime = t, this;
|
|
2063
|
+
}
|
|
2045
2064
|
get hasLocalMutations() {
|
|
2046
2065
|
return 1 /* HAS_LOCAL_MUTATIONS */ === this.documentState;
|
|
2047
2066
|
}
|
|
@@ -2067,7 +2086,7 @@ function Ct(t, n) {
|
|
|
2067
2086
|
return t instanceof zt && this.key.isEqual(t.key) && this.version.isEqual(t.version) && this.documentType === t.documentType && this.documentState === t.documentState && this.data.isEqual(t.data);
|
|
2068
2087
|
}
|
|
2069
2088
|
mutableCopy() {
|
|
2070
|
-
return new zt(this.key, this.documentType, this.version, this.data.clone(), this.documentState);
|
|
2089
|
+
return new zt(this.key, this.documentType, this.version, this.readTime, this.data.clone(), this.documentState);
|
|
2071
2090
|
}
|
|
2072
2091
|
toString() {
|
|
2073
2092
|
return `Document(${this.key}, ${this.version}, ${JSON.stringify(this.data.value)}, {documentType: ${this.documentType}}), {documentState: ${this.documentState}})`;
|
|
@@ -2092,8 +2111,8 @@ function Ct(t, n) {
|
|
|
2092
2111
|
*/
|
|
2093
2112
|
// Visible for testing
|
|
2094
2113
|
class Gt {
|
|
2095
|
-
constructor(t,
|
|
2096
|
-
this.path = t, this.collectionGroup =
|
|
2114
|
+
constructor(t, e = null, n = [], r = [], s = null, i = null, o = null) {
|
|
2115
|
+
this.path = t, this.collectionGroup = e, this.orderBy = n, this.filters = r, this.limit = s,
|
|
2097
2116
|
this.startAt = i, this.endAt = o, this.P = null;
|
|
2098
2117
|
}
|
|
2099
2118
|
}
|
|
@@ -2105,26 +2124,26 @@ class Gt {
|
|
|
2105
2124
|
* NOTE: you should always construct `Target` from `Query.toTarget` instead of
|
|
2106
2125
|
* using this factory method, because `Query` provides an implicit `orderBy`
|
|
2107
2126
|
* property.
|
|
2108
|
-
*/ function Qt(t,
|
|
2109
|
-
return new Gt(t,
|
|
2127
|
+
*/ function Qt(t, e = null, n = [], r = [], s = null, i = null, o = null) {
|
|
2128
|
+
return new Gt(t, e, n, r, s, i, o);
|
|
2110
2129
|
}
|
|
2111
2130
|
|
|
2112
2131
|
class Wt extends class {} {
|
|
2113
|
-
constructor(t,
|
|
2114
|
-
super(), this.field = t, this.op =
|
|
2132
|
+
constructor(t, e, n) {
|
|
2133
|
+
super(), this.field = t, this.op = e, this.value = n;
|
|
2115
2134
|
}
|
|
2116
2135
|
/**
|
|
2117
2136
|
* Creates a filter based on the provided arguments.
|
|
2118
|
-
*/ static create(t,
|
|
2119
|
-
return t.isKeyField() ? "in" /* IN */ ===
|
|
2137
|
+
*/ static create(t, e, n) {
|
|
2138
|
+
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);
|
|
2120
2139
|
}
|
|
2121
|
-
static V(t,
|
|
2122
|
-
return "in" /* IN */ ===
|
|
2140
|
+
static V(t, e, n) {
|
|
2141
|
+
return "in" /* IN */ === e ? new Ht(t, n) : new Kt(t, n);
|
|
2123
2142
|
}
|
|
2124
2143
|
matches(t) {
|
|
2125
|
-
const
|
|
2144
|
+
const e = t.data.field(this.field);
|
|
2126
2145
|
// Types do not have to match in NOT_EQUAL filters.
|
|
2127
|
-
return "!=" /* NOT_EQUAL */ === this.op ? null !==
|
|
2146
|
+
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));
|
|
2128
2147
|
// Only compare types with matching backend order (such as double and int).
|
|
2129
2148
|
}
|
|
2130
2149
|
D(t) {
|
|
@@ -2158,78 +2177,78 @@ class Wt extends class {} {
|
|
|
2158
2177
|
|
|
2159
2178
|
/** Filter that matches on key fields (i.e. '__name__'). */
|
|
2160
2179
|
class Yt extends Wt {
|
|
2161
|
-
constructor(t,
|
|
2162
|
-
super(t,
|
|
2180
|
+
constructor(t, e, n) {
|
|
2181
|
+
super(t, e, n), this.key = et.fromName(n.referenceValue);
|
|
2163
2182
|
}
|
|
2164
2183
|
matches(t) {
|
|
2165
|
-
const
|
|
2166
|
-
return this.D(
|
|
2184
|
+
const e = et.comparator(t.key, this.key);
|
|
2185
|
+
return this.D(e);
|
|
2167
2186
|
}
|
|
2168
2187
|
}
|
|
2169
2188
|
|
|
2170
2189
|
/** Filter that matches on key fields within an array. */ class Ht extends Wt {
|
|
2171
|
-
constructor(t,
|
|
2172
|
-
super(t, "in" /* IN */ ,
|
|
2190
|
+
constructor(t, e) {
|
|
2191
|
+
super(t, "in" /* IN */ , e), this.keys = Jt("in" /* IN */ , e);
|
|
2173
2192
|
}
|
|
2174
2193
|
matches(t) {
|
|
2175
|
-
return this.keys.some((
|
|
2194
|
+
return this.keys.some((e => e.isEqual(t.key)));
|
|
2176
2195
|
}
|
|
2177
2196
|
}
|
|
2178
2197
|
|
|
2179
2198
|
/** Filter that matches on key fields not present within an array. */ class Kt extends Wt {
|
|
2180
|
-
constructor(t,
|
|
2181
|
-
super(t, "not-in" /* NOT_IN */ ,
|
|
2199
|
+
constructor(t, e) {
|
|
2200
|
+
super(t, "not-in" /* NOT_IN */ , e), this.keys = Jt("not-in" /* NOT_IN */ , e);
|
|
2182
2201
|
}
|
|
2183
2202
|
matches(t) {
|
|
2184
|
-
return !this.keys.some((
|
|
2203
|
+
return !this.keys.some((e => e.isEqual(t.key)));
|
|
2185
2204
|
}
|
|
2186
2205
|
}
|
|
2187
2206
|
|
|
2188
|
-
function Jt(t,
|
|
2189
|
-
var
|
|
2190
|
-
return ((null === (
|
|
2207
|
+
function Jt(t, e) {
|
|
2208
|
+
var n;
|
|
2209
|
+
return ((null === (n = e.arrayValue) || void 0 === n ? void 0 : n.values) || []).map((t => et.fromName(t.referenceValue)));
|
|
2191
2210
|
}
|
|
2192
2211
|
|
|
2193
2212
|
/** A Filter that implements the array-contains operator. */ class Xt extends Wt {
|
|
2194
|
-
constructor(t,
|
|
2195
|
-
super(t, "array-contains" /* ARRAY_CONTAINS */ ,
|
|
2213
|
+
constructor(t, e) {
|
|
2214
|
+
super(t, "array-contains" /* ARRAY_CONTAINS */ , e);
|
|
2196
2215
|
}
|
|
2197
2216
|
matches(t) {
|
|
2198
|
-
const
|
|
2199
|
-
return Lt(
|
|
2217
|
+
const e = t.data.field(this.field);
|
|
2218
|
+
return Lt(e) && xt(e.arrayValue, this.value);
|
|
2200
2219
|
}
|
|
2201
2220
|
}
|
|
2202
2221
|
|
|
2203
2222
|
/** A Filter that implements the IN operator. */ class Zt extends Wt {
|
|
2204
|
-
constructor(t,
|
|
2205
|
-
super(t, "in" /* IN */ ,
|
|
2223
|
+
constructor(t, e) {
|
|
2224
|
+
super(t, "in" /* IN */ , e);
|
|
2206
2225
|
}
|
|
2207
2226
|
matches(t) {
|
|
2208
|
-
const
|
|
2209
|
-
return null !==
|
|
2227
|
+
const e = t.data.field(this.field);
|
|
2228
|
+
return null !== e && xt(this.value.arrayValue, e);
|
|
2210
2229
|
}
|
|
2211
2230
|
}
|
|
2212
2231
|
|
|
2213
|
-
/** A Filter that implements the not-in operator. */ class
|
|
2214
|
-
constructor(t,
|
|
2215
|
-
super(t, "not-in" /* NOT_IN */ ,
|
|
2232
|
+
/** A Filter that implements the not-in operator. */ class te extends Wt {
|
|
2233
|
+
constructor(t, e) {
|
|
2234
|
+
super(t, "not-in" /* NOT_IN */ , e);
|
|
2216
2235
|
}
|
|
2217
2236
|
matches(t) {
|
|
2218
2237
|
if (xt(this.value.arrayValue, {
|
|
2219
2238
|
nullValue: "NULL_VALUE"
|
|
2220
2239
|
})) return !1;
|
|
2221
|
-
const
|
|
2222
|
-
return null !==
|
|
2240
|
+
const e = t.data.field(this.field);
|
|
2241
|
+
return null !== e && !xt(this.value.arrayValue, e);
|
|
2223
2242
|
}
|
|
2224
2243
|
}
|
|
2225
2244
|
|
|
2226
|
-
/** A Filter that implements the array-contains-any operator. */ class
|
|
2227
|
-
constructor(t,
|
|
2228
|
-
super(t, "array-contains-any" /* ARRAY_CONTAINS_ANY */ ,
|
|
2245
|
+
/** A Filter that implements the array-contains-any operator. */ class ee extends Wt {
|
|
2246
|
+
constructor(t, e) {
|
|
2247
|
+
super(t, "array-contains-any" /* ARRAY_CONTAINS_ANY */ , e);
|
|
2229
2248
|
}
|
|
2230
2249
|
matches(t) {
|
|
2231
|
-
const
|
|
2232
|
-
return !(!Lt(
|
|
2250
|
+
const e = t.data.field(this.field);
|
|
2251
|
+
return !(!Lt(e) || !e.arrayValue.values) && e.arrayValue.values.some((t => xt(this.value.arrayValue, t)));
|
|
2233
2252
|
}
|
|
2234
2253
|
}
|
|
2235
2254
|
|
|
@@ -2246,30 +2265,30 @@ function Jt(t, n) {
|
|
|
2246
2265
|
* Bound provides a function to determine whether a document comes before or
|
|
2247
2266
|
* after a bound. This is influenced by whether the position is just before or
|
|
2248
2267
|
* just after the provided values.
|
|
2249
|
-
*/ class
|
|
2250
|
-
constructor(t,
|
|
2251
|
-
this.position = t, this.
|
|
2268
|
+
*/ class ne {
|
|
2269
|
+
constructor(t, e) {
|
|
2270
|
+
this.position = t, this.inclusive = e;
|
|
2252
2271
|
}
|
|
2253
2272
|
}
|
|
2254
2273
|
|
|
2255
2274
|
/**
|
|
2256
2275
|
* An ordering on a field, in some Direction. Direction defaults to ASCENDING.
|
|
2257
|
-
*/ class
|
|
2258
|
-
constructor(t,
|
|
2259
|
-
this.field = t, this.dir =
|
|
2276
|
+
*/ class re {
|
|
2277
|
+
constructor(t, e = "asc" /* ASCENDING */) {
|
|
2278
|
+
this.field = t, this.dir = e;
|
|
2260
2279
|
}
|
|
2261
2280
|
}
|
|
2262
2281
|
|
|
2263
|
-
function
|
|
2264
|
-
return t.dir ===
|
|
2282
|
+
function se(t, e) {
|
|
2283
|
+
return t.dir === e.dir && t.field.isEqual(e.field);
|
|
2265
2284
|
}
|
|
2266
2285
|
|
|
2267
|
-
function
|
|
2268
|
-
if (null === t) return null ===
|
|
2269
|
-
if (null ===
|
|
2270
|
-
if (t.
|
|
2271
|
-
for (let
|
|
2272
|
-
if (!Ft(t.position[
|
|
2286
|
+
function ie(t, e) {
|
|
2287
|
+
if (null === t) return null === e;
|
|
2288
|
+
if (null === e) return !1;
|
|
2289
|
+
if (t.inclusive !== e.inclusive || t.position.length !== e.position.length) return !1;
|
|
2290
|
+
for (let n = 0; n < t.position.length; n++) {
|
|
2291
|
+
if (!Ft(t.position[n], e.position[n])) return !1;
|
|
2273
2292
|
}
|
|
2274
2293
|
return !0;
|
|
2275
2294
|
}
|
|
@@ -2296,29 +2315,29 @@ function on(t, n) {
|
|
|
2296
2315
|
* query the RemoteStore results.
|
|
2297
2316
|
*
|
|
2298
2317
|
* Visible for testing.
|
|
2299
|
-
*/ class
|
|
2318
|
+
*/ class oe {
|
|
2300
2319
|
/**
|
|
2301
2320
|
* Initializes a Query with a path and optional additional query constraints.
|
|
2302
2321
|
* Path must currently be empty if this is a collection group query.
|
|
2303
2322
|
*/
|
|
2304
|
-
constructor(t,
|
|
2305
|
-
this.path = t, this.collectionGroup =
|
|
2323
|
+
constructor(t, e = null, n = [], r = [], s = null, i = "F" /* First */ , o = null, u = null) {
|
|
2324
|
+
this.path = t, this.collectionGroup = e, this.explicitOrderBy = n, this.filters = r,
|
|
2306
2325
|
this.limit = s, this.limitType = i, this.startAt = o, this.endAt = u, this.$ = null,
|
|
2307
2326
|
// The corresponding `Target` of this `Query` instance.
|
|
2308
2327
|
this.S = null, this.startAt, this.endAt;
|
|
2309
2328
|
}
|
|
2310
2329
|
}
|
|
2311
2330
|
|
|
2312
|
-
/** Creates a new Query for a query that matches all documents at `path` */ function
|
|
2331
|
+
/** Creates a new Query for a query that matches all documents at `path` */ function ue(t) {
|
|
2313
2332
|
return !ct(t.limit) && "L" /* Last */ === t.limitType;
|
|
2314
2333
|
}
|
|
2315
2334
|
|
|
2316
|
-
function
|
|
2335
|
+
function ce(t) {
|
|
2317
2336
|
return t.explicitOrderBy.length > 0 ? t.explicitOrderBy[0].field : null;
|
|
2318
2337
|
}
|
|
2319
2338
|
|
|
2320
|
-
function
|
|
2321
|
-
for (const
|
|
2339
|
+
function ae(t) {
|
|
2340
|
+
for (const e of t.filters) if (e.N()) return e.field;
|
|
2322
2341
|
return null;
|
|
2323
2342
|
}
|
|
2324
2343
|
|
|
@@ -2330,7 +2349,7 @@ function hn(t) {
|
|
|
2330
2349
|
* Returns whether the query matches a collection group rather than a specific
|
|
2331
2350
|
* collection.
|
|
2332
2351
|
*/
|
|
2333
|
-
function
|
|
2352
|
+
function he(t) {
|
|
2334
2353
|
return null !== t.collectionGroup;
|
|
2335
2354
|
}
|
|
2336
2355
|
|
|
@@ -2338,59 +2357,59 @@ function ln(t) {
|
|
|
2338
2357
|
* Returns the implicit order by constraint that is used to execute the Query,
|
|
2339
2358
|
* which can be different from the order by constraints the user provided (e.g.
|
|
2340
2359
|
* the SDK and backend always orders by `__name__`).
|
|
2341
|
-
*/ function
|
|
2342
|
-
const
|
|
2343
|
-
if (null ===
|
|
2344
|
-
|
|
2345
|
-
const t =
|
|
2346
|
-
if (null !== t && null ===
|
|
2360
|
+
*/ function le(t) {
|
|
2361
|
+
const e = b(t);
|
|
2362
|
+
if (null === e.$) {
|
|
2363
|
+
e.$ = [];
|
|
2364
|
+
const t = ae(e), n = ce(e);
|
|
2365
|
+
if (null !== t && null === n)
|
|
2347
2366
|
// In order to implicitly add key ordering, we must also add the
|
|
2348
2367
|
// inequality filter field for it to be a valid query.
|
|
2349
2368
|
// Note that the default inequality field and key ordering is ascending.
|
|
2350
|
-
t.isKeyField() ||
|
|
2369
|
+
t.isKeyField() || e.$.push(new re(t)), e.$.push(new re(tt.keyField(), "asc" /* ASCENDING */)); else {
|
|
2351
2370
|
let t = !1;
|
|
2352
|
-
for (const
|
|
2371
|
+
for (const n of e.explicitOrderBy) e.$.push(n), n.field.isKeyField() && (t = !0);
|
|
2353
2372
|
if (!t) {
|
|
2354
2373
|
// The order of the implicit key ordering always matches the last
|
|
2355
2374
|
// explicit order by
|
|
2356
|
-
const t =
|
|
2357
|
-
|
|
2375
|
+
const t = e.explicitOrderBy.length > 0 ? e.explicitOrderBy[e.explicitOrderBy.length - 1].dir : "asc" /* ASCENDING */;
|
|
2376
|
+
e.$.push(new re(tt.keyField(), t));
|
|
2358
2377
|
}
|
|
2359
2378
|
}
|
|
2360
2379
|
}
|
|
2361
|
-
return
|
|
2380
|
+
return e.$;
|
|
2362
2381
|
}
|
|
2363
2382
|
|
|
2364
2383
|
/**
|
|
2365
2384
|
* Converts this `Query` instance to it's corresponding `Target` representation.
|
|
2366
|
-
*/ function
|
|
2367
|
-
const
|
|
2368
|
-
if (!
|
|
2385
|
+
*/ function fe(t) {
|
|
2386
|
+
const e = b(t);
|
|
2387
|
+
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 {
|
|
2369
2388
|
// Flip the orderBy directions since we want the last results
|
|
2370
2389
|
const t = [];
|
|
2371
|
-
for (const
|
|
2372
|
-
const
|
|
2373
|
-
t.push(new
|
|
2390
|
+
for (const n of le(e)) {
|
|
2391
|
+
const e = "desc" /* DESCENDING */ === n.dir ? "asc" /* ASCENDING */ : "desc" /* DESCENDING */;
|
|
2392
|
+
t.push(new re(n.field, e));
|
|
2374
2393
|
}
|
|
2375
2394
|
// We need to swap the cursors to match the now-flipped query ordering.
|
|
2376
|
-
const
|
|
2395
|
+
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;
|
|
2377
2396
|
// Now return as a LimitType.First query.
|
|
2378
|
-
|
|
2397
|
+
e.S = Qt(e.path, e.collectionGroup, t, e.filters, e.limit, n, r);
|
|
2379
2398
|
}
|
|
2380
|
-
return
|
|
2399
|
+
return e.S;
|
|
2381
2400
|
}
|
|
2382
2401
|
|
|
2383
|
-
function
|
|
2384
|
-
return function(t,
|
|
2385
|
-
if (t.limit !==
|
|
2386
|
-
if (t.orderBy.length !==
|
|
2387
|
-
for (let
|
|
2388
|
-
if (t.filters.length !==
|
|
2389
|
-
for (let s = 0; s < t.filters.length; s++) if (
|
|
2390
|
-
|
|
2391
|
-
var
|
|
2392
|
-
return t.collectionGroup ===
|
|
2393
|
-
}(
|
|
2402
|
+
function de(t, e) {
|
|
2403
|
+
return function(t, e) {
|
|
2404
|
+
if (t.limit !== e.limit) return !1;
|
|
2405
|
+
if (t.orderBy.length !== e.orderBy.length) return !1;
|
|
2406
|
+
for (let n = 0; n < t.orderBy.length; n++) if (!se(t.orderBy[n], e.orderBy[n])) return !1;
|
|
2407
|
+
if (t.filters.length !== e.filters.length) return !1;
|
|
2408
|
+
for (let s = 0; s < t.filters.length; s++) if (n = t.filters[s], r = e.filters[s],
|
|
2409
|
+
n.op !== r.op || !n.field.isEqual(r.field) || !Ft(n.value, r.value)) return !1;
|
|
2410
|
+
var n, r;
|
|
2411
|
+
return t.collectionGroup === e.collectionGroup && !!t.path.isEqual(e.path) && !!ie(t.startAt, e.startAt) && ie(t.endAt, e.endAt);
|
|
2412
|
+
}(fe(t), fe(e)) && t.limitType === e.limitType;
|
|
2394
2413
|
}
|
|
2395
2414
|
|
|
2396
2415
|
/**
|
|
@@ -2418,10 +2437,10 @@ function wn(t, n) {
|
|
|
2418
2437
|
* The return value is an IntegerValue if it can safely represent the value,
|
|
2419
2438
|
* otherwise a DoubleValue is returned.
|
|
2420
2439
|
*/
|
|
2421
|
-
function
|
|
2440
|
+
function we(t, e) {
|
|
2422
2441
|
return function(t) {
|
|
2423
2442
|
return "number" == typeof t && Number.isInteger(t) && !at(t) && t <= Number.MAX_SAFE_INTEGER && t >= Number.MIN_SAFE_INTEGER;
|
|
2424
|
-
}(
|
|
2443
|
+
}(e) ?
|
|
2425
2444
|
/**
|
|
2426
2445
|
* Returns an IntegerValue for `value`.
|
|
2427
2446
|
*/
|
|
@@ -2429,22 +2448,22 @@ function mn(t, n) {
|
|
|
2429
2448
|
return {
|
|
2430
2449
|
integerValue: "" + t
|
|
2431
2450
|
};
|
|
2432
|
-
}(
|
|
2451
|
+
}(e) : function(t, e) {
|
|
2433
2452
|
if (t.F) {
|
|
2434
|
-
if (isNaN(
|
|
2453
|
+
if (isNaN(e)) return {
|
|
2435
2454
|
doubleValue: "NaN"
|
|
2436
2455
|
};
|
|
2437
|
-
if (
|
|
2456
|
+
if (e === 1 / 0) return {
|
|
2438
2457
|
doubleValue: "Infinity"
|
|
2439
2458
|
};
|
|
2440
|
-
if (
|
|
2459
|
+
if (e === -1 / 0) return {
|
|
2441
2460
|
doubleValue: "-Infinity"
|
|
2442
2461
|
};
|
|
2443
2462
|
}
|
|
2444
2463
|
return {
|
|
2445
|
-
doubleValue: at(
|
|
2464
|
+
doubleValue: at(e) ? "-0" : e
|
|
2446
2465
|
};
|
|
2447
|
-
}(t,
|
|
2466
|
+
}(t, e);
|
|
2448
2467
|
}
|
|
2449
2468
|
|
|
2450
2469
|
/**
|
|
@@ -2463,7 +2482,7 @@ function mn(t, n) {
|
|
|
2463
2482
|
* See the License for the specific language governing permissions and
|
|
2464
2483
|
* limitations under the License.
|
|
2465
2484
|
*/
|
|
2466
|
-
/** Used to represent a field transform on a mutation. */ class
|
|
2485
|
+
/** Used to represent a field transform on a mutation. */ class me {
|
|
2467
2486
|
constructor() {
|
|
2468
2487
|
// Make sure that the structural type of `TransformOperation` is unique.
|
|
2469
2488
|
// See https://github.com/microsoft/TypeScript/issues/5451
|
|
@@ -2471,15 +2490,15 @@ function mn(t, n) {
|
|
|
2471
2490
|
}
|
|
2472
2491
|
}
|
|
2473
2492
|
|
|
2474
|
-
/** Transforms a value into a server-generated timestamp. */ class
|
|
2493
|
+
/** Transforms a value into a server-generated timestamp. */ class pe extends me {}
|
|
2475
2494
|
|
|
2476
|
-
/** Transforms an array value via a union operation. */ class
|
|
2495
|
+
/** Transforms an array value via a union operation. */ class ye extends me {
|
|
2477
2496
|
constructor(t) {
|
|
2478
2497
|
super(), this.elements = t;
|
|
2479
2498
|
}
|
|
2480
2499
|
}
|
|
2481
2500
|
|
|
2482
|
-
/** Transforms an array value via a remove operation. */ class
|
|
2501
|
+
/** Transforms an array value via a remove operation. */ class _e extends me {
|
|
2483
2502
|
constructor(t) {
|
|
2484
2503
|
super(), this.elements = t;
|
|
2485
2504
|
}
|
|
@@ -2490,9 +2509,9 @@ function mn(t, n) {
|
|
|
2490
2509
|
* transforms. Converts all field values to integers or doubles, but unlike the
|
|
2491
2510
|
* backend does not cap integer values at 2^63. Instead, JavaScript number
|
|
2492
2511
|
* arithmetic is used and precision loss can occur for values greater than 2^53.
|
|
2493
|
-
*/ class
|
|
2494
|
-
constructor(t,
|
|
2495
|
-
super(), this.q = t, this.O =
|
|
2512
|
+
*/ class ge extends me {
|
|
2513
|
+
constructor(t, e) {
|
|
2514
|
+
super(), this.q = t, this.O = e;
|
|
2496
2515
|
}
|
|
2497
2516
|
}
|
|
2498
2517
|
|
|
@@ -2512,9 +2531,9 @@ function mn(t, n) {
|
|
|
2512
2531
|
* See the License for the specific language governing permissions and
|
|
2513
2532
|
* limitations under the License.
|
|
2514
2533
|
*/
|
|
2515
|
-
/** A field path and the TransformOperation to perform upon it. */ class
|
|
2516
|
-
constructor(t,
|
|
2517
|
-
this.field = t, this.transform =
|
|
2534
|
+
/** A field path and the TransformOperation to perform upon it. */ class ve {
|
|
2535
|
+
constructor(t, e) {
|
|
2536
|
+
this.field = t, this.transform = e;
|
|
2518
2537
|
}
|
|
2519
2538
|
}
|
|
2520
2539
|
|
|
@@ -2522,18 +2541,18 @@ function mn(t, n) {
|
|
|
2522
2541
|
* Encodes a precondition for a mutation. This follows the model that the
|
|
2523
2542
|
* backend accepts with the special case of an explicit "empty" precondition
|
|
2524
2543
|
* (meaning no precondition).
|
|
2525
|
-
*/ class
|
|
2526
|
-
constructor(t,
|
|
2527
|
-
this.updateTime = t, this.exists =
|
|
2544
|
+
*/ class be {
|
|
2545
|
+
constructor(t, e) {
|
|
2546
|
+
this.updateTime = t, this.exists = e;
|
|
2528
2547
|
}
|
|
2529
2548
|
/** Creates a new empty Precondition. */ static none() {
|
|
2530
|
-
return new
|
|
2549
|
+
return new be;
|
|
2531
2550
|
}
|
|
2532
2551
|
/** Creates a new Precondition with an exists flag. */ static exists(t) {
|
|
2533
|
-
return new
|
|
2552
|
+
return new be(void 0, t);
|
|
2534
2553
|
}
|
|
2535
2554
|
/** Creates a new Precondition based on a version a document exists at. */ static updateTime(t) {
|
|
2536
|
-
return new
|
|
2555
|
+
return new be(t);
|
|
2537
2556
|
}
|
|
2538
2557
|
/** Returns whether this Precondition is empty. */ get isNone() {
|
|
2539
2558
|
return void 0 === this.updateTime && void 0 === this.exists;
|
|
@@ -2586,14 +2605,14 @@ function mn(t, n) {
|
|
|
2586
2605
|
* applyToLocalView() to implement the actual behavior of applying the mutation
|
|
2587
2606
|
* to some source document (see `setMutationApplyToRemoteDocument()` for an
|
|
2588
2607
|
* example).
|
|
2589
|
-
*/ class
|
|
2608
|
+
*/ class Ee {}
|
|
2590
2609
|
|
|
2591
2610
|
/**
|
|
2592
2611
|
* A mutation that creates or replaces the document at the given key with the
|
|
2593
2612
|
* object value contents.
|
|
2594
|
-
*/ class
|
|
2595
|
-
constructor(t,
|
|
2596
|
-
super(), this.key = t, this.value =
|
|
2613
|
+
*/ class Te extends Ee {
|
|
2614
|
+
constructor(t, e, n, r = []) {
|
|
2615
|
+
super(), this.key = t, this.value = e, this.precondition = n, this.fieldTransforms = r,
|
|
2597
2616
|
this.type = 0 /* Set */;
|
|
2598
2617
|
}
|
|
2599
2618
|
}
|
|
@@ -2610,16 +2629,16 @@ function mn(t, n) {
|
|
|
2610
2629
|
* is deleted.
|
|
2611
2630
|
* * When a field is not in the mask but is in the values, the values map is
|
|
2612
2631
|
* ignored.
|
|
2613
|
-
*/ class
|
|
2614
|
-
constructor(t,
|
|
2615
|
-
super(), this.key = t, this.data =
|
|
2632
|
+
*/ class Ie extends Ee {
|
|
2633
|
+
constructor(t, e, n, r, s = []) {
|
|
2634
|
+
super(), this.key = t, this.data = e, this.fieldMask = n, this.precondition = r,
|
|
2616
2635
|
this.fieldTransforms = s, this.type = 1 /* Patch */;
|
|
2617
2636
|
}
|
|
2618
2637
|
}
|
|
2619
2638
|
|
|
2620
|
-
/** A mutation that deletes the document at the given key. */ class
|
|
2621
|
-
constructor(t,
|
|
2622
|
-
super(), this.key = t, this.precondition =
|
|
2639
|
+
/** A mutation that deletes the document at the given key. */ class Ae extends Ee {
|
|
2640
|
+
constructor(t, e) {
|
|
2641
|
+
super(), this.key = t, this.precondition = e, this.type = 2 /* Delete */ , this.fieldTransforms = [];
|
|
2623
2642
|
}
|
|
2624
2643
|
}
|
|
2625
2644
|
|
|
@@ -2629,9 +2648,9 @@ function mn(t, n) {
|
|
|
2629
2648
|
*
|
|
2630
2649
|
* The `verify` operation is only used in Transactions, and this class serves
|
|
2631
2650
|
* primarily to facilitate serialization into protos.
|
|
2632
|
-
*/ class
|
|
2633
|
-
constructor(t,
|
|
2634
|
-
super(), this.key = t, this.precondition =
|
|
2651
|
+
*/ class Re extends Ee {
|
|
2652
|
+
constructor(t, e) {
|
|
2653
|
+
super(), this.key = t, this.precondition = e, this.type = 3 /* Verify */ , this.fieldTransforms = [];
|
|
2635
2654
|
}
|
|
2636
2655
|
}
|
|
2637
2656
|
|
|
@@ -2650,13 +2669,13 @@ function mn(t, n) {
|
|
|
2650
2669
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2651
2670
|
* See the License for the specific language governing permissions and
|
|
2652
2671
|
* limitations under the License.
|
|
2653
|
-
*/ const
|
|
2672
|
+
*/ const Pe = (() => {
|
|
2654
2673
|
const t = {
|
|
2655
2674
|
asc: "ASCENDING",
|
|
2656
2675
|
desc: "DESCENDING"
|
|
2657
2676
|
};
|
|
2658
2677
|
return t;
|
|
2659
|
-
})(),
|
|
2678
|
+
})(), Ve = (() => {
|
|
2660
2679
|
const t = {
|
|
2661
2680
|
"<": "LESS_THAN",
|
|
2662
2681
|
"<=": "LESS_THAN_OR_EQUAL",
|
|
@@ -2686,9 +2705,9 @@ function mn(t, n) {
|
|
|
2686
2705
|
* TODO(klimt): We can remove the databaseId argument if we keep the full
|
|
2687
2706
|
* resource name in documents.
|
|
2688
2707
|
*/
|
|
2689
|
-
class
|
|
2690
|
-
constructor(t,
|
|
2691
|
-
this.databaseId = t, this.F =
|
|
2708
|
+
class De {
|
|
2709
|
+
constructor(t, e) {
|
|
2710
|
+
this.databaseId = t, this.F = e;
|
|
2692
2711
|
}
|
|
2693
2712
|
}
|
|
2694
2713
|
|
|
@@ -2703,13 +2722,13 @@ class Nn {
|
|
|
2703
2722
|
/**
|
|
2704
2723
|
* Returns a value for a Date that's appropriate to put into a proto.
|
|
2705
2724
|
*/
|
|
2706
|
-
function
|
|
2725
|
+
function Ne(t, e) {
|
|
2707
2726
|
if (t.F) {
|
|
2708
|
-
return `${new Date(1e3 *
|
|
2727
|
+
return `${new Date(1e3 * e.seconds).toISOString().replace(/\.\d*/, "").replace("Z", "")}.${("000000000" + e.nanoseconds).slice(-9)}Z`;
|
|
2709
2728
|
}
|
|
2710
2729
|
return {
|
|
2711
|
-
seconds: "" +
|
|
2712
|
-
nanos:
|
|
2730
|
+
seconds: "" + e.seconds,
|
|
2731
|
+
nanos: e.nanoseconds
|
|
2713
2732
|
};
|
|
2714
2733
|
}
|
|
2715
2734
|
|
|
@@ -2718,232 +2737,234 @@ function $n(t, n) {
|
|
|
2718
2737
|
*
|
|
2719
2738
|
* Visible for testing.
|
|
2720
2739
|
*/
|
|
2721
|
-
function
|
|
2722
|
-
return t.F ?
|
|
2740
|
+
function $e(t, e) {
|
|
2741
|
+
return t.F ? e.toBase64() : e.toUint8Array();
|
|
2723
2742
|
}
|
|
2724
2743
|
|
|
2725
|
-
function
|
|
2726
|
-
return
|
|
2744
|
+
function Se(t, e) {
|
|
2745
|
+
return Ne(t, e.toTimestamp());
|
|
2727
2746
|
}
|
|
2728
2747
|
|
|
2729
|
-
function
|
|
2748
|
+
function Fe(t) {
|
|
2730
2749
|
return v(!!t), vt.fromTimestamp(function(t) {
|
|
2731
|
-
const
|
|
2732
|
-
return new gt(
|
|
2750
|
+
const e = Rt(t);
|
|
2751
|
+
return new gt(e.seconds, e.nanos);
|
|
2733
2752
|
}(t));
|
|
2734
2753
|
}
|
|
2735
2754
|
|
|
2736
|
-
function
|
|
2755
|
+
function xe(t, e) {
|
|
2737
2756
|
return function(t) {
|
|
2738
2757
|
return new X([ "projects", t.projectId, "databases", t.database ]);
|
|
2739
|
-
}(t).child("documents").child(
|
|
2758
|
+
}(t).child("documents").child(e).canonicalString();
|
|
2740
2759
|
}
|
|
2741
2760
|
|
|
2742
|
-
function
|
|
2743
|
-
return
|
|
2761
|
+
function qe(t, e) {
|
|
2762
|
+
return xe(t.databaseId, e.path);
|
|
2744
2763
|
}
|
|
2745
2764
|
|
|
2746
|
-
function
|
|
2747
|
-
const
|
|
2748
|
-
const
|
|
2749
|
-
return v(
|
|
2750
|
-
}(
|
|
2751
|
-
if (
|
|
2752
|
-
if (
|
|
2753
|
-
return new
|
|
2765
|
+
function Oe(t, e) {
|
|
2766
|
+
const n = function(t) {
|
|
2767
|
+
const e = X.fromString(t);
|
|
2768
|
+
return v(We(e)), e;
|
|
2769
|
+
}(e);
|
|
2770
|
+
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);
|
|
2771
|
+
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);
|
|
2772
|
+
return new et((v((r = n).length > 4 && "documents" === r.get(4)), r.popFirst(5)));
|
|
2754
2773
|
var r;
|
|
2755
2774
|
/** Creates a Document proto from key and fields (but no create/update time) */}
|
|
2756
2775
|
|
|
2757
|
-
function
|
|
2758
|
-
return
|
|
2776
|
+
function Ce(t, e) {
|
|
2777
|
+
return xe(t.databaseId, e);
|
|
2759
2778
|
}
|
|
2760
2779
|
|
|
2761
|
-
function
|
|
2780
|
+
function Le(t) {
|
|
2762
2781
|
return new X([ "projects", t.databaseId.projectId, "databases", t.databaseId.database ]).canonicalString();
|
|
2763
2782
|
}
|
|
2764
2783
|
|
|
2765
|
-
function
|
|
2784
|
+
function Ue(t, e, n) {
|
|
2766
2785
|
return {
|
|
2767
|
-
name:
|
|
2768
|
-
fields:
|
|
2786
|
+
name: qe(t, e),
|
|
2787
|
+
fields: n.value.mapValue.fields
|
|
2769
2788
|
};
|
|
2770
2789
|
}
|
|
2771
2790
|
|
|
2772
|
-
function
|
|
2773
|
-
return "found" in
|
|
2774
|
-
v(!!
|
|
2775
|
-
const
|
|
2791
|
+
function ke(t, e) {
|
|
2792
|
+
return "found" in e ? function(t, e) {
|
|
2793
|
+
v(!!e.found), e.found.name, e.found.updateTime;
|
|
2794
|
+
const n = Oe(t, e.found.name), r = Fe(e.found.updateTime), s = new Bt({
|
|
2776
2795
|
mapValue: {
|
|
2777
|
-
fields:
|
|
2796
|
+
fields: e.found.fields
|
|
2778
2797
|
}
|
|
2779
2798
|
});
|
|
2780
|
-
return zt.newFoundDocument(
|
|
2781
|
-
}(t,
|
|
2782
|
-
v(!!
|
|
2783
|
-
const
|
|
2784
|
-
return zt.newNoDocument(
|
|
2785
|
-
}(t,
|
|
2786
|
-
}
|
|
2787
|
-
|
|
2788
|
-
function
|
|
2789
|
-
let
|
|
2790
|
-
if (
|
|
2791
|
-
update:
|
|
2792
|
-
}; else if (
|
|
2793
|
-
delete:
|
|
2794
|
-
}; else if (
|
|
2795
|
-
update:
|
|
2796
|
-
updateMask:
|
|
2799
|
+
return zt.newFoundDocument(n, r, s);
|
|
2800
|
+
}(t, e) : "missing" in e ? function(t, e) {
|
|
2801
|
+
v(!!e.missing), v(!!e.readTime);
|
|
2802
|
+
const n = Oe(t, e.missing), r = Fe(e.readTime);
|
|
2803
|
+
return zt.newNoDocument(n, r);
|
|
2804
|
+
}(t, e) : g();
|
|
2805
|
+
}
|
|
2806
|
+
|
|
2807
|
+
function je(t, e) {
|
|
2808
|
+
let n;
|
|
2809
|
+
if (e instanceof Te) n = {
|
|
2810
|
+
update: Ue(t, e.key, e.value)
|
|
2811
|
+
}; else if (e instanceof Ae) n = {
|
|
2812
|
+
delete: qe(t, e.key)
|
|
2813
|
+
}; else if (e instanceof Ie) n = {
|
|
2814
|
+
update: Ue(t, e.key, e.data),
|
|
2815
|
+
updateMask: Qe(e.fieldMask)
|
|
2797
2816
|
}; else {
|
|
2798
|
-
if (!(
|
|
2799
|
-
|
|
2800
|
-
verify:
|
|
2817
|
+
if (!(e instanceof Re)) return g();
|
|
2818
|
+
n = {
|
|
2819
|
+
verify: qe(t, e.key)
|
|
2801
2820
|
};
|
|
2802
2821
|
}
|
|
2803
|
-
return
|
|
2804
|
-
const
|
|
2805
|
-
if (
|
|
2806
|
-
fieldPath:
|
|
2822
|
+
return e.fieldTransforms.length > 0 && (n.updateTransforms = e.fieldTransforms.map((t => function(t, e) {
|
|
2823
|
+
const n = e.transform;
|
|
2824
|
+
if (n instanceof pe) return {
|
|
2825
|
+
fieldPath: e.field.canonicalString(),
|
|
2807
2826
|
setToServerValue: "REQUEST_TIME"
|
|
2808
2827
|
};
|
|
2809
|
-
if (
|
|
2810
|
-
fieldPath:
|
|
2828
|
+
if (n instanceof ye) return {
|
|
2829
|
+
fieldPath: e.field.canonicalString(),
|
|
2811
2830
|
appendMissingElements: {
|
|
2812
|
-
values:
|
|
2831
|
+
values: n.elements
|
|
2813
2832
|
}
|
|
2814
2833
|
};
|
|
2815
|
-
if (
|
|
2816
|
-
fieldPath:
|
|
2834
|
+
if (n instanceof _e) return {
|
|
2835
|
+
fieldPath: e.field.canonicalString(),
|
|
2817
2836
|
removeAllFromArray: {
|
|
2818
|
-
values:
|
|
2837
|
+
values: n.elements
|
|
2819
2838
|
}
|
|
2820
2839
|
};
|
|
2821
|
-
if (
|
|
2822
|
-
fieldPath:
|
|
2823
|
-
increment:
|
|
2840
|
+
if (n instanceof ge) return {
|
|
2841
|
+
fieldPath: e.field.canonicalString(),
|
|
2842
|
+
increment: n.O
|
|
2824
2843
|
};
|
|
2825
2844
|
throw g();
|
|
2826
|
-
}(0, t)))),
|
|
2827
|
-
return void 0 !==
|
|
2828
|
-
updateTime:
|
|
2829
|
-
} : void 0 !==
|
|
2830
|
-
exists:
|
|
2845
|
+
}(0, t)))), e.precondition.isNone || (n.currentDocument = function(t, e) {
|
|
2846
|
+
return void 0 !== e.updateTime ? {
|
|
2847
|
+
updateTime: Se(t, e.updateTime)
|
|
2848
|
+
} : void 0 !== e.exists ? {
|
|
2849
|
+
exists: e.exists
|
|
2831
2850
|
} : g();
|
|
2832
|
-
}(t,
|
|
2851
|
+
}(t, e.precondition)), n;
|
|
2833
2852
|
}
|
|
2834
2853
|
|
|
2835
|
-
function
|
|
2854
|
+
function Me(t, e) {
|
|
2836
2855
|
// Dissect the path into parent, collectionId, and optional key filter.
|
|
2837
|
-
const
|
|
2856
|
+
const n = {
|
|
2838
2857
|
structuredQuery: {}
|
|
2839
|
-
}, r =
|
|
2840
|
-
null !==
|
|
2841
|
-
collectionId:
|
|
2858
|
+
}, r = e.path;
|
|
2859
|
+
null !== e.collectionGroup ? (n.parent = Ce(t, r), n.structuredQuery.from = [ {
|
|
2860
|
+
collectionId: e.collectionGroup,
|
|
2842
2861
|
allDescendants: !0
|
|
2843
|
-
} ]) : (
|
|
2862
|
+
} ]) : (n.parent = Ce(t, r.popLast()), n.structuredQuery.from = [ {
|
|
2844
2863
|
collectionId: r.lastSegment()
|
|
2845
2864
|
} ]);
|
|
2846
2865
|
const s = function(t) {
|
|
2847
2866
|
if (0 === t.length) return;
|
|
2848
|
-
const
|
|
2867
|
+
const e = t.map((t =>
|
|
2849
2868
|
// visible for testing
|
|
2850
2869
|
function(t) {
|
|
2851
2870
|
if ("==" /* EQUAL */ === t.op) {
|
|
2852
2871
|
if (kt(t.value)) return {
|
|
2853
2872
|
unaryFilter: {
|
|
2854
|
-
field:
|
|
2873
|
+
field: Ge(t.field),
|
|
2855
2874
|
op: "IS_NAN"
|
|
2856
2875
|
}
|
|
2857
2876
|
};
|
|
2858
2877
|
if (Ut(t.value)) return {
|
|
2859
2878
|
unaryFilter: {
|
|
2860
|
-
field:
|
|
2879
|
+
field: Ge(t.field),
|
|
2861
2880
|
op: "IS_NULL"
|
|
2862
2881
|
}
|
|
2863
2882
|
};
|
|
2864
2883
|
} else if ("!=" /* NOT_EQUAL */ === t.op) {
|
|
2865
2884
|
if (kt(t.value)) return {
|
|
2866
2885
|
unaryFilter: {
|
|
2867
|
-
field:
|
|
2886
|
+
field: Ge(t.field),
|
|
2868
2887
|
op: "IS_NOT_NAN"
|
|
2869
2888
|
}
|
|
2870
2889
|
};
|
|
2871
2890
|
if (Ut(t.value)) return {
|
|
2872
2891
|
unaryFilter: {
|
|
2873
|
-
field:
|
|
2892
|
+
field: Ge(t.field),
|
|
2874
2893
|
op: "IS_NOT_NULL"
|
|
2875
2894
|
}
|
|
2876
2895
|
};
|
|
2877
2896
|
}
|
|
2878
2897
|
return {
|
|
2879
2898
|
fieldFilter: {
|
|
2880
|
-
field:
|
|
2881
|
-
op:
|
|
2899
|
+
field: Ge(t.field),
|
|
2900
|
+
op: ze(t.op),
|
|
2882
2901
|
value: t.value
|
|
2883
2902
|
}
|
|
2884
2903
|
};
|
|
2885
2904
|
}(t)));
|
|
2886
|
-
if (1 ===
|
|
2905
|
+
if (1 === e.length) return e[0];
|
|
2887
2906
|
return {
|
|
2888
2907
|
compositeFilter: {
|
|
2889
2908
|
op: "AND",
|
|
2890
|
-
filters:
|
|
2909
|
+
filters: e
|
|
2891
2910
|
}
|
|
2892
2911
|
};
|
|
2893
|
-
}(
|
|
2894
|
-
s && (
|
|
2912
|
+
}(e.filters);
|
|
2913
|
+
s && (n.structuredQuery.where = s);
|
|
2895
2914
|
const i = function(t) {
|
|
2896
2915
|
if (0 === t.length) return;
|
|
2897
2916
|
return t.map((t =>
|
|
2898
2917
|
// visible for testing
|
|
2899
2918
|
function(t) {
|
|
2900
2919
|
return {
|
|
2901
|
-
field:
|
|
2902
|
-
direction:
|
|
2920
|
+
field: Ge(t.field),
|
|
2921
|
+
direction: Be(t.dir)
|
|
2903
2922
|
};
|
|
2904
2923
|
}(t)));
|
|
2905
|
-
}(
|
|
2906
|
-
i && (
|
|
2907
|
-
const o = function(t,
|
|
2908
|
-
return t.F || ct(
|
|
2909
|
-
value:
|
|
2924
|
+
}(e.orderBy);
|
|
2925
|
+
i && (n.structuredQuery.orderBy = i);
|
|
2926
|
+
const o = function(t, e) {
|
|
2927
|
+
return t.F || ct(e) ? e : {
|
|
2928
|
+
value: e
|
|
2910
2929
|
};
|
|
2911
|
-
}(t,
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2930
|
+
}(t, e.limit);
|
|
2931
|
+
var u;
|
|
2932
|
+
return null !== o && (n.structuredQuery.limit = o), e.startAt && (n.structuredQuery.startAt = {
|
|
2933
|
+
before: (u = e.startAt).inclusive,
|
|
2934
|
+
values: u.position
|
|
2935
|
+
}), e.endAt && (n.structuredQuery.endAt = function(t) {
|
|
2936
|
+
return {
|
|
2937
|
+
before: !t.inclusive,
|
|
2938
|
+
values: t.position
|
|
2939
|
+
};
|
|
2940
|
+
}
|
|
2941
|
+
// visible for testing
|
|
2942
|
+
(e.endAt)), n;
|
|
2921
2943
|
}
|
|
2922
2944
|
|
|
2923
|
-
|
|
2924
|
-
|
|
2925
|
-
return Vn[t];
|
|
2945
|
+
function Be(t) {
|
|
2946
|
+
return Pe[t];
|
|
2926
2947
|
}
|
|
2927
2948
|
|
|
2928
2949
|
// visible for testing
|
|
2929
|
-
function
|
|
2930
|
-
return
|
|
2950
|
+
function ze(t) {
|
|
2951
|
+
return Ve[t];
|
|
2931
2952
|
}
|
|
2932
2953
|
|
|
2933
|
-
function
|
|
2954
|
+
function Ge(t) {
|
|
2934
2955
|
return {
|
|
2935
2956
|
fieldPath: t.canonicalString()
|
|
2936
2957
|
};
|
|
2937
2958
|
}
|
|
2938
2959
|
|
|
2939
|
-
function
|
|
2940
|
-
const
|
|
2941
|
-
return t.fields.forEach((t =>
|
|
2942
|
-
fieldPaths:
|
|
2960
|
+
function Qe(t) {
|
|
2961
|
+
const e = [];
|
|
2962
|
+
return t.fields.forEach((t => e.push(t.canonicalString()))), {
|
|
2963
|
+
fieldPaths: e
|
|
2943
2964
|
};
|
|
2944
2965
|
}
|
|
2945
2966
|
|
|
2946
|
-
function
|
|
2967
|
+
function We(t) {
|
|
2947
2968
|
// Resource names have at least 4 components (project ID, database ID)
|
|
2948
2969
|
return t.length >= 4 && "projects" === t.get(0) && "databases" === t.get(2);
|
|
2949
2970
|
}
|
|
@@ -2963,8 +2984,8 @@ function Hn(t) {
|
|
|
2963
2984
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
2964
2985
|
* See the License for the specific language governing permissions and
|
|
2965
2986
|
* limitations under the License.
|
|
2966
|
-
*/ function
|
|
2967
|
-
return new
|
|
2987
|
+
*/ function Ye(t) {
|
|
2988
|
+
return new De(t, /* useProto3Json= */ !0);
|
|
2968
2989
|
}
|
|
2969
2990
|
|
|
2970
2991
|
/**
|
|
@@ -2992,7 +3013,7 @@ function Hn(t) {
|
|
|
2992
3013
|
* base delay. This prevents clients from accidentally synchronizing their
|
|
2993
3014
|
* delays causing spikes of load to the backend.
|
|
2994
3015
|
*/
|
|
2995
|
-
class
|
|
3016
|
+
class He {
|
|
2996
3017
|
constructor(
|
|
2997
3018
|
/**
|
|
2998
3019
|
* The AsyncQueue to run backoff operations on.
|
|
@@ -3001,13 +3022,13 @@ class Jn {
|
|
|
3001
3022
|
/**
|
|
3002
3023
|
* The ID to use when scheduling backoff operations on the AsyncQueue.
|
|
3003
3024
|
*/
|
|
3004
|
-
|
|
3025
|
+
e,
|
|
3005
3026
|
/**
|
|
3006
3027
|
* The initial delay (used as the base delay on the first retry attempt).
|
|
3007
3028
|
* Note that jitter will still be applied, so the actual delay could be as
|
|
3008
3029
|
* little as 0.5*initialDelayMs.
|
|
3009
3030
|
*/
|
|
3010
|
-
|
|
3031
|
+
n = 1e3
|
|
3011
3032
|
/**
|
|
3012
3033
|
* The multiplier to use to determine the extended base delay after each
|
|
3013
3034
|
* attempt.
|
|
@@ -3017,7 +3038,7 @@ class Jn {
|
|
|
3017
3038
|
* Note that jitter will still be applied, so the actual delay could be as
|
|
3018
3039
|
* much as 1.5*maxDelayMs.
|
|
3019
3040
|
*/ , s = 6e4) {
|
|
3020
|
-
this.C = t, this.timerId =
|
|
3041
|
+
this.C = t, this.timerId = e, this.L = n, this.U = r, this.k = s, this.j = 0, this.M = null,
|
|
3021
3042
|
/** The last backoff attempt, as epoch milliseconds. */
|
|
3022
3043
|
this.B = Date.now(), this.reset();
|
|
3023
3044
|
}
|
|
@@ -3045,9 +3066,9 @@ class Jn {
|
|
|
3045
3066
|
this.cancel();
|
|
3046
3067
|
// First schedule using the current base (which may be 0 and should be
|
|
3047
3068
|
// honored as such).
|
|
3048
|
-
const
|
|
3069
|
+
const e = Math.floor(this.j + this.Y()), n = Math.max(0, Date.now() - this.B), r = Math.max(0, e - n);
|
|
3049
3070
|
// Guard against lastAttemptTime being in the future due to a clock change.
|
|
3050
|
-
r > 0 && m("ExponentialBackoff", `Backing off for ${r} ms (base delay: ${this.j} ms, delay with jitter: ${
|
|
3071
|
+
r > 0 && m("ExponentialBackoff", `Backing off for ${r} ms (base delay: ${this.j} ms, delay with jitter: ${e} ms, last attempt: ${n} ms ago)`),
|
|
3051
3072
|
this.M = this.C.enqueueAfterDelay(this.timerId, r, (() => (this.B = Date.now(),
|
|
3052
3073
|
t()))),
|
|
3053
3074
|
// Apply backoff factor to determine next delay and ensure it is within
|
|
@@ -3090,22 +3111,22 @@ class Jn {
|
|
|
3090
3111
|
* An implementation of Datastore that exposes additional state for internal
|
|
3091
3112
|
* consumption.
|
|
3092
3113
|
*/
|
|
3093
|
-
class
|
|
3094
|
-
constructor(t,
|
|
3095
|
-
super(), this.authCredentials = t, this.appCheckCredentials =
|
|
3114
|
+
class Ke extends class {} {
|
|
3115
|
+
constructor(t, e, n, r) {
|
|
3116
|
+
super(), this.authCredentials = t, this.appCheckCredentials = e, this.K = n, this.q = r,
|
|
3096
3117
|
this.J = !1;
|
|
3097
3118
|
}
|
|
3098
3119
|
X() {
|
|
3099
3120
|
if (this.J) throw new U(S, "The client has already been terminated.");
|
|
3100
3121
|
}
|
|
3101
|
-
/** Invokes the provided RPC with auth and AppCheck tokens. */ m(t,
|
|
3102
|
-
return this.X(), Promise.all([ this.authCredentials.getToken(), this.appCheckCredentials.getToken() ]).then((([r, s]) => this.K.m(t,
|
|
3122
|
+
/** Invokes the provided RPC with auth and AppCheck tokens. */ m(t, e, n) {
|
|
3123
|
+
return this.X(), Promise.all([ this.authCredentials.getToken(), this.appCheckCredentials.getToken() ]).then((([r, s]) => this.K.m(t, e, n, r, s))).catch((t => {
|
|
3103
3124
|
throw "FirebaseError" === t.name ? (t.code === N && (this.authCredentials.invalidateToken(),
|
|
3104
3125
|
this.appCheckCredentials.invalidateToken()), t) : new U(I, t.toString());
|
|
3105
3126
|
}));
|
|
3106
3127
|
}
|
|
3107
|
-
/** Invokes the provided RPC with streamed results with auth and AppCheck tokens. */ T(t,
|
|
3108
|
-
return this.X(), Promise.all([ this.authCredentials.getToken(), this.appCheckCredentials.getToken() ]).then((([r, s]) => this.K.T(t,
|
|
3128
|
+
/** Invokes the provided RPC with streamed results with auth and AppCheck tokens. */ T(t, e, n) {
|
|
3129
|
+
return this.X(), Promise.all([ this.authCredentials.getToken(), this.appCheckCredentials.getToken() ]).then((([r, s]) => this.K.T(t, e, n, r, s))).catch((t => {
|
|
3109
3130
|
throw "FirebaseError" === t.name ? (t.code === N && (this.authCredentials.invalidateToken(),
|
|
3110
3131
|
this.appCheckCredentials.invalidateToken()), t) : new U(I, t.toString());
|
|
3111
3132
|
}));
|
|
@@ -3117,40 +3138,40 @@ class Xn extends class {} {
|
|
|
3117
3138
|
|
|
3118
3139
|
// TODO(firestorexp): Make sure there is only one Datastore instance per
|
|
3119
3140
|
// firestore-exp client.
|
|
3120
|
-
async function
|
|
3121
|
-
const
|
|
3122
|
-
writes:
|
|
3141
|
+
async function Je(t, e) {
|
|
3142
|
+
const n = b(t), r = Le(n.q) + "/documents", s = {
|
|
3143
|
+
writes: e.map((t => je(n.q, t)))
|
|
3123
3144
|
};
|
|
3124
|
-
await
|
|
3145
|
+
await n.m("Commit", r, s);
|
|
3125
3146
|
}
|
|
3126
3147
|
|
|
3127
|
-
async function
|
|
3128
|
-
const
|
|
3129
|
-
documents:
|
|
3130
|
-
}, i = await
|
|
3148
|
+
async function Xe(t, e) {
|
|
3149
|
+
const n = b(t), r = Le(n.q) + "/documents", s = {
|
|
3150
|
+
documents: e.map((t => qe(n.q, t)))
|
|
3151
|
+
}, i = await n.T("BatchGetDocuments", r, s), o = new Map;
|
|
3131
3152
|
i.forEach((t => {
|
|
3132
|
-
const
|
|
3133
|
-
o.set(
|
|
3153
|
+
const e = ke(n.q, t);
|
|
3154
|
+
o.set(e.key.toString(), e);
|
|
3134
3155
|
}));
|
|
3135
3156
|
const u = [];
|
|
3136
|
-
return
|
|
3137
|
-
const
|
|
3138
|
-
v(!!
|
|
3157
|
+
return e.forEach((t => {
|
|
3158
|
+
const e = o.get(t.toString());
|
|
3159
|
+
v(!!e), u.push(e);
|
|
3139
3160
|
})), u;
|
|
3140
3161
|
}
|
|
3141
3162
|
|
|
3142
|
-
async function
|
|
3143
|
-
const
|
|
3144
|
-
return (await
|
|
3163
|
+
async function Ze(t, e) {
|
|
3164
|
+
const n = b(t), r = Me(n.q, fe(e));
|
|
3165
|
+
return (await n.T("RunQuery", r.parent, {
|
|
3145
3166
|
structuredQuery: r.structuredQuery
|
|
3146
|
-
})).filter((t => !!t.document)).map((t => function(t,
|
|
3147
|
-
const r =
|
|
3167
|
+
})).filter((t => !!t.document)).map((t => function(t, e, n) {
|
|
3168
|
+
const r = Oe(t, e.name), s = Fe(e.updateTime), i = new Bt({
|
|
3148
3169
|
mapValue: {
|
|
3149
|
-
fields:
|
|
3170
|
+
fields: e.fields
|
|
3150
3171
|
}
|
|
3151
3172
|
}), o = zt.newFoundDocument(r, s, i);
|
|
3152
|
-
return
|
|
3153
|
-
}(
|
|
3173
|
+
return n && o.setHasCommittedMutations(), n ? o.setHasCommittedMutations() : o;
|
|
3174
|
+
}(n.q, t.document, void 0)));
|
|
3154
3175
|
}
|
|
3155
3176
|
|
|
3156
3177
|
/**
|
|
@@ -3168,7 +3189,7 @@ async function ne(t, n) {
|
|
|
3168
3189
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3169
3190
|
* See the License for the specific language governing permissions and
|
|
3170
3191
|
* limitations under the License.
|
|
3171
|
-
*/ const
|
|
3192
|
+
*/ const tn = new Map;
|
|
3172
3193
|
|
|
3173
3194
|
/**
|
|
3174
3195
|
* An instance map that ensures only one Datastore exists per Firestore
|
|
@@ -3179,19 +3200,19 @@ async function ne(t, n) {
|
|
|
3179
3200
|
* instance. Callers must invoke removeComponents() when the Firestore
|
|
3180
3201
|
* instance is terminated.
|
|
3181
3202
|
*/
|
|
3182
|
-
function
|
|
3203
|
+
function en(t) {
|
|
3183
3204
|
if (t._terminated) throw new U(S, "The client has already been terminated.");
|
|
3184
|
-
if (!
|
|
3205
|
+
if (!tn.has(t)) {
|
|
3185
3206
|
m("ComponentProvider", "Initializing Datastore");
|
|
3186
3207
|
const i = function(t) {
|
|
3187
3208
|
return new wt(t, fetch.bind(null));
|
|
3188
|
-
}((
|
|
3189
|
-
new H(
|
|
3190
|
-
return new
|
|
3209
|
+
}((e = t._databaseId, n = t.app.options.appId || "", r = t._persistenceKey, s = t._freezeSettings(),
|
|
3210
|
+
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) {
|
|
3211
|
+
return new Ke(t, e, n, r);
|
|
3191
3212
|
}(t._authCredentials, t._appCheckCredentials, i, o);
|
|
3192
|
-
|
|
3213
|
+
tn.set(t, u);
|
|
3193
3214
|
}
|
|
3194
|
-
var
|
|
3215
|
+
var e, n, r, s;
|
|
3195
3216
|
/**
|
|
3196
3217
|
* @license
|
|
3197
3218
|
* Copyright 2018 Google LLC
|
|
@@ -3207,7 +3228,7 @@ function re(t) {
|
|
|
3207
3228
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3208
3229
|
* See the License for the specific language governing permissions and
|
|
3209
3230
|
* limitations under the License.
|
|
3210
|
-
*/ return
|
|
3231
|
+
*/ return tn.get(t);
|
|
3211
3232
|
}
|
|
3212
3233
|
|
|
3213
3234
|
/**
|
|
@@ -3219,21 +3240,21 @@ function re(t) {
|
|
|
3219
3240
|
* user-supplied `FirestoreSettings` object. This is a separate type so that
|
|
3220
3241
|
* defaults can be supplied and the value can be checked for equality.
|
|
3221
3242
|
*/
|
|
3222
|
-
class
|
|
3243
|
+
class nn {
|
|
3223
3244
|
constructor(t) {
|
|
3224
|
-
var
|
|
3245
|
+
var e;
|
|
3225
3246
|
if (void 0 === t.host) {
|
|
3226
3247
|
if (void 0 !== t.ssl) throw new U(A, "Can't provide ssl option if host option is not set");
|
|
3227
3248
|
this.host = "firestore.googleapis.com", this.ssl = true;
|
|
3228
|
-
} else this.host = t.host, this.ssl = null === (
|
|
3249
|
+
} else this.host = t.host, this.ssl = null === (e = t.ssl) || void 0 === e || e;
|
|
3229
3250
|
if (this.credentials = t.credentials, this.ignoreUndefinedProperties = !!t.ignoreUndefinedProperties,
|
|
3230
3251
|
void 0 === t.cacheSizeBytes) this.cacheSizeBytes = 41943040; else {
|
|
3231
3252
|
if (-1 !== t.cacheSizeBytes && t.cacheSizeBytes < 1048576) throw new U(A, "cacheSizeBytes must be at least 1048576");
|
|
3232
3253
|
this.cacheSizeBytes = t.cacheSizeBytes;
|
|
3233
3254
|
}
|
|
3234
3255
|
this.experimentalForceLongPolling = !!t.experimentalForceLongPolling, this.experimentalAutoDetectLongPolling = !!t.experimentalAutoDetectLongPolling,
|
|
3235
|
-
this.useFetchStreams = !!t.useFetchStreams, function(t,
|
|
3236
|
-
if (!0 ===
|
|
3256
|
+
this.useFetchStreams = !!t.useFetchStreams, function(t, e, n, r) {
|
|
3257
|
+
if (!0 === e && !0 === r) throw new U(A, `${t} and ${n} cannot be used together.`);
|
|
3237
3258
|
}("experimentalForceLongPolling", t.experimentalForceLongPolling, "experimentalAutoDetectLongPolling", t.experimentalAutoDetectLongPolling);
|
|
3238
3259
|
}
|
|
3239
3260
|
isEqual(t) {
|
|
@@ -3261,14 +3282,14 @@ class se {
|
|
|
3261
3282
|
* The Cloud Firestore service interface.
|
|
3262
3283
|
*
|
|
3263
3284
|
* Do not call this constructor directly. Instead, use {@link getFirestore}.
|
|
3264
|
-
*/ class
|
|
3285
|
+
*/ class rn {
|
|
3265
3286
|
/** @hideconstructor */
|
|
3266
|
-
constructor(t,
|
|
3267
|
-
this._authCredentials =
|
|
3287
|
+
constructor(t, e, n) {
|
|
3288
|
+
this._authCredentials = e, this._appCheckCredentials = n,
|
|
3268
3289
|
/**
|
|
3269
3290
|
* Whether it's a Firestore or Firestore Lite instance.
|
|
3270
3291
|
*/
|
|
3271
|
-
this.type = "firestore-lite", this._persistenceKey = "(lite)", this._settings = new
|
|
3292
|
+
this.type = "firestore-lite", this._persistenceKey = "(lite)", this._settings = new nn({}),
|
|
3272
3293
|
this._settingsFrozen = !1, t instanceof K ? this._databaseId = t : (this._app = t,
|
|
3273
3294
|
this._databaseId = function(t) {
|
|
3274
3295
|
if (!Object.prototype.hasOwnProperty.apply(t.options, [ "projectId" ])) throw new U(A, '"projectId" not provided in firebase.initializeApp.');
|
|
@@ -3301,14 +3322,14 @@ class se {
|
|
|
3301
3322
|
}
|
|
3302
3323
|
_setSettings(t) {
|
|
3303
3324
|
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.");
|
|
3304
|
-
this._settings = new
|
|
3325
|
+
this._settings = new nn(t), void 0 !== t.credentials && (this._authCredentials = function(t) {
|
|
3305
3326
|
if (!t) return new M;
|
|
3306
3327
|
switch (t.type) {
|
|
3307
3328
|
case "gapi":
|
|
3308
|
-
const
|
|
3329
|
+
const e = t.client;
|
|
3309
3330
|
// Make sure this really is a Gapi client.
|
|
3310
|
-
return v(!("object" != typeof
|
|
3311
|
-
new Q(
|
|
3331
|
+
return v(!("object" != typeof e || null === e || !e.auth || !e.auth.getAuthHeaderValueForFirstParty)),
|
|
3332
|
+
new Q(e, t.sessionIndex || "0", t.iamToken || null);
|
|
3312
3333
|
|
|
3313
3334
|
case "provider":
|
|
3314
3335
|
return t.client;
|
|
@@ -3342,17 +3363,17 @@ class se {
|
|
|
3342
3363
|
* Only ever called once.
|
|
3343
3364
|
*/ _terminate() {
|
|
3344
3365
|
return function(t) {
|
|
3345
|
-
const
|
|
3346
|
-
|
|
3366
|
+
const e = tn.get(t);
|
|
3367
|
+
e && (m("ComponentProvider", "Removing Datastore"), tn.delete(t), e.terminate());
|
|
3347
3368
|
}(this), Promise.resolve();
|
|
3348
3369
|
}
|
|
3349
3370
|
}
|
|
3350
3371
|
|
|
3351
|
-
function
|
|
3352
|
-
const
|
|
3353
|
-
if (
|
|
3354
|
-
return
|
|
3355
|
-
options:
|
|
3372
|
+
function sn(t, e) {
|
|
3373
|
+
const n = _getProvider(t, "firestore/lite");
|
|
3374
|
+
if (n.isInitialized()) throw new U(S, "Firestore can only be initialized once per app.");
|
|
3375
|
+
return n.initialize({
|
|
3376
|
+
options: e
|
|
3356
3377
|
});
|
|
3357
3378
|
}
|
|
3358
3379
|
|
|
@@ -3364,8 +3385,8 @@ function oe(t, n) {
|
|
|
3364
3385
|
* @param app - The {@link @firebase/app#FirebaseApp} instance that the returned `Firestore`
|
|
3365
3386
|
* instance is associated with.
|
|
3366
3387
|
* @returns The `Firestore` instance of the provided app.
|
|
3367
|
-
*/ function
|
|
3368
|
-
return _getProvider(
|
|
3388
|
+
*/ function on(e = getApp()) {
|
|
3389
|
+
return _getProvider(e, "firestore/lite").getImmediate();
|
|
3369
3390
|
}
|
|
3370
3391
|
|
|
3371
3392
|
/**
|
|
@@ -3380,24 +3401,24 @@ function oe(t, n) {
|
|
|
3380
3401
|
* @param port - the emulator port (ex: 9000).
|
|
3381
3402
|
* @param options.mockUserToken - the mock auth token to use for unit testing
|
|
3382
3403
|
* Security Rules.
|
|
3383
|
-
*/ function
|
|
3404
|
+
*/ function un(t, e, n, r = {}) {
|
|
3384
3405
|
var s;
|
|
3385
|
-
const i = (t = ot(t,
|
|
3386
|
-
if ("firestore.googleapis.com" !== i.host && i.host !==
|
|
3406
|
+
const i = (t = ot(t, rn))._getSettings();
|
|
3407
|
+
if ("firestore.googleapis.com" !== i.host && i.host !== e && y("Host has been set in both settings() and useEmulator(), emulator host will be used"),
|
|
3387
3408
|
t._setSettings(Object.assign(Object.assign({}, i), {
|
|
3388
|
-
host: `${
|
|
3409
|
+
host: `${e}:${n}`,
|
|
3389
3410
|
ssl: !1
|
|
3390
3411
|
})), r.mockUserToken) {
|
|
3391
|
-
let
|
|
3392
|
-
if ("string" == typeof r.mockUserToken)
|
|
3412
|
+
let e, n;
|
|
3413
|
+
if ("string" == typeof r.mockUserToken) e = r.mockUserToken, n = l.MOCK_USER; else {
|
|
3393
3414
|
// Let createMockUserToken validate first (catches common mistakes like
|
|
3394
3415
|
// invalid field "uid" and missing field "sub" / "user_id".)
|
|
3395
|
-
|
|
3416
|
+
e = createMockUserToken(r.mockUserToken, null === (s = t._app) || void 0 === s ? void 0 : s.options.projectId);
|
|
3396
3417
|
const i = r.mockUserToken.sub || r.mockUserToken.user_id;
|
|
3397
3418
|
if (!i) throw new U(A, "mockUserToken must contain 'sub' or 'user_id' field!");
|
|
3398
|
-
|
|
3419
|
+
n = new l(i);
|
|
3399
3420
|
}
|
|
3400
|
-
t._authCredentials = new B(new j(
|
|
3421
|
+
t._authCredentials = new B(new j(e, n));
|
|
3401
3422
|
}
|
|
3402
3423
|
}
|
|
3403
3424
|
|
|
@@ -3420,8 +3441,8 @@ function oe(t, n) {
|
|
|
3420
3441
|
* @param firestore - The `Firestore` instance to terminate.
|
|
3421
3442
|
* @returns A `Promise` that is resolved when the instance has been successfully
|
|
3422
3443
|
* terminated.
|
|
3423
|
-
*/ function
|
|
3424
|
-
return t = ot(t,
|
|
3444
|
+
*/ function cn(t) {
|
|
3445
|
+
return t = ot(t, rn), _removeServiceInstance(t.app, "firestore/lite"), t._delete();
|
|
3425
3446
|
}
|
|
3426
3447
|
|
|
3427
3448
|
/**
|
|
@@ -3461,14 +3482,14 @@ function oe(t, n) {
|
|
|
3461
3482
|
* and can be used to write, read, or listen to the location. The document at
|
|
3462
3483
|
* the referenced location may or may not exist.
|
|
3463
3484
|
*/
|
|
3464
|
-
class
|
|
3485
|
+
class an {
|
|
3465
3486
|
/** @hideconstructor */
|
|
3466
3487
|
constructor(t,
|
|
3467
3488
|
/**
|
|
3468
3489
|
* If provided, the `FirestoreDataConverter` associated with this instance.
|
|
3469
3490
|
*/
|
|
3470
|
-
|
|
3471
|
-
this.converter =
|
|
3491
|
+
e, n) {
|
|
3492
|
+
this.converter = e, this._key = n,
|
|
3472
3493
|
/** The type of this Firestore reference. */
|
|
3473
3494
|
this.type = "document", this.firestore = t;
|
|
3474
3495
|
}
|
|
@@ -3489,40 +3510,40 @@ class he {
|
|
|
3489
3510
|
/**
|
|
3490
3511
|
* The collection this `DocumentReference` belongs to.
|
|
3491
3512
|
*/ get parent() {
|
|
3492
|
-
return new
|
|
3513
|
+
return new ln(this.firestore, this.converter, this._key.path.popLast());
|
|
3493
3514
|
}
|
|
3494
3515
|
withConverter(t) {
|
|
3495
|
-
return new
|
|
3516
|
+
return new an(this.firestore, t, this._key);
|
|
3496
3517
|
}
|
|
3497
3518
|
}
|
|
3498
3519
|
|
|
3499
3520
|
/**
|
|
3500
3521
|
* A `Query` refers to a query which you can read or listen to. You can also
|
|
3501
3522
|
* construct refined `Query` objects by adding filters and ordering.
|
|
3502
|
-
*/ class
|
|
3523
|
+
*/ class hn {
|
|
3503
3524
|
// This is the lite version of the Query class in the main SDK.
|
|
3504
3525
|
/** @hideconstructor protected */
|
|
3505
3526
|
constructor(t,
|
|
3506
3527
|
/**
|
|
3507
3528
|
* If provided, the `FirestoreDataConverter` associated with this instance.
|
|
3508
3529
|
*/
|
|
3509
|
-
|
|
3510
|
-
this.converter =
|
|
3530
|
+
e, n) {
|
|
3531
|
+
this.converter = e, this._query = n,
|
|
3511
3532
|
/** The type of this Firestore reference. */
|
|
3512
3533
|
this.type = "query", this.firestore = t;
|
|
3513
3534
|
}
|
|
3514
3535
|
withConverter(t) {
|
|
3515
|
-
return new
|
|
3536
|
+
return new hn(this.firestore, t, this._query);
|
|
3516
3537
|
}
|
|
3517
3538
|
}
|
|
3518
3539
|
|
|
3519
3540
|
/**
|
|
3520
3541
|
* A `CollectionReference` object can be used for adding documents, getting
|
|
3521
3542
|
* document references, and querying for documents (using {@link query}).
|
|
3522
|
-
*/ class
|
|
3543
|
+
*/ class ln extends hn {
|
|
3523
3544
|
/** @hideconstructor */
|
|
3524
|
-
constructor(t,
|
|
3525
|
-
super(t,
|
|
3545
|
+
constructor(t, e, n) {
|
|
3546
|
+
super(t, e, new oe(n)), this._path = n,
|
|
3526
3547
|
/** The type of this Firestore reference. */
|
|
3527
3548
|
this.type = "collection";
|
|
3528
3549
|
}
|
|
@@ -3540,23 +3561,23 @@ class he {
|
|
|
3540
3561
|
* subcollection. If this isn't a subcollection, the reference is null.
|
|
3541
3562
|
*/ get parent() {
|
|
3542
3563
|
const t = this._path.popLast();
|
|
3543
|
-
return t.isEmpty() ? null : new
|
|
3544
|
-
/* converter= */ null, new
|
|
3564
|
+
return t.isEmpty() ? null : new an(this.firestore,
|
|
3565
|
+
/* converter= */ null, new et(t));
|
|
3545
3566
|
}
|
|
3546
3567
|
withConverter(t) {
|
|
3547
|
-
return new
|
|
3568
|
+
return new ln(this.firestore, t, this._path);
|
|
3548
3569
|
}
|
|
3549
3570
|
}
|
|
3550
3571
|
|
|
3551
|
-
function
|
|
3552
|
-
if (t = getModularInstance(t),
|
|
3553
|
-
const r = X.fromString(
|
|
3554
|
-
return st(r), new
|
|
3572
|
+
function fn(t, e, ...n) {
|
|
3573
|
+
if (t = getModularInstance(t), nt("collection", "path", e), t instanceof rn) {
|
|
3574
|
+
const r = X.fromString(e, ...n);
|
|
3575
|
+
return st(r), new ln(t, /* converter= */ null, r);
|
|
3555
3576
|
}
|
|
3556
3577
|
{
|
|
3557
|
-
if (!(t instanceof
|
|
3558
|
-
const r = t._path.child(X.fromString(
|
|
3559
|
-
return st(r), new
|
|
3578
|
+
if (!(t instanceof an || t instanceof ln)) throw new U(A, "Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore");
|
|
3579
|
+
const r = t._path.child(X.fromString(e, ...n));
|
|
3580
|
+
return st(r), new ln(t.firestore,
|
|
3560
3581
|
/* converter= */ null, r);
|
|
3561
3582
|
}
|
|
3562
3583
|
}
|
|
@@ -3573,32 +3594,32 @@ function de(t, n, ...e) {
|
|
|
3573
3594
|
* collection or subcollection with this ID as the last segment of its path
|
|
3574
3595
|
* will be included. Cannot contain a slash.
|
|
3575
3596
|
* @returns The created `Query`.
|
|
3576
|
-
*/ function
|
|
3577
|
-
if (t = ot(t,
|
|
3578
|
-
return new
|
|
3597
|
+
*/ function dn(t, e) {
|
|
3598
|
+
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 '/'.`);
|
|
3599
|
+
return new hn(t,
|
|
3579
3600
|
/* converter= */ null,
|
|
3580
3601
|
/**
|
|
3581
3602
|
* Creates a new Query for a collection group query that matches all documents
|
|
3582
3603
|
* within the provided collection group.
|
|
3583
3604
|
*/
|
|
3584
3605
|
function(t) {
|
|
3585
|
-
return new
|
|
3586
|
-
}(
|
|
3606
|
+
return new oe(X.emptyPath(), t);
|
|
3607
|
+
}(e));
|
|
3587
3608
|
}
|
|
3588
3609
|
|
|
3589
|
-
function
|
|
3610
|
+
function wn(t, e, ...n) {
|
|
3590
3611
|
if (t = getModularInstance(t),
|
|
3591
3612
|
// We allow omission of 'pathString' but explicitly prohibit passing in both
|
|
3592
3613
|
// 'undefined' and 'null'.
|
|
3593
|
-
1 === arguments.length && (
|
|
3594
|
-
const r = X.fromString(
|
|
3595
|
-
return rt(r), new
|
|
3596
|
-
/* converter= */ null, new
|
|
3614
|
+
1 === arguments.length && (e = pt.R()), nt("doc", "path", e), t instanceof rn) {
|
|
3615
|
+
const r = X.fromString(e, ...n);
|
|
3616
|
+
return rt(r), new an(t,
|
|
3617
|
+
/* converter= */ null, new et(r));
|
|
3597
3618
|
}
|
|
3598
3619
|
{
|
|
3599
|
-
if (!(t instanceof
|
|
3600
|
-
const r = t._path.child(X.fromString(
|
|
3601
|
-
return rt(r), new
|
|
3620
|
+
if (!(t instanceof an || t instanceof ln)) throw new U(A, "Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore");
|
|
3621
|
+
const r = t._path.child(X.fromString(e, ...n));
|
|
3622
|
+
return rt(r), new an(t.firestore, t instanceof ln ? t.converter : null, new et(r));
|
|
3602
3623
|
}
|
|
3603
3624
|
}
|
|
3604
3625
|
|
|
@@ -3609,8 +3630,8 @@ function me(t, n, ...e) {
|
|
|
3609
3630
|
* @param right - A reference to compare.
|
|
3610
3631
|
* @returns true if the references point to the same location in the same
|
|
3611
3632
|
* Firestore database.
|
|
3612
|
-
*/ function
|
|
3613
|
-
return t = getModularInstance(t),
|
|
3633
|
+
*/ function mn(t, e) {
|
|
3634
|
+
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);
|
|
3614
3635
|
}
|
|
3615
3636
|
|
|
3616
3637
|
/**
|
|
@@ -3621,8 +3642,8 @@ function me(t, n, ...e) {
|
|
|
3621
3642
|
* @param right - A `Query` to compare.
|
|
3622
3643
|
* @returns true if the references point to the same location in the same
|
|
3623
3644
|
* Firestore database.
|
|
3624
|
-
*/ function
|
|
3625
|
-
return t = getModularInstance(t),
|
|
3645
|
+
*/ function pn(t, e) {
|
|
3646
|
+
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);
|
|
3626
3647
|
}
|
|
3627
3648
|
|
|
3628
3649
|
/**
|
|
@@ -3648,7 +3669,7 @@ function me(t, n, ...e) {
|
|
|
3648
3669
|
*
|
|
3649
3670
|
* Create a `FieldPath` by providing field names. If more than one field
|
|
3650
3671
|
* name is provided, the path will point to a nested field in a document.
|
|
3651
|
-
*/ class
|
|
3672
|
+
*/ class yn {
|
|
3652
3673
|
/**
|
|
3653
3674
|
* Creates a `FieldPath` from the provided field names. If more than one field
|
|
3654
3675
|
* name is provided, the path will point to a nested field in a document.
|
|
@@ -3656,7 +3677,7 @@ function me(t, n, ...e) {
|
|
|
3656
3677
|
* @param fieldNames - A list of field names.
|
|
3657
3678
|
*/
|
|
3658
3679
|
constructor(...t) {
|
|
3659
|
-
for (let
|
|
3680
|
+
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.");
|
|
3660
3681
|
this._internalPath = new tt(t);
|
|
3661
3682
|
}
|
|
3662
3683
|
/**
|
|
@@ -3672,8 +3693,8 @@ function me(t, n, ...e) {
|
|
|
3672
3693
|
/**
|
|
3673
3694
|
* Returns a special sentinel `FieldPath` to refer to the ID of a document.
|
|
3674
3695
|
* It can be used in queries to sort or filter by the document ID.
|
|
3675
|
-
*/ function
|
|
3676
|
-
return new
|
|
3696
|
+
*/ function _n() {
|
|
3697
|
+
return new yn("__name__");
|
|
3677
3698
|
}
|
|
3678
3699
|
|
|
3679
3700
|
/**
|
|
@@ -3694,7 +3715,7 @@ function me(t, n, ...e) {
|
|
|
3694
3715
|
*/
|
|
3695
3716
|
/**
|
|
3696
3717
|
* An immutable object representing an array of bytes.
|
|
3697
|
-
*/ class
|
|
3718
|
+
*/ class gn {
|
|
3698
3719
|
/** @hideconstructor */
|
|
3699
3720
|
constructor(t) {
|
|
3700
3721
|
this._byteString = t;
|
|
@@ -3706,7 +3727,7 @@ function me(t, n, ...e) {
|
|
|
3706
3727
|
* @param base64 - The Base64 string used to create the `Bytes` object.
|
|
3707
3728
|
*/ static fromBase64String(t) {
|
|
3708
3729
|
try {
|
|
3709
|
-
return new
|
|
3730
|
+
return new gn(It.fromBase64String(t));
|
|
3710
3731
|
} catch (t) {
|
|
3711
3732
|
throw new U(A, "Failed to construct data from Base64 string: " + t);
|
|
3712
3733
|
}
|
|
@@ -3716,7 +3737,7 @@ function me(t, n, ...e) {
|
|
|
3716
3737
|
*
|
|
3717
3738
|
* @param array - The Uint8Array used to create the `Bytes` object.
|
|
3718
3739
|
*/ static fromUint8Array(t) {
|
|
3719
|
-
return new
|
|
3740
|
+
return new gn(It.fromUint8Array(t));
|
|
3720
3741
|
}
|
|
3721
3742
|
/**
|
|
3722
3743
|
* Returns the underlying bytes as a Base64-encoded string.
|
|
@@ -3768,7 +3789,7 @@ function me(t, n, ...e) {
|
|
|
3768
3789
|
/**
|
|
3769
3790
|
* Sentinel values that can be used when writing document fields with `set()`
|
|
3770
3791
|
* or `update()`.
|
|
3771
|
-
*/ class
|
|
3792
|
+
*/ class vn {
|
|
3772
3793
|
/**
|
|
3773
3794
|
* @param _methodName - The public API endpoint that returns this class.
|
|
3774
3795
|
* @hideconstructor
|
|
@@ -3800,17 +3821,17 @@ function me(t, n, ...e) {
|
|
|
3800
3821
|
*
|
|
3801
3822
|
* Latitude values are in the range of [-90, 90].
|
|
3802
3823
|
* Longitude values are in the range of [-180, 180].
|
|
3803
|
-
*/ class
|
|
3824
|
+
*/ class bn {
|
|
3804
3825
|
/**
|
|
3805
3826
|
* Creates a new immutable `GeoPoint` object with the provided latitude and
|
|
3806
3827
|
* longitude values.
|
|
3807
3828
|
* @param latitude - The latitude as number between -90 and 90.
|
|
3808
3829
|
* @param longitude - The longitude as number between -180 and 180.
|
|
3809
3830
|
*/
|
|
3810
|
-
constructor(t,
|
|
3831
|
+
constructor(t, e) {
|
|
3811
3832
|
if (!isFinite(t) || t < -90 || t > 90) throw new U(A, "Latitude must be a number between -90 and 90, but was: " + t);
|
|
3812
|
-
if (!isFinite(
|
|
3813
|
-
this._lat = t, this._long =
|
|
3833
|
+
if (!isFinite(e) || e < -180 || e > 180) throw new U(A, "Longitude must be a number between -180 and 180, but was: " + e);
|
|
3834
|
+
this._lat = t, this._long = e;
|
|
3814
3835
|
}
|
|
3815
3836
|
/**
|
|
3816
3837
|
* The latitude of this `GeoPoint` instance.
|
|
@@ -3859,29 +3880,29 @@ function me(t, n, ...e) {
|
|
|
3859
3880
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3860
3881
|
* See the License for the specific language governing permissions and
|
|
3861
3882
|
* limitations under the License.
|
|
3862
|
-
*/ const
|
|
3883
|
+
*/ const En = /^__.*__$/;
|
|
3863
3884
|
|
|
3864
|
-
/** The result of parsing document data (e.g. for a setData call). */ class
|
|
3865
|
-
constructor(t,
|
|
3866
|
-
this.data = t, this.fieldMask =
|
|
3885
|
+
/** The result of parsing document data (e.g. for a setData call). */ class Tn {
|
|
3886
|
+
constructor(t, e, n) {
|
|
3887
|
+
this.data = t, this.fieldMask = e, this.fieldTransforms = n;
|
|
3867
3888
|
}
|
|
3868
|
-
toMutation(t,
|
|
3869
|
-
return null !== this.fieldMask ? new
|
|
3889
|
+
toMutation(t, e) {
|
|
3890
|
+
return null !== this.fieldMask ? new Ie(t, this.data, this.fieldMask, e, this.fieldTransforms) : new Te(t, this.data, e, this.fieldTransforms);
|
|
3870
3891
|
}
|
|
3871
3892
|
}
|
|
3872
3893
|
|
|
3873
|
-
/** The result of parsing "update" data (i.e. for an updateData call). */ class
|
|
3894
|
+
/** The result of parsing "update" data (i.e. for an updateData call). */ class In {
|
|
3874
3895
|
constructor(t,
|
|
3875
3896
|
// The fieldMask does not include document transforms.
|
|
3876
|
-
|
|
3877
|
-
this.data = t, this.fieldMask =
|
|
3897
|
+
e, n) {
|
|
3898
|
+
this.data = t, this.fieldMask = e, this.fieldTransforms = n;
|
|
3878
3899
|
}
|
|
3879
|
-
toMutation(t,
|
|
3880
|
-
return new
|
|
3900
|
+
toMutation(t, e) {
|
|
3901
|
+
return new Ie(t, this.data, this.fieldMask, e, this.fieldTransforms);
|
|
3881
3902
|
}
|
|
3882
3903
|
}
|
|
3883
3904
|
|
|
3884
|
-
function
|
|
3905
|
+
function An(t) {
|
|
3885
3906
|
switch (t) {
|
|
3886
3907
|
case 0 /* Set */ :
|
|
3887
3908
|
// fall through
|
|
@@ -3899,7 +3920,7 @@ function Re(t) {
|
|
|
3899
3920
|
}
|
|
3900
3921
|
}
|
|
3901
3922
|
|
|
3902
|
-
/** A "context" object passed around while parsing user data. */ class
|
|
3923
|
+
/** A "context" object passed around while parsing user data. */ class Rn {
|
|
3903
3924
|
/**
|
|
3904
3925
|
* Initializes a ParseContext with the given source and path.
|
|
3905
3926
|
*
|
|
@@ -3918,8 +3939,8 @@ function Re(t) {
|
|
|
3918
3939
|
* which case certain features will not work and errors will be somewhat
|
|
3919
3940
|
* compromised).
|
|
3920
3941
|
*/
|
|
3921
|
-
constructor(t,
|
|
3922
|
-
this.settings = t, this.databaseId =
|
|
3942
|
+
constructor(t, e, n, r, s, i) {
|
|
3943
|
+
this.settings = t, this.databaseId = e, this.q = n, this.ignoreUndefinedProperties = r,
|
|
3923
3944
|
// Minor hack: If fieldTransforms is undefined, we assume this is an
|
|
3924
3945
|
// external call and we need to validate the entire path.
|
|
3925
3946
|
void 0 === s && this.Z(), this.fieldTransforms = s || [], this.fieldMask = i || [];
|
|
@@ -3930,21 +3951,21 @@ function Re(t) {
|
|
|
3930
3951
|
get tt() {
|
|
3931
3952
|
return this.settings.tt;
|
|
3932
3953
|
}
|
|
3933
|
-
/** Returns a new context with the specified settings overwritten. */
|
|
3934
|
-
return new
|
|
3954
|
+
/** Returns a new context with the specified settings overwritten. */ et(t) {
|
|
3955
|
+
return new Rn(Object.assign(Object.assign({}, this.settings), t), this.databaseId, this.q, this.ignoreUndefinedProperties, this.fieldTransforms, this.fieldMask);
|
|
3935
3956
|
}
|
|
3936
|
-
|
|
3937
|
-
var
|
|
3938
|
-
const
|
|
3939
|
-
path:
|
|
3957
|
+
nt(t) {
|
|
3958
|
+
var e;
|
|
3959
|
+
const n = null === (e = this.path) || void 0 === e ? void 0 : e.child(t), r = this.et({
|
|
3960
|
+
path: n,
|
|
3940
3961
|
rt: !1
|
|
3941
3962
|
});
|
|
3942
3963
|
return r.st(t), r;
|
|
3943
3964
|
}
|
|
3944
3965
|
it(t) {
|
|
3945
|
-
var
|
|
3946
|
-
const
|
|
3947
|
-
path:
|
|
3966
|
+
var e;
|
|
3967
|
+
const n = null === (e = this.path) || void 0 === e ? void 0 : e.child(t), r = this.et({
|
|
3968
|
+
path: n,
|
|
3948
3969
|
rt: !1
|
|
3949
3970
|
});
|
|
3950
3971
|
return r.Z(), r;
|
|
@@ -3952,16 +3973,16 @@ function Re(t) {
|
|
|
3952
3973
|
ot(t) {
|
|
3953
3974
|
// TODO(b/34871131): We don't support array paths right now; so make path
|
|
3954
3975
|
// undefined.
|
|
3955
|
-
return this.
|
|
3976
|
+
return this.et({
|
|
3956
3977
|
path: void 0,
|
|
3957
3978
|
rt: !0
|
|
3958
3979
|
});
|
|
3959
3980
|
}
|
|
3960
3981
|
ut(t) {
|
|
3961
|
-
return
|
|
3982
|
+
return Qn(t, this.settings.methodName, this.settings.ct || !1, this.path, this.settings.at);
|
|
3962
3983
|
}
|
|
3963
3984
|
/** Returns 'true' if 'fieldPath' was traversed when creating this context. */ contains(t) {
|
|
3964
|
-
return void 0 !== this.fieldMask.find((
|
|
3985
|
+
return void 0 !== this.fieldMask.find((e => t.isPrefixOf(e))) || void 0 !== this.fieldTransforms.find((e => t.isPrefixOf(e.field)));
|
|
3965
3986
|
}
|
|
3966
3987
|
Z() {
|
|
3967
3988
|
// TODO(b/34871131): Remove null check once we have proper paths for fields
|
|
@@ -3970,22 +3991,22 @@ function Re(t) {
|
|
|
3970
3991
|
}
|
|
3971
3992
|
st(t) {
|
|
3972
3993
|
if (0 === t.length) throw this.ut("Document fields must not be empty");
|
|
3973
|
-
if (
|
|
3994
|
+
if (An(this.tt) && En.test(t)) throw this.ut('Document fields cannot begin and end with "__"');
|
|
3974
3995
|
}
|
|
3975
3996
|
}
|
|
3976
3997
|
|
|
3977
3998
|
/**
|
|
3978
3999
|
* Helper for parsing raw user input (provided via the API) into internal model
|
|
3979
4000
|
* classes.
|
|
3980
|
-
*/ class
|
|
3981
|
-
constructor(t,
|
|
3982
|
-
this.databaseId = t, this.ignoreUndefinedProperties =
|
|
4001
|
+
*/ class Pn {
|
|
4002
|
+
constructor(t, e, n) {
|
|
4003
|
+
this.databaseId = t, this.ignoreUndefinedProperties = e, this.q = n || Ye(t);
|
|
3983
4004
|
}
|
|
3984
|
-
/** Creates a new top-level parse context. */ ht(t,
|
|
3985
|
-
return new
|
|
4005
|
+
/** Creates a new top-level parse context. */ ht(t, e, n, r = !1) {
|
|
4006
|
+
return new Rn({
|
|
3986
4007
|
tt: t,
|
|
3987
|
-
methodName:
|
|
3988
|
-
at:
|
|
4008
|
+
methodName: e,
|
|
4009
|
+
at: n,
|
|
3989
4010
|
path: tt.emptyPath(),
|
|
3990
4011
|
rt: !1,
|
|
3991
4012
|
ct: r
|
|
@@ -3993,29 +4014,29 @@ function Re(t) {
|
|
|
3993
4014
|
}
|
|
3994
4015
|
}
|
|
3995
4016
|
|
|
3996
|
-
function
|
|
3997
|
-
const
|
|
3998
|
-
return new
|
|
4017
|
+
function Vn(t) {
|
|
4018
|
+
const e = t._freezeSettings(), n = Ye(t._databaseId);
|
|
4019
|
+
return new Pn(t._databaseId, !!e.ignoreUndefinedProperties, n);
|
|
3999
4020
|
}
|
|
4000
4021
|
|
|
4001
|
-
/** Parse document data from a set() call. */ function
|
|
4002
|
-
const o = t.ht(i.merge || i.mergeFields ? 2 /* MergeSet */ : 0 /* Set */ ,
|
|
4003
|
-
|
|
4004
|
-
const u =
|
|
4022
|
+
/** Parse document data from a set() call. */ function Dn(t, e, n, r, s, i = {}) {
|
|
4023
|
+
const o = t.ht(i.merge || i.mergeFields ? 2 /* MergeSet */ : 0 /* Set */ , e, n, s);
|
|
4024
|
+
Mn("Data must be an object, but it was:", o, r);
|
|
4025
|
+
const u = kn(r, o);
|
|
4005
4026
|
let c, a;
|
|
4006
4027
|
if (i.merge) c = new Tt(o.fieldMask), a = o.fieldTransforms; else if (i.mergeFields) {
|
|
4007
4028
|
const t = [];
|
|
4008
4029
|
for (const r of i.mergeFields) {
|
|
4009
|
-
const s =
|
|
4030
|
+
const s = Bn(e, r, n);
|
|
4010
4031
|
if (!o.contains(s)) throw new U(A, `Field '${s}' is specified in your field mask but missing from your input data.`);
|
|
4011
|
-
|
|
4032
|
+
Wn(t, s) || t.push(s);
|
|
4012
4033
|
}
|
|
4013
4034
|
c = new Tt(t), a = o.fieldTransforms.filter((t => c.covers(t.field)));
|
|
4014
4035
|
} else c = null, a = o.fieldTransforms;
|
|
4015
|
-
return new
|
|
4036
|
+
return new Tn(new Bt(u), c, a);
|
|
4016
4037
|
}
|
|
4017
4038
|
|
|
4018
|
-
class
|
|
4039
|
+
class Nn extends vn {
|
|
4019
4040
|
_toFieldTransform(t) {
|
|
4020
4041
|
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}`);
|
|
4021
4042
|
// No transform to add for a delete, but we need to add it to our
|
|
@@ -4023,7 +4044,7 @@ class $e extends be {
|
|
|
4023
4044
|
return t.fieldMask.push(t.path), null;
|
|
4024
4045
|
}
|
|
4025
4046
|
isEqual(t) {
|
|
4026
|
-
return t instanceof
|
|
4047
|
+
return t instanceof Nn;
|
|
4027
4048
|
}
|
|
4028
4049
|
}
|
|
4029
4050
|
|
|
@@ -4042,32 +4063,32 @@ class $e extends be {
|
|
|
4042
4063
|
* context.
|
|
4043
4064
|
* @param context - The parent context.
|
|
4044
4065
|
* @param arrayElement - Whether or not the FieldValue has an array.
|
|
4045
|
-
*/ function
|
|
4046
|
-
return new
|
|
4066
|
+
*/ function $n(t, e, n) {
|
|
4067
|
+
return new Rn({
|
|
4047
4068
|
tt: 3 /* Argument */ ,
|
|
4048
|
-
at:
|
|
4069
|
+
at: e.settings.at,
|
|
4049
4070
|
methodName: t._methodName,
|
|
4050
|
-
rt:
|
|
4051
|
-
},
|
|
4071
|
+
rt: n
|
|
4072
|
+
}, e.databaseId, e.q, e.ignoreUndefinedProperties);
|
|
4052
4073
|
}
|
|
4053
4074
|
|
|
4054
|
-
class
|
|
4075
|
+
class Sn extends vn {
|
|
4055
4076
|
_toFieldTransform(t) {
|
|
4056
|
-
return new
|
|
4077
|
+
return new ve(t.path, new pe);
|
|
4057
4078
|
}
|
|
4058
4079
|
isEqual(t) {
|
|
4059
|
-
return t instanceof
|
|
4080
|
+
return t instanceof Sn;
|
|
4060
4081
|
}
|
|
4061
4082
|
}
|
|
4062
4083
|
|
|
4063
|
-
class
|
|
4064
|
-
constructor(t,
|
|
4065
|
-
super(t), this.lt =
|
|
4084
|
+
class Fn extends vn {
|
|
4085
|
+
constructor(t, e) {
|
|
4086
|
+
super(t), this.lt = e;
|
|
4066
4087
|
}
|
|
4067
4088
|
_toFieldTransform(t) {
|
|
4068
|
-
const
|
|
4069
|
-
/*array=*/ !0),
|
|
4070
|
-
return new
|
|
4089
|
+
const e = $n(this, t,
|
|
4090
|
+
/*array=*/ !0), n = this.lt.map((t => Un(t, e))), r = new ye(n);
|
|
4091
|
+
return new ve(t.path, r);
|
|
4071
4092
|
}
|
|
4072
4093
|
isEqual(t) {
|
|
4073
4094
|
// TODO(mrschmidt): Implement isEquals
|
|
@@ -4075,14 +4096,14 @@ class xe extends be {
|
|
|
4075
4096
|
}
|
|
4076
4097
|
}
|
|
4077
4098
|
|
|
4078
|
-
class
|
|
4079
|
-
constructor(t,
|
|
4080
|
-
super(t), this.lt =
|
|
4099
|
+
class xn extends vn {
|
|
4100
|
+
constructor(t, e) {
|
|
4101
|
+
super(t), this.lt = e;
|
|
4081
4102
|
}
|
|
4082
4103
|
_toFieldTransform(t) {
|
|
4083
|
-
const
|
|
4084
|
-
/*array=*/ !0),
|
|
4085
|
-
return new
|
|
4104
|
+
const e = $n(this, t,
|
|
4105
|
+
/*array=*/ !0), n = this.lt.map((t => Un(t, e))), r = new _e(n);
|
|
4106
|
+
return new ve(t.path, r);
|
|
4086
4107
|
}
|
|
4087
4108
|
isEqual(t) {
|
|
4088
4109
|
// TODO(mrschmidt): Implement isEquals
|
|
@@ -4090,13 +4111,13 @@ class qe extends be {
|
|
|
4090
4111
|
}
|
|
4091
4112
|
}
|
|
4092
4113
|
|
|
4093
|
-
class
|
|
4094
|
-
constructor(t,
|
|
4095
|
-
super(t), this.ft =
|
|
4114
|
+
class qn extends vn {
|
|
4115
|
+
constructor(t, e) {
|
|
4116
|
+
super(t), this.ft = e;
|
|
4096
4117
|
}
|
|
4097
4118
|
_toFieldTransform(t) {
|
|
4098
|
-
const
|
|
4099
|
-
return new
|
|
4119
|
+
const e = new ge(t.q, we(t.q, this.ft));
|
|
4120
|
+
return new ve(t.path, e);
|
|
4100
4121
|
}
|
|
4101
4122
|
isEqual(t) {
|
|
4102
4123
|
// TODO(mrschmidt): Implement isEquals
|
|
@@ -4104,50 +4125,50 @@ class Oe extends be {
|
|
|
4104
4125
|
}
|
|
4105
4126
|
}
|
|
4106
4127
|
|
|
4107
|
-
/** Parse update data from an update() call. */ function
|
|
4108
|
-
const s = t.ht(1 /* Update */ ,
|
|
4109
|
-
|
|
4128
|
+
/** Parse update data from an update() call. */ function On(t, e, n, r) {
|
|
4129
|
+
const s = t.ht(1 /* Update */ , e, n);
|
|
4130
|
+
Mn("Data must be an object, but it was:", s, r);
|
|
4110
4131
|
const i = [], o = Bt.empty();
|
|
4111
4132
|
Et(r, ((t, r) => {
|
|
4112
|
-
const u =
|
|
4133
|
+
const u = Gn(e, t, n);
|
|
4113
4134
|
// For Compat types, we have to "extract" the underlying types before
|
|
4114
4135
|
// performing validation.
|
|
4115
4136
|
r = getModularInstance(r);
|
|
4116
4137
|
const c = s.it(u);
|
|
4117
|
-
if (r instanceof
|
|
4138
|
+
if (r instanceof Nn)
|
|
4118
4139
|
// Add it to the field mask, but don't add anything to updateData.
|
|
4119
4140
|
i.push(u); else {
|
|
4120
|
-
const t =
|
|
4141
|
+
const t = Un(r, c);
|
|
4121
4142
|
null != t && (i.push(u), o.set(u, t));
|
|
4122
4143
|
}
|
|
4123
4144
|
}));
|
|
4124
4145
|
const u = new Tt(i);
|
|
4125
|
-
return new
|
|
4146
|
+
return new In(o, u, s.fieldTransforms);
|
|
4126
4147
|
}
|
|
4127
4148
|
|
|
4128
|
-
/** Parse update data from a list of field/value arguments. */ function
|
|
4129
|
-
const o = t.ht(1 /* Update */ ,
|
|
4130
|
-
if (i.length % 2 != 0) throw new U(A, `Function ${
|
|
4131
|
-
for (let t = 0; t < i.length; t += 2) u.push(
|
|
4149
|
+
/** Parse update data from a list of field/value arguments. */ function Cn(t, e, n, r, s, i) {
|
|
4150
|
+
const o = t.ht(1 /* Update */ , e, n), u = [ Bn(e, r, n) ], c = [ s ];
|
|
4151
|
+
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.`);
|
|
4152
|
+
for (let t = 0; t < i.length; t += 2) u.push(Bn(e, i[t])), c.push(i[t + 1]);
|
|
4132
4153
|
const a = [], l = Bt.empty();
|
|
4133
4154
|
// We iterate in reverse order to pick the last value for a field if the
|
|
4134
4155
|
// user specified the field multiple times.
|
|
4135
|
-
for (let t = u.length - 1; t >= 0; --t) if (!
|
|
4136
|
-
const
|
|
4137
|
-
let
|
|
4156
|
+
for (let t = u.length - 1; t >= 0; --t) if (!Wn(a, u[t])) {
|
|
4157
|
+
const e = u[t];
|
|
4158
|
+
let n = c[t];
|
|
4138
4159
|
// For Compat types, we have to "extract" the underlying types before
|
|
4139
4160
|
// performing validation.
|
|
4140
|
-
|
|
4141
|
-
const r = o.it(
|
|
4142
|
-
if (
|
|
4161
|
+
n = getModularInstance(n);
|
|
4162
|
+
const r = o.it(e);
|
|
4163
|
+
if (n instanceof Nn)
|
|
4143
4164
|
// Add it to the field mask, but don't add anything to updateData.
|
|
4144
|
-
a.push(
|
|
4145
|
-
const t =
|
|
4146
|
-
null != t && (a.push(
|
|
4165
|
+
a.push(e); else {
|
|
4166
|
+
const t = Un(n, r);
|
|
4167
|
+
null != t && (a.push(e), l.set(e, t));
|
|
4147
4168
|
}
|
|
4148
4169
|
}
|
|
4149
4170
|
const f = new Tt(a);
|
|
4150
|
-
return new
|
|
4171
|
+
return new In(l, f, o.fieldTransforms);
|
|
4151
4172
|
}
|
|
4152
4173
|
|
|
4153
4174
|
/**
|
|
@@ -4156,8 +4177,8 @@ class Oe extends be {
|
|
|
4156
4177
|
*
|
|
4157
4178
|
* @param allowArrays - Whether the query value is an array that may directly
|
|
4158
4179
|
* contain additional arrays (e.g. the operand of an `in` query).
|
|
4159
|
-
*/ function
|
|
4160
|
-
return
|
|
4180
|
+
*/ function Ln(t, e, n, r = !1) {
|
|
4181
|
+
return Un(n, t.ht(r ? 4 /* ArrayArgument */ : 3 /* Argument */ , e));
|
|
4161
4182
|
}
|
|
4162
4183
|
|
|
4163
4184
|
/**
|
|
@@ -4168,12 +4189,12 @@ class Oe extends be {
|
|
|
4168
4189
|
* the source of the data being parsed, etc.
|
|
4169
4190
|
* @returns The parsed value, or null if the value was a FieldValue sentinel
|
|
4170
4191
|
* that should not be included in the resulting parsed data.
|
|
4171
|
-
*/ function
|
|
4172
|
-
if (
|
|
4192
|
+
*/ function Un(t, e) {
|
|
4193
|
+
if (jn(
|
|
4173
4194
|
// Unwrap the API type from the Compat SDK. This will return the API type
|
|
4174
4195
|
// from firestore-exp.
|
|
4175
|
-
t = getModularInstance(t))) return
|
|
4176
|
-
if (t instanceof
|
|
4196
|
+
t = getModularInstance(t))) return Mn("Unsupported field value:", e, t), kn(t, e);
|
|
4197
|
+
if (t instanceof vn)
|
|
4177
4198
|
// FieldValues usually parse into transforms (except deleteField())
|
|
4178
4199
|
// in which case we do not want to include this field in our parsed data
|
|
4179
4200
|
// (as doing so will overwrite the field directly prior to the transform
|
|
@@ -4183,19 +4204,19 @@ class Oe extends be {
|
|
|
4183
4204
|
* "Parses" the provided FieldValueImpl, adding any necessary transforms to
|
|
4184
4205
|
* context.fieldTransforms.
|
|
4185
4206
|
*/
|
|
4186
|
-
return function(t,
|
|
4207
|
+
return function(t, e) {
|
|
4187
4208
|
// Sentinels are only supported with writes, and not within arrays.
|
|
4188
|
-
if (!
|
|
4189
|
-
if (!
|
|
4190
|
-
const
|
|
4191
|
-
|
|
4209
|
+
if (!An(e.tt)) throw e.ut(`${t._methodName}() can only be used with update() and set()`);
|
|
4210
|
+
if (!e.path) throw e.ut(`${t._methodName}() is not currently supported inside arrays`);
|
|
4211
|
+
const n = t._toFieldTransform(e);
|
|
4212
|
+
n && e.fieldTransforms.push(n);
|
|
4192
4213
|
}
|
|
4193
4214
|
/**
|
|
4194
4215
|
* Helper to parse a scalar value (i.e. not an Object, Array, or FieldValue)
|
|
4195
4216
|
*
|
|
4196
4217
|
* @returns The parsed value
|
|
4197
|
-
*/ (t,
|
|
4198
|
-
if (void 0 === t &&
|
|
4218
|
+
*/ (t, e), null;
|
|
4219
|
+
if (void 0 === t && e.ignoreUndefinedProperties)
|
|
4199
4220
|
// If the input is undefined it can never participate in the fieldMask, so
|
|
4200
4221
|
// don't handle this below. If `ignoreUndefinedProperties` is false,
|
|
4201
4222
|
// `parseScalarValue` will reject an undefined value.
|
|
@@ -4203,38 +4224,38 @@ class Oe extends be {
|
|
|
4203
4224
|
if (
|
|
4204
4225
|
// If context.path is null we are inside an array and we don't support
|
|
4205
4226
|
// field mask paths more granular than the top-level array.
|
|
4206
|
-
|
|
4227
|
+
e.path && e.fieldMask.push(e.path), t instanceof Array) {
|
|
4207
4228
|
// TODO(b/34871131): Include the path containing the array in the error
|
|
4208
4229
|
// message.
|
|
4209
4230
|
// In the case of IN queries, the parsed data is an array (representing
|
|
4210
4231
|
// the set of values to be included for the IN query) that may directly
|
|
4211
4232
|
// contain additional arrays (each representing an individual field
|
|
4212
4233
|
// value), so we disable this validation.
|
|
4213
|
-
if (
|
|
4214
|
-
return function(t,
|
|
4215
|
-
const
|
|
4234
|
+
if (e.settings.rt && 4 /* ArrayArgument */ !== e.tt) throw e.ut("Nested arrays are not supported");
|
|
4235
|
+
return function(t, e) {
|
|
4236
|
+
const n = [];
|
|
4216
4237
|
let r = 0;
|
|
4217
4238
|
for (const s of t) {
|
|
4218
|
-
let t =
|
|
4239
|
+
let t = Un(s, e.ot(r));
|
|
4219
4240
|
null == t && (
|
|
4220
4241
|
// Just include nulls in the array for fields being replaced with a
|
|
4221
4242
|
// sentinel.
|
|
4222
4243
|
t = {
|
|
4223
4244
|
nullValue: "NULL_VALUE"
|
|
4224
|
-
}),
|
|
4245
|
+
}), n.push(t), r++;
|
|
4225
4246
|
}
|
|
4226
4247
|
return {
|
|
4227
4248
|
arrayValue: {
|
|
4228
|
-
values:
|
|
4249
|
+
values: n
|
|
4229
4250
|
}
|
|
4230
4251
|
};
|
|
4231
|
-
}(t,
|
|
4252
|
+
}(t, e);
|
|
4232
4253
|
}
|
|
4233
|
-
return function(t,
|
|
4254
|
+
return function(t, e) {
|
|
4234
4255
|
if (null === (t = getModularInstance(t))) return {
|
|
4235
4256
|
nullValue: "NULL_VALUE"
|
|
4236
4257
|
};
|
|
4237
|
-
if ("number" == typeof t) return
|
|
4258
|
+
if ("number" == typeof t) return we(e.q, t);
|
|
4238
4259
|
if ("boolean" == typeof t) return {
|
|
4239
4260
|
booleanValue: t
|
|
4240
4261
|
};
|
|
@@ -4242,37 +4263,37 @@ class Oe extends be {
|
|
|
4242
4263
|
stringValue: t
|
|
4243
4264
|
};
|
|
4244
4265
|
if (t instanceof Date) {
|
|
4245
|
-
const
|
|
4266
|
+
const n = gt.fromDate(t);
|
|
4246
4267
|
return {
|
|
4247
|
-
timestampValue:
|
|
4268
|
+
timestampValue: Ne(e.q, n)
|
|
4248
4269
|
};
|
|
4249
4270
|
}
|
|
4250
4271
|
if (t instanceof gt) {
|
|
4251
4272
|
// Firestore backend truncates precision down to microseconds. To ensure
|
|
4252
4273
|
// offline mode works the same with regards to truncation, perform the
|
|
4253
4274
|
// truncation immediately without waiting for the backend to do that.
|
|
4254
|
-
const
|
|
4275
|
+
const n = new gt(t.seconds, 1e3 * Math.floor(t.nanoseconds / 1e3));
|
|
4255
4276
|
return {
|
|
4256
|
-
timestampValue:
|
|
4277
|
+
timestampValue: Ne(e.q, n)
|
|
4257
4278
|
};
|
|
4258
4279
|
}
|
|
4259
|
-
if (t instanceof
|
|
4280
|
+
if (t instanceof bn) return {
|
|
4260
4281
|
geoPointValue: {
|
|
4261
4282
|
latitude: t.latitude,
|
|
4262
4283
|
longitude: t.longitude
|
|
4263
4284
|
}
|
|
4264
4285
|
};
|
|
4265
|
-
if (t instanceof
|
|
4266
|
-
bytesValue:
|
|
4286
|
+
if (t instanceof gn) return {
|
|
4287
|
+
bytesValue: $e(e.q, t._byteString)
|
|
4267
4288
|
};
|
|
4268
|
-
if (t instanceof
|
|
4269
|
-
const
|
|
4270
|
-
if (!r.isEqual(
|
|
4289
|
+
if (t instanceof an) {
|
|
4290
|
+
const n = e.databaseId, r = t.firestore._databaseId;
|
|
4291
|
+
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}`);
|
|
4271
4292
|
return {
|
|
4272
|
-
referenceValue:
|
|
4293
|
+
referenceValue: xe(t.firestore._databaseId || e.databaseId, t._key.path)
|
|
4273
4294
|
};
|
|
4274
4295
|
}
|
|
4275
|
-
throw
|
|
4296
|
+
throw e.ut(`Unsupported field value: ${it(t)}`);
|
|
4276
4297
|
}
|
|
4277
4298
|
/**
|
|
4278
4299
|
* Checks whether an object looks like a JSON object that should be converted
|
|
@@ -4280,56 +4301,56 @@ class Oe extends be {
|
|
|
4280
4301
|
* JSON objects since they should be converted to a struct value. Arrays, Dates,
|
|
4281
4302
|
* GeoPoints, etc. are not considered to look like JSON objects since they map
|
|
4282
4303
|
* to specific FieldValue types other than ObjectValue.
|
|
4283
|
-
*/ (t,
|
|
4304
|
+
*/ (t, e);
|
|
4284
4305
|
}
|
|
4285
4306
|
|
|
4286
|
-
function
|
|
4287
|
-
const
|
|
4307
|
+
function kn(t, e) {
|
|
4308
|
+
const n = {};
|
|
4288
4309
|
return !function(t) {
|
|
4289
|
-
for (const
|
|
4310
|
+
for (const e in t) if (Object.prototype.hasOwnProperty.call(t, e)) return !1;
|
|
4290
4311
|
return !0;
|
|
4291
4312
|
}(t) ? Et(t, ((t, r) => {
|
|
4292
|
-
const s =
|
|
4293
|
-
null != s && (
|
|
4313
|
+
const s = Un(r, e.nt(t));
|
|
4314
|
+
null != s && (n[t] = s);
|
|
4294
4315
|
})) :
|
|
4295
4316
|
// If we encounter an empty object, we explicitly add it to the update
|
|
4296
4317
|
// mask to ensure that the server creates a map entry.
|
|
4297
|
-
|
|
4318
|
+
e.path && e.path.length > 0 && e.fieldMask.push(e.path), {
|
|
4298
4319
|
mapValue: {
|
|
4299
|
-
fields:
|
|
4320
|
+
fields: n
|
|
4300
4321
|
}
|
|
4301
4322
|
};
|
|
4302
4323
|
}
|
|
4303
4324
|
|
|
4304
|
-
function
|
|
4305
|
-
return !("object" != typeof t || null === t || t instanceof Array || t instanceof Date || t instanceof gt || t instanceof
|
|
4325
|
+
function jn(t) {
|
|
4326
|
+
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);
|
|
4306
4327
|
}
|
|
4307
4328
|
|
|
4308
|
-
function
|
|
4309
|
-
if (!
|
|
4329
|
+
function Mn(t, e, n) {
|
|
4330
|
+
if (!jn(n) || !function(t) {
|
|
4310
4331
|
return "object" == typeof t && null !== t && (Object.getPrototypeOf(t) === Object.prototype || null === Object.getPrototypeOf(t));
|
|
4311
|
-
}(
|
|
4312
|
-
const r = it(
|
|
4313
|
-
throw "an object" === r ?
|
|
4332
|
+
}(n)) {
|
|
4333
|
+
const r = it(n);
|
|
4334
|
+
throw "an object" === r ? e.ut(t + " a custom object") : e.ut(t + " " + r);
|
|
4314
4335
|
}
|
|
4315
4336
|
}
|
|
4316
4337
|
|
|
4317
4338
|
/**
|
|
4318
4339
|
* Helper that calls fromDotSeparatedString() but wraps any error thrown.
|
|
4319
|
-
*/ function
|
|
4340
|
+
*/ function Bn(t, e, n) {
|
|
4320
4341
|
if ((
|
|
4321
4342
|
// If required, replace the FieldPath Compat class with with the firestore-exp
|
|
4322
4343
|
// FieldPath.
|
|
4323
|
-
|
|
4324
|
-
if ("string" == typeof
|
|
4325
|
-
throw
|
|
4344
|
+
e = getModularInstance(e)) instanceof yn) return e._internalPath;
|
|
4345
|
+
if ("string" == typeof e) return Gn(t, e);
|
|
4346
|
+
throw Qn("Field path arguments must be of type string or ", t,
|
|
4326
4347
|
/* hasConverter= */ !1,
|
|
4327
|
-
/* path= */ void 0,
|
|
4348
|
+
/* path= */ void 0, n);
|
|
4328
4349
|
}
|
|
4329
4350
|
|
|
4330
4351
|
/**
|
|
4331
4352
|
* Matches any characters in a field path string that are reserved.
|
|
4332
|
-
*/ const
|
|
4353
|
+
*/ const zn = new RegExp("[~\\*/\\[\\]]");
|
|
4333
4354
|
|
|
4334
4355
|
/**
|
|
4335
4356
|
* Wraps fromDotSeparatedString with an error message about the method that
|
|
@@ -4339,30 +4360,30 @@ function Be(t, n, e) {
|
|
|
4339
4360
|
* split on dots.
|
|
4340
4361
|
* @param targetDoc - The document against which the field path will be
|
|
4341
4362
|
* evaluated.
|
|
4342
|
-
*/ function
|
|
4343
|
-
if (
|
|
4363
|
+
*/ function Gn(t, e, n) {
|
|
4364
|
+
if (e.search(zn) >= 0) throw Qn(`Invalid field path (${e}). Paths must not contain '~', '*', '/', '[', or ']'`, t,
|
|
4344
4365
|
/* hasConverter= */ !1,
|
|
4345
|
-
/* path= */ void 0,
|
|
4366
|
+
/* path= */ void 0, n);
|
|
4346
4367
|
try {
|
|
4347
|
-
return new
|
|
4368
|
+
return new yn(...e.split("."))._internalPath;
|
|
4348
4369
|
} catch (r) {
|
|
4349
|
-
throw
|
|
4370
|
+
throw Qn(`Invalid field path (${e}). Paths must not be empty, begin with '.', end with '.', or contain '..'`, t,
|
|
4350
4371
|
/* hasConverter= */ !1,
|
|
4351
|
-
/* path= */ void 0,
|
|
4372
|
+
/* path= */ void 0, n);
|
|
4352
4373
|
}
|
|
4353
4374
|
}
|
|
4354
4375
|
|
|
4355
|
-
function
|
|
4376
|
+
function Qn(t, e, n, r, s) {
|
|
4356
4377
|
const i = r && !r.isEmpty(), o = void 0 !== s;
|
|
4357
|
-
let u = `Function ${
|
|
4358
|
-
|
|
4378
|
+
let u = `Function ${e}() called with invalid data`;
|
|
4379
|
+
n && (u += " (via `toFirestore()`)"), u += ". ";
|
|
4359
4380
|
let c = "";
|
|
4360
4381
|
return (i || o) && (c += " (found", i && (c += ` in field ${r}`), o && (c += ` in document ${s}`),
|
|
4361
4382
|
c += ")"), new U(A, u + t + c);
|
|
4362
4383
|
}
|
|
4363
4384
|
|
|
4364
|
-
/** Checks `haystack` if FieldPath `needle` is present. Runs in O(n). */ function
|
|
4365
|
-
return t.some((t => t.isEqual(
|
|
4385
|
+
/** Checks `haystack` if FieldPath `needle` is present. Runs in O(n). */ function Wn(t, e) {
|
|
4386
|
+
return t.some((t => t.isEqual(e)));
|
|
4366
4387
|
}
|
|
4367
4388
|
|
|
4368
4389
|
/**
|
|
@@ -4389,14 +4410,14 @@ function We(t, n, e, r, s) {
|
|
|
4389
4410
|
* For a `DocumentSnapshot` that points to a non-existing document, any data
|
|
4390
4411
|
* access will return 'undefined'. You can use the `exists()` method to
|
|
4391
4412
|
* explicitly verify a document's existence.
|
|
4392
|
-
*/ class
|
|
4413
|
+
*/ class Yn {
|
|
4393
4414
|
// Note: This class is stripped down version of the DocumentSnapshot in
|
|
4394
4415
|
// the legacy SDK. The changes are:
|
|
4395
4416
|
// - No support for SnapshotMetadata.
|
|
4396
4417
|
// - No support for SnapshotOptions.
|
|
4397
4418
|
/** @hideconstructor protected */
|
|
4398
|
-
constructor(t,
|
|
4399
|
-
this._firestore = t, this._userDataWriter =
|
|
4419
|
+
constructor(t, e, n, r, s) {
|
|
4420
|
+
this._firestore = t, this._userDataWriter = e, this._key = n, this._document = r,
|
|
4400
4421
|
this._converter = s;
|
|
4401
4422
|
}
|
|
4402
4423
|
/** Property of the `DocumentSnapshot` that provides the document's ID. */ get id() {
|
|
@@ -4405,7 +4426,7 @@ function We(t, n, e, r, s) {
|
|
|
4405
4426
|
/**
|
|
4406
4427
|
* The `DocumentReference` for the document included in the `DocumentSnapshot`.
|
|
4407
4428
|
*/ get ref() {
|
|
4408
|
-
return new
|
|
4429
|
+
return new an(this._firestore, this._converter, this._key);
|
|
4409
4430
|
}
|
|
4410
4431
|
/**
|
|
4411
4432
|
* Signals whether or not the document at the snapshot's location exists.
|
|
@@ -4425,7 +4446,7 @@ function We(t, n, e, r, s) {
|
|
|
4425
4446
|
if (this._converter) {
|
|
4426
4447
|
// We only want to use the converter and create a new DocumentSnapshot
|
|
4427
4448
|
// if a converter has been provided.
|
|
4428
|
-
const t = new
|
|
4449
|
+
const t = new Hn(this._firestore, this._userDataWriter, this._key, this._document,
|
|
4429
4450
|
/* converter= */ null);
|
|
4430
4451
|
return this._converter.fromFirestore(t);
|
|
4431
4452
|
}
|
|
@@ -4445,8 +4466,8 @@ function We(t, n, e, r, s) {
|
|
|
4445
4466
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4446
4467
|
get(t) {
|
|
4447
4468
|
if (this._document) {
|
|
4448
|
-
const
|
|
4449
|
-
if (null !==
|
|
4469
|
+
const e = this._document.data.field(Xn("DocumentSnapshot.get", t));
|
|
4470
|
+
if (null !== e) return this._userDataWriter.convertValue(e);
|
|
4450
4471
|
}
|
|
4451
4472
|
}
|
|
4452
4473
|
}
|
|
@@ -4461,7 +4482,7 @@ function We(t, n, e, r, s) {
|
|
|
4461
4482
|
* `DocumentSnapshot`. Since query results contain only existing documents, the
|
|
4462
4483
|
* `exists` property will always be true and `data()` will never return
|
|
4463
4484
|
* 'undefined'.
|
|
4464
|
-
*/ class
|
|
4485
|
+
*/ class Hn extends Yn {
|
|
4465
4486
|
/**
|
|
4466
4487
|
* Retrieves all fields in the document as an `Object`.
|
|
4467
4488
|
*
|
|
@@ -4479,10 +4500,10 @@ function We(t, n, e, r, s) {
|
|
|
4479
4500
|
* array via the `docs` property or enumerated using the `forEach` method. The
|
|
4480
4501
|
* number of documents can be determined via the `empty` and `size`
|
|
4481
4502
|
* properties.
|
|
4482
|
-
*/ class
|
|
4503
|
+
*/ class Kn {
|
|
4483
4504
|
/** @hideconstructor */
|
|
4484
|
-
constructor(t,
|
|
4485
|
-
this._docs =
|
|
4505
|
+
constructor(t, e) {
|
|
4506
|
+
this._docs = e, this.query = t;
|
|
4486
4507
|
}
|
|
4487
4508
|
/** An array of all the documents in the `QuerySnapshot`. */ get docs() {
|
|
4488
4509
|
return [ ...this._docs ];
|
|
@@ -4499,8 +4520,8 @@ function We(t, n, e, r, s) {
|
|
|
4499
4520
|
* @param callback - A callback to be called with a `QueryDocumentSnapshot` for
|
|
4500
4521
|
* each document in the snapshot.
|
|
4501
4522
|
* @param thisArg - The `this` binding for the callback.
|
|
4502
|
-
*/ forEach(t,
|
|
4503
|
-
this._docs.forEach(t,
|
|
4523
|
+
*/ forEach(t, e) {
|
|
4524
|
+
this._docs.forEach(t, e);
|
|
4504
4525
|
}
|
|
4505
4526
|
}
|
|
4506
4527
|
|
|
@@ -4510,14 +4531,14 @@ function We(t, n, e, r, s) {
|
|
|
4510
4531
|
* @param left - A snapshot to compare.
|
|
4511
4532
|
* @param right - A snapshot to compare.
|
|
4512
4533
|
* @returns true if the snapshots are equal.
|
|
4513
|
-
*/ function
|
|
4514
|
-
return t = getModularInstance(t),
|
|
4534
|
+
*/ function Jn(t, e) {
|
|
4535
|
+
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));
|
|
4515
4536
|
}
|
|
4516
4537
|
|
|
4517
4538
|
/**
|
|
4518
4539
|
* Helper that calls `fromDotSeparatedString()` but wraps any error thrown.
|
|
4519
|
-
*/ function
|
|
4520
|
-
return "string" == typeof
|
|
4540
|
+
*/ function Xn(t, e) {
|
|
4541
|
+
return "string" == typeof e ? Gn(t, e) : e instanceof yn ? e._internalPath : e._delegate._internalPath;
|
|
4521
4542
|
}
|
|
4522
4543
|
|
|
4523
4544
|
/**
|
|
@@ -4544,7 +4565,7 @@ function We(t, n, e, r, s) {
|
|
|
4544
4565
|
* can then be passed to {@link query} to create a new query instance that
|
|
4545
4566
|
* also contains this `QueryConstraint`.
|
|
4546
4567
|
*/
|
|
4547
|
-
class
|
|
4568
|
+
class Zn {}
|
|
4548
4569
|
|
|
4549
4570
|
/**
|
|
4550
4571
|
* Creates a new immutable instance of {@link Query} that is extended to also include
|
|
@@ -4554,43 +4575,43 @@ class tr {}
|
|
|
4554
4575
|
* @param queryConstraints - The list of {@link QueryConstraint}s to apply.
|
|
4555
4576
|
* @throws if any of the provided query constraints cannot be combined with the
|
|
4556
4577
|
* existing or new constraints.
|
|
4557
|
-
*/ function
|
|
4558
|
-
for (const
|
|
4578
|
+
*/ function tr(t, ...e) {
|
|
4579
|
+
for (const n of e) t = n._apply(t);
|
|
4559
4580
|
return t;
|
|
4560
4581
|
}
|
|
4561
4582
|
|
|
4562
|
-
class er extends
|
|
4563
|
-
constructor(t,
|
|
4564
|
-
super(), this.dt = t, this.wt =
|
|
4583
|
+
class er extends Zn {
|
|
4584
|
+
constructor(t, e, n) {
|
|
4585
|
+
super(), this.dt = t, this.wt = e, this.yt = n, this.type = "where";
|
|
4565
4586
|
}
|
|
4566
4587
|
_apply(t) {
|
|
4567
|
-
const
|
|
4588
|
+
const e = Vn(t.firestore), n = function(t, e, n, r, s, i, o) {
|
|
4568
4589
|
let u;
|
|
4569
4590
|
if (s.isKeyField()) {
|
|
4570
4591
|
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().`);
|
|
4571
4592
|
if ("in" /* IN */ === i || "not-in" /* NOT_IN */ === i) {
|
|
4572
|
-
|
|
4573
|
-
const
|
|
4574
|
-
for (const
|
|
4593
|
+
pr(o, i);
|
|
4594
|
+
const e = [];
|
|
4595
|
+
for (const n of o) e.push(mr(r, t, n));
|
|
4575
4596
|
u = {
|
|
4576
4597
|
arrayValue: {
|
|
4577
|
-
values:
|
|
4598
|
+
values: e
|
|
4578
4599
|
}
|
|
4579
4600
|
};
|
|
4580
|
-
} else u =
|
|
4581
|
-
} else "in" /* IN */ !== i && "not-in" /* NOT_IN */ !== i && "array-contains-any" /* ARRAY_CONTAINS_ANY */ !== i ||
|
|
4582
|
-
u =
|
|
4601
|
+
} else u = mr(r, t, o);
|
|
4602
|
+
} else "in" /* IN */ !== i && "not-in" /* NOT_IN */ !== i && "array-contains-any" /* ARRAY_CONTAINS_ANY */ !== i || pr(o, i),
|
|
4603
|
+
u = Ln(n, e, o,
|
|
4583
4604
|
/* allowArrays= */ "in" /* IN */ === i || "not-in" /* NOT_IN */ === i);
|
|
4584
4605
|
const c = Wt.create(s, i, u);
|
|
4585
|
-
return function(t,
|
|
4586
|
-
if (
|
|
4587
|
-
const
|
|
4588
|
-
if (null !==
|
|
4589
|
-
const r =
|
|
4590
|
-
null !== r &&
|
|
4606
|
+
return function(t, e) {
|
|
4607
|
+
if (e.N()) {
|
|
4608
|
+
const n = ae(t);
|
|
4609
|
+
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()}'`);
|
|
4610
|
+
const r = ce(t);
|
|
4611
|
+
null !== r && yr(t, e.field, r);
|
|
4591
4612
|
}
|
|
4592
|
-
const
|
|
4593
|
-
for (const
|
|
4613
|
+
const n = function(t, e) {
|
|
4614
|
+
for (const n of t.filters) if (e.indexOf(n.op) >= 0) return n.op;
|
|
4594
4615
|
return null;
|
|
4595
4616
|
}(t,
|
|
4596
4617
|
/**
|
|
@@ -4625,16 +4646,16 @@ class er extends tr {
|
|
|
4625
4646
|
default:
|
|
4626
4647
|
return [];
|
|
4627
4648
|
}
|
|
4628
|
-
}(
|
|
4629
|
-
if (null !==
|
|
4649
|
+
}(e.op));
|
|
4650
|
+
if (null !== n)
|
|
4630
4651
|
// Special case when it's a duplicate op to give a slightly clearer error message.
|
|
4631
|
-
throw
|
|
4652
|
+
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.`);
|
|
4632
4653
|
}(t, c), c;
|
|
4633
|
-
}(t._query, "where",
|
|
4634
|
-
return new
|
|
4635
|
-
const
|
|
4636
|
-
return new
|
|
4637
|
-
}(t._query,
|
|
4654
|
+
}(t._query, "where", e, t.firestore._databaseId, this.dt, this.wt, this.yt);
|
|
4655
|
+
return new hn(t.firestore, t.converter, function(t, e) {
|
|
4656
|
+
const n = t.filters.concat([ e ]);
|
|
4657
|
+
return new oe(t.path, t.collectionGroup, t.explicitOrderBy.slice(), n, t.limit, t.limitType, t.startAt, t.endAt);
|
|
4658
|
+
}(t._query, n));
|
|
4638
4659
|
}
|
|
4639
4660
|
}
|
|
4640
4661
|
|
|
@@ -4648,25 +4669,25 @@ class er extends tr {
|
|
|
4648
4669
|
* "<=", "!=").
|
|
4649
4670
|
* @param value - The value for comparison
|
|
4650
4671
|
* @returns The created {@link Query}.
|
|
4651
|
-
*/ function
|
|
4652
|
-
const r =
|
|
4653
|
-
return new er(s, r,
|
|
4672
|
+
*/ function nr(t, e, n) {
|
|
4673
|
+
const r = e, s = Xn("where", t);
|
|
4674
|
+
return new er(s, r, n);
|
|
4654
4675
|
}
|
|
4655
4676
|
|
|
4656
|
-
class
|
|
4657
|
-
constructor(t,
|
|
4658
|
-
super(), this.dt = t, this._t =
|
|
4677
|
+
class rr extends Zn {
|
|
4678
|
+
constructor(t, e) {
|
|
4679
|
+
super(), this.dt = t, this._t = e, this.type = "orderBy";
|
|
4659
4680
|
}
|
|
4660
4681
|
_apply(t) {
|
|
4661
|
-
const
|
|
4682
|
+
const e = function(t, e, n) {
|
|
4662
4683
|
if (null !== t.startAt) throw new U(A, "Invalid query. You must not call startAt() or startAfter() before calling orderBy().");
|
|
4663
4684
|
if (null !== t.endAt) throw new U(A, "Invalid query. You must not call endAt() or endBefore() before calling orderBy().");
|
|
4664
|
-
const r = new
|
|
4665
|
-
return function(t,
|
|
4666
|
-
if (null ===
|
|
4685
|
+
const r = new re(e, n);
|
|
4686
|
+
return function(t, e) {
|
|
4687
|
+
if (null === ce(t)) {
|
|
4667
4688
|
// This is the first order by. It must match any inequality.
|
|
4668
|
-
const
|
|
4669
|
-
null !==
|
|
4689
|
+
const n = ae(t);
|
|
4690
|
+
null !== n && yr(t, n, e.field);
|
|
4670
4691
|
}
|
|
4671
4692
|
}(t, r), r;
|
|
4672
4693
|
}
|
|
@@ -4681,11 +4702,11 @@ class sr extends tr {
|
|
|
4681
4702
|
* of the query or if any of the fields in the order by are an uncommitted
|
|
4682
4703
|
* server timestamp.
|
|
4683
4704
|
*/ (t._query, this.dt, this._t);
|
|
4684
|
-
return new
|
|
4705
|
+
return new hn(t.firestore, t.converter, function(t, e) {
|
|
4685
4706
|
// TODO(dimond): validate that orderBy does not list the same key twice.
|
|
4686
|
-
const
|
|
4687
|
-
return new
|
|
4688
|
-
}(t._query,
|
|
4707
|
+
const n = t.explicitOrderBy.concat([ e ]);
|
|
4708
|
+
return new oe(t.path, t.collectionGroup, n, t.filters.slice(), t.limit, t.limitType, t.startAt, t.endAt);
|
|
4709
|
+
}(t._query, e));
|
|
4689
4710
|
}
|
|
4690
4711
|
}
|
|
4691
4712
|
|
|
@@ -4697,18 +4718,18 @@ class sr extends tr {
|
|
|
4697
4718
|
* @param directionStr - Optional direction to sort by ('asc' or 'desc'). If
|
|
4698
4719
|
* not specified, order will be ascending.
|
|
4699
4720
|
* @returns The created {@link Query}.
|
|
4700
|
-
*/ function
|
|
4701
|
-
const
|
|
4702
|
-
return new
|
|
4721
|
+
*/ function sr(t, e = "asc") {
|
|
4722
|
+
const n = e, r = Xn("orderBy", t);
|
|
4723
|
+
return new rr(r, n);
|
|
4703
4724
|
}
|
|
4704
4725
|
|
|
4705
|
-
class
|
|
4706
|
-
constructor(t,
|
|
4707
|
-
super(), this.type = t, this.gt =
|
|
4726
|
+
class ir extends Zn {
|
|
4727
|
+
constructor(t, e, n) {
|
|
4728
|
+
super(), this.type = t, this.gt = e, this.vt = n;
|
|
4708
4729
|
}
|
|
4709
4730
|
_apply(t) {
|
|
4710
|
-
return new
|
|
4711
|
-
return new
|
|
4731
|
+
return new hn(t.firestore, t.converter, function(t, e, n) {
|
|
4732
|
+
return new oe(t.path, t.collectionGroup, t.explicitOrderBy.slice(), t.filters.slice(), e, n, t.startAt, t.endAt);
|
|
4712
4733
|
}(t._query, this.gt, this.vt));
|
|
4713
4734
|
}
|
|
4714
4735
|
}
|
|
@@ -4718,8 +4739,8 @@ class or extends tr {
|
|
|
4718
4739
|
*
|
|
4719
4740
|
* @param limit - The maximum number of items to return.
|
|
4720
4741
|
* @returns The created {@link Query}.
|
|
4721
|
-
*/ function
|
|
4722
|
-
return ut("limit", t), new
|
|
4742
|
+
*/ function or(t) {
|
|
4743
|
+
return ut("limit", t), new ir("limit", t, "F" /* First */);
|
|
4723
4744
|
}
|
|
4724
4745
|
|
|
4725
4746
|
/**
|
|
@@ -4730,54 +4751,56 @@ class or extends tr {
|
|
|
4730
4751
|
*
|
|
4731
4752
|
* @param limit - The maximum number of items to return.
|
|
4732
4753
|
* @returns The created {@link Query}.
|
|
4733
|
-
*/ function
|
|
4734
|
-
return ut("limitToLast", t), new
|
|
4754
|
+
*/ function ur(t) {
|
|
4755
|
+
return ut("limitToLast", t), new ir("limitToLast", t, "L" /* Last */);
|
|
4735
4756
|
}
|
|
4736
4757
|
|
|
4737
|
-
class
|
|
4738
|
-
constructor(t,
|
|
4739
|
-
super(), this.type = t, this.bt =
|
|
4758
|
+
class cr extends Zn {
|
|
4759
|
+
constructor(t, e, n) {
|
|
4760
|
+
super(), this.type = t, this.bt = e, this.Et = n;
|
|
4740
4761
|
}
|
|
4741
4762
|
_apply(t) {
|
|
4742
|
-
const
|
|
4743
|
-
return new
|
|
4744
|
-
return new
|
|
4745
|
-
}(t._query,
|
|
4763
|
+
const e = wr(t, this.type, this.bt, this.Et);
|
|
4764
|
+
return new hn(t.firestore, t.converter, function(t, e) {
|
|
4765
|
+
return new oe(t.path, t.collectionGroup, t.explicitOrderBy.slice(), t.filters.slice(), t.limit, t.limitType, e, t.endAt);
|
|
4766
|
+
}(t._query, e));
|
|
4746
4767
|
}
|
|
4747
4768
|
}
|
|
4748
4769
|
|
|
4749
|
-
function
|
|
4750
|
-
return new
|
|
4770
|
+
function ar(...t) {
|
|
4771
|
+
return new cr("startAt", t,
|
|
4772
|
+
/*inclusive=*/ !0);
|
|
4751
4773
|
}
|
|
4752
4774
|
|
|
4753
|
-
function
|
|
4754
|
-
return new
|
|
4755
|
-
/*
|
|
4775
|
+
function hr(...t) {
|
|
4776
|
+
return new cr("startAfter", t,
|
|
4777
|
+
/*inclusive=*/ !1);
|
|
4756
4778
|
}
|
|
4757
4779
|
|
|
4758
|
-
class
|
|
4759
|
-
constructor(t,
|
|
4760
|
-
super(), this.type = t, this.bt =
|
|
4780
|
+
class lr extends Zn {
|
|
4781
|
+
constructor(t, e, n) {
|
|
4782
|
+
super(), this.type = t, this.bt = e, this.Et = n;
|
|
4761
4783
|
}
|
|
4762
4784
|
_apply(t) {
|
|
4763
|
-
const
|
|
4764
|
-
return new
|
|
4765
|
-
return new
|
|
4766
|
-
}(t._query,
|
|
4785
|
+
const e = wr(t, this.type, this.bt, this.Et);
|
|
4786
|
+
return new hn(t.firestore, t.converter, function(t, e) {
|
|
4787
|
+
return new oe(t.path, t.collectionGroup, t.explicitOrderBy.slice(), t.filters.slice(), t.limit, t.limitType, t.startAt, e);
|
|
4788
|
+
}(t._query, e));
|
|
4767
4789
|
}
|
|
4768
4790
|
}
|
|
4769
4791
|
|
|
4770
|
-
function
|
|
4771
|
-
return new
|
|
4792
|
+
function fr(...t) {
|
|
4793
|
+
return new lr("endBefore", t,
|
|
4794
|
+
/*inclusive=*/ !1);
|
|
4772
4795
|
}
|
|
4773
4796
|
|
|
4774
|
-
function
|
|
4775
|
-
return new
|
|
4797
|
+
function dr(...t) {
|
|
4798
|
+
return new lr("endAt", t, /*inclusive=*/ !0);
|
|
4776
4799
|
}
|
|
4777
4800
|
|
|
4778
|
-
/** Helper function to create a bound from a document or fields */ function
|
|
4779
|
-
if (
|
|
4780
|
-
if (!r) throw new U(P, `Can't use a DocumentSnapshot that doesn't exist for ${
|
|
4801
|
+
/** Helper function to create a bound from a document or fields */ function wr(t, e, n, r) {
|
|
4802
|
+
if (n[0] = getModularInstance(n[0]), n[0] instanceof Yn) return function(t, e, n, r, s) {
|
|
4803
|
+
if (!r) throw new U(P, `Can't use a DocumentSnapshot that doesn't exist for ${n}().`);
|
|
4781
4804
|
const i = [];
|
|
4782
4805
|
// Because people expect to continue/end a query at the exact document
|
|
4783
4806
|
// provided, we need to use the implicit sort order rather than the explicit
|
|
@@ -4786,23 +4809,23 @@ function wr(...t) {
|
|
|
4786
4809
|
// the provided document. Without the key (by using the explicit sort
|
|
4787
4810
|
// orders), multiple documents could match the position, yielding duplicate
|
|
4788
4811
|
// results.
|
|
4789
|
-
for (const
|
|
4790
|
-
const t = r.data.field(
|
|
4791
|
-
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 "' +
|
|
4812
|
+
for (const n of le(t)) if (n.field.isKeyField()) i.push(Ct(e, r.key)); else {
|
|
4813
|
+
const t = r.data.field(n.field);
|
|
4814
|
+
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.)');
|
|
4792
4815
|
if (null === t) {
|
|
4793
|
-
const t =
|
|
4816
|
+
const t = n.field.canonicalString();
|
|
4794
4817
|
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.`);
|
|
4795
4818
|
}
|
|
4796
4819
|
i.push(t);
|
|
4797
4820
|
}
|
|
4798
|
-
return new
|
|
4821
|
+
return new ne(i, s);
|
|
4799
4822
|
}
|
|
4800
4823
|
/**
|
|
4801
4824
|
* Converts a list of field values to a `Bound` for the given query.
|
|
4802
|
-
*/ (t._query, t.firestore._databaseId,
|
|
4825
|
+
*/ (t._query, t.firestore._databaseId, e, n[0]._document, r);
|
|
4803
4826
|
{
|
|
4804
|
-
const s =
|
|
4805
|
-
return function(t,
|
|
4827
|
+
const s = Vn(t.firestore);
|
|
4828
|
+
return function(t, e, n, r, s, i) {
|
|
4806
4829
|
// Use explicit order by's because it has to match the query the user made
|
|
4807
4830
|
const o = t.explicitOrderBy;
|
|
4808
4831
|
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`);
|
|
@@ -4811,48 +4834,48 @@ function wr(...t) {
|
|
|
4811
4834
|
const c = s[i];
|
|
4812
4835
|
if (o[i].field.isKeyField()) {
|
|
4813
4836
|
if ("string" != typeof c) throw new U(A, `Invalid query. Expected a string for document ID in ${r}(), but got a ${typeof c}`);
|
|
4814
|
-
if (!
|
|
4815
|
-
const
|
|
4816
|
-
if (!
|
|
4817
|
-
const s = new
|
|
4818
|
-
u.push(Ct(
|
|
4837
|
+
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.`);
|
|
4838
|
+
const n = t.path.child(X.fromString(c));
|
|
4839
|
+
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.`);
|
|
4840
|
+
const s = new et(n);
|
|
4841
|
+
u.push(Ct(e, s));
|
|
4819
4842
|
} else {
|
|
4820
|
-
const t =
|
|
4843
|
+
const t = Ln(n, r, c);
|
|
4821
4844
|
u.push(t);
|
|
4822
4845
|
}
|
|
4823
4846
|
}
|
|
4824
|
-
return new
|
|
4847
|
+
return new ne(u, i);
|
|
4825
4848
|
}
|
|
4826
4849
|
/**
|
|
4827
4850
|
* Parses the given `documentIdValue` into a `ReferenceValue`, throwing
|
|
4828
4851
|
* appropriate errors if the value is anything other than a `DocumentReference`
|
|
4829
4852
|
* or `string`, or if the string is malformed.
|
|
4830
|
-
*/ (t._query, t.firestore._databaseId, s,
|
|
4853
|
+
*/ (t._query, t.firestore._databaseId, s, e, n, r);
|
|
4831
4854
|
}
|
|
4832
4855
|
}
|
|
4833
4856
|
|
|
4834
|
-
function
|
|
4835
|
-
if ("string" == typeof (
|
|
4836
|
-
if ("" ===
|
|
4837
|
-
if (!
|
|
4838
|
-
const r =
|
|
4839
|
-
if (!
|
|
4840
|
-
return Ct(t, new
|
|
4857
|
+
function mr(t, e, n) {
|
|
4858
|
+
if ("string" == typeof (n = getModularInstance(n))) {
|
|
4859
|
+
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.");
|
|
4860
|
+
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.`);
|
|
4861
|
+
const r = e.path.child(X.fromString(n));
|
|
4862
|
+
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}).`);
|
|
4863
|
+
return Ct(t, new et(r));
|
|
4841
4864
|
}
|
|
4842
|
-
if (
|
|
4843
|
-
throw new U(A, `Invalid query. When querying with documentId(), you must provide a valid string or a DocumentReference, but it was: ${it(
|
|
4865
|
+
if (n instanceof an) return Ct(t, n._key);
|
|
4866
|
+
throw new U(A, `Invalid query. When querying with documentId(), you must provide a valid string or a DocumentReference, but it was: ${it(n)}.`);
|
|
4844
4867
|
}
|
|
4845
4868
|
|
|
4846
4869
|
/**
|
|
4847
4870
|
* Validates that the value passed into a disjunctive filter satisfies all
|
|
4848
4871
|
* array requirements.
|
|
4849
|
-
*/ function
|
|
4850
|
-
if (!Array.isArray(t) || 0 === t.length) throw new U(A, `Invalid Query. A non-empty array is required for '${
|
|
4851
|
-
if (t.length > 10) throw new U(A, `Invalid Query. '${
|
|
4872
|
+
*/ function pr(t, e) {
|
|
4873
|
+
if (!Array.isArray(t) || 0 === t.length) throw new U(A, `Invalid Query. A non-empty array is required for '${e.toString()}' filters.`);
|
|
4874
|
+
if (t.length > 10) throw new U(A, `Invalid Query. '${e.toString()}' filters support a maximum of 10 elements in the value array.`);
|
|
4852
4875
|
}
|
|
4853
4876
|
|
|
4854
|
-
function
|
|
4855
|
-
if (!
|
|
4877
|
+
function yr(t, e, n) {
|
|
4878
|
+
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.`);
|
|
4856
4879
|
}
|
|
4857
4880
|
|
|
4858
4881
|
/**
|
|
@@ -4902,17 +4925,17 @@ function _r(t, n, e) {
|
|
|
4902
4925
|
* their `set()` or fails due to invalid data originating from a `toFirestore()`
|
|
4903
4926
|
* call.
|
|
4904
4927
|
*/
|
|
4905
|
-
function
|
|
4928
|
+
function _r(t, e, n) {
|
|
4906
4929
|
let r;
|
|
4907
4930
|
// Cast to `any` in order to satisfy the union type constraint on
|
|
4908
4931
|
// toFirestore().
|
|
4909
4932
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4910
|
-
return r = t ?
|
|
4933
|
+
return r = t ? n && (n.merge || n.mergeFields) ? t.toFirestore(e, n) : t.toFirestore(e) : e,
|
|
4911
4934
|
r;
|
|
4912
4935
|
}
|
|
4913
4936
|
|
|
4914
|
-
class
|
|
4915
|
-
convertValue(t,
|
|
4937
|
+
class gr extends class {
|
|
4938
|
+
convertValue(t, e = "none") {
|
|
4916
4939
|
switch (St(t)) {
|
|
4917
4940
|
case 0 /* NullValue */ :
|
|
4918
4941
|
return null;
|
|
@@ -4927,7 +4950,7 @@ class vr extends class {
|
|
|
4927
4950
|
return this.convertTimestamp(t.timestampValue);
|
|
4928
4951
|
|
|
4929
4952
|
case 4 /* ServerTimestampValue */ :
|
|
4930
|
-
return this.convertServerTimestamp(t,
|
|
4953
|
+
return this.convertServerTimestamp(t, e);
|
|
4931
4954
|
|
|
4932
4955
|
case 5 /* StringValue */ :
|
|
4933
4956
|
return t.stringValue;
|
|
@@ -4942,32 +4965,32 @@ class vr extends class {
|
|
|
4942
4965
|
return this.convertGeoPoint(t.geoPointValue);
|
|
4943
4966
|
|
|
4944
4967
|
case 9 /* ArrayValue */ :
|
|
4945
|
-
return this.convertArray(t.arrayValue,
|
|
4968
|
+
return this.convertArray(t.arrayValue, e);
|
|
4946
4969
|
|
|
4947
4970
|
case 10 /* ObjectValue */ :
|
|
4948
|
-
return this.convertObject(t.mapValue,
|
|
4971
|
+
return this.convertObject(t.mapValue, e);
|
|
4949
4972
|
|
|
4950
4973
|
default:
|
|
4951
4974
|
throw g();
|
|
4952
4975
|
}
|
|
4953
4976
|
}
|
|
4954
|
-
convertObject(t,
|
|
4955
|
-
const
|
|
4977
|
+
convertObject(t, e) {
|
|
4978
|
+
const n = {};
|
|
4956
4979
|
return Et(t.fields, ((t, r) => {
|
|
4957
|
-
|
|
4958
|
-
})),
|
|
4980
|
+
n[t] = this.convertValue(r, e);
|
|
4981
|
+
})), n;
|
|
4959
4982
|
}
|
|
4960
4983
|
convertGeoPoint(t) {
|
|
4961
|
-
return new
|
|
4984
|
+
return new bn(Pt(t.latitude), Pt(t.longitude));
|
|
4962
4985
|
}
|
|
4963
|
-
convertArray(t,
|
|
4964
|
-
return (t.values || []).map((t => this.convertValue(t,
|
|
4986
|
+
convertArray(t, e) {
|
|
4987
|
+
return (t.values || []).map((t => this.convertValue(t, e)));
|
|
4965
4988
|
}
|
|
4966
|
-
convertServerTimestamp(t,
|
|
4967
|
-
switch (
|
|
4989
|
+
convertServerTimestamp(t, e) {
|
|
4990
|
+
switch (e) {
|
|
4968
4991
|
case "previous":
|
|
4969
|
-
const
|
|
4970
|
-
return null ==
|
|
4992
|
+
const n = Nt(t);
|
|
4993
|
+
return null == n ? null : this.convertValue(n, e);
|
|
4971
4994
|
|
|
4972
4995
|
case "estimate":
|
|
4973
4996
|
return this.convertTimestamp($t(t));
|
|
@@ -4977,16 +5000,16 @@ class vr extends class {
|
|
|
4977
5000
|
}
|
|
4978
5001
|
}
|
|
4979
5002
|
convertTimestamp(t) {
|
|
4980
|
-
const
|
|
4981
|
-
return new gt(
|
|
5003
|
+
const e = Rt(t);
|
|
5004
|
+
return new gt(e.seconds, e.nanos);
|
|
4982
5005
|
}
|
|
4983
|
-
convertDocumentKey(t,
|
|
4984
|
-
const
|
|
4985
|
-
v(
|
|
4986
|
-
const r = new K(
|
|
4987
|
-
return r.isEqual(
|
|
5006
|
+
convertDocumentKey(t, e) {
|
|
5007
|
+
const n = X.fromString(t);
|
|
5008
|
+
v(We(n));
|
|
5009
|
+
const r = new K(n.get(1), n.get(3)), s = new et(n.popFirst(5));
|
|
5010
|
+
return r.isEqual(e) ||
|
|
4988
5011
|
// TODO(b/64130202): Somehow support foreign references.
|
|
4989
|
-
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 (${
|
|
5012
|
+
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.`),
|
|
4990
5013
|
s;
|
|
4991
5014
|
}
|
|
4992
5015
|
} {
|
|
@@ -4994,11 +5017,11 @@ class vr extends class {
|
|
|
4994
5017
|
super(), this.firestore = t;
|
|
4995
5018
|
}
|
|
4996
5019
|
convertBytes(t) {
|
|
4997
|
-
return new
|
|
5020
|
+
return new gn(t);
|
|
4998
5021
|
}
|
|
4999
5022
|
convertReference(t) {
|
|
5000
|
-
const
|
|
5001
|
-
return new
|
|
5023
|
+
const e = this.convertDocumentKey(t, this.firestore._databaseId);
|
|
5024
|
+
return new an(this.firestore, /* converter= */ null, e);
|
|
5002
5025
|
}
|
|
5003
5026
|
}
|
|
5004
5027
|
|
|
@@ -5014,12 +5037,12 @@ class vr extends class {
|
|
|
5014
5037
|
* @param reference - The reference of the document to fetch.
|
|
5015
5038
|
* @returns A Promise resolved with a `DocumentSnapshot` containing the current
|
|
5016
5039
|
* document contents.
|
|
5017
|
-
*/ function
|
|
5018
|
-
const
|
|
5019
|
-
return
|
|
5020
|
-
v(1 ===
|
|
5021
|
-
const r =
|
|
5022
|
-
return new
|
|
5040
|
+
*/ function vr(t) {
|
|
5041
|
+
const e = en((t = ot(t, an)).firestore), n = new gr(t.firestore);
|
|
5042
|
+
return Xe(e, [ t._key ]).then((e => {
|
|
5043
|
+
v(1 === e.length);
|
|
5044
|
+
const r = e[0];
|
|
5045
|
+
return new Yn(t.firestore, n, t._key, r.isFoundDocument() ? r : null, t.converter);
|
|
5023
5046
|
}));
|
|
5024
5047
|
}
|
|
5025
5048
|
|
|
@@ -5034,33 +5057,33 @@ class vr extends class {
|
|
|
5034
5057
|
*
|
|
5035
5058
|
* @param query - The `Query` to execute.
|
|
5036
5059
|
* @returns A Promise that will be resolved with the results of the query.
|
|
5037
|
-
*/ function
|
|
5060
|
+
*/ function br(t) {
|
|
5038
5061
|
!function(t) {
|
|
5039
|
-
if (
|
|
5040
|
-
}((t = ot(t,
|
|
5041
|
-
const
|
|
5042
|
-
return
|
|
5043
|
-
const r =
|
|
5044
|
-
return
|
|
5062
|
+
if (ue(t) && 0 === t.explicitOrderBy.length) throw new U(q, "limitToLast() queries require specifying at least one orderBy() clause");
|
|
5063
|
+
}((t = ot(t, hn))._query);
|
|
5064
|
+
const e = en(t.firestore), n = new gr(t.firestore);
|
|
5065
|
+
return Ze(e, t._query).then((e => {
|
|
5066
|
+
const r = e.map((e => new Hn(t.firestore, n, e.key, e, t.converter)));
|
|
5067
|
+
return ue(t._query) &&
|
|
5045
5068
|
// Limit to last queries reverse the orderBy constraint that was
|
|
5046
5069
|
// specified by the user. As such, we need to reverse the order of the
|
|
5047
5070
|
// results to return the documents in the expected order.
|
|
5048
|
-
r.reverse(), new
|
|
5071
|
+
r.reverse(), new Kn(t, r);
|
|
5049
5072
|
}));
|
|
5050
5073
|
}
|
|
5051
5074
|
|
|
5052
|
-
function
|
|
5053
|
-
const r =
|
|
5054
|
-
return
|
|
5075
|
+
function Er(t, e, n) {
|
|
5076
|
+
const r = _r((t = ot(t, an)).converter, e, n), s = Dn(Vn(t.firestore), "setDoc", t._key, r, null !== t.converter, n);
|
|
5077
|
+
return Je(en(t.firestore), [ s.toMutation(t._key, be.none()) ]);
|
|
5055
5078
|
}
|
|
5056
5079
|
|
|
5057
|
-
function
|
|
5058
|
-
const s =
|
|
5080
|
+
function Tr(t, e, n, ...r) {
|
|
5081
|
+
const s = Vn((t = ot(t, an)).firestore);
|
|
5059
5082
|
// For Compat types, we have to "extract" the underlying types before
|
|
5060
5083
|
// performing validation.
|
|
5061
5084
|
let i;
|
|
5062
|
-
i = "string" == typeof (
|
|
5063
|
-
return
|
|
5085
|
+
i = "string" == typeof (e = getModularInstance(e)) || e instanceof yn ? Cn(s, "updateDoc", t._key, e, n, r) : On(s, "updateDoc", t._key, e);
|
|
5086
|
+
return Je(en(t.firestore), [ i.toMutation(t._key, be.exists(!0)) ]);
|
|
5064
5087
|
}
|
|
5065
5088
|
|
|
5066
5089
|
/**
|
|
@@ -5074,8 +5097,8 @@ function Ir(t, n, e, ...r) {
|
|
|
5074
5097
|
* @param reference - A reference to the document to delete.
|
|
5075
5098
|
* @returns A `Promise` resolved once the document has been successfully
|
|
5076
5099
|
* deleted from the backend.
|
|
5077
|
-
*/ function
|
|
5078
|
-
return
|
|
5100
|
+
*/ function Ir(t) {
|
|
5101
|
+
return Je(en((t = ot(t, an)).firestore), [ new Ae(t._key, be.none()) ]);
|
|
5079
5102
|
}
|
|
5080
5103
|
|
|
5081
5104
|
/**
|
|
@@ -5092,9 +5115,9 @@ function Ir(t, n, e, ...r) {
|
|
|
5092
5115
|
* @throws Error - If the provided input is not a valid Firestore document.
|
|
5093
5116
|
* @returns A `Promise` resolved with a `DocumentReference` pointing to the
|
|
5094
5117
|
* newly created document after it has been written to the backend.
|
|
5095
|
-
*/ function
|
|
5096
|
-
const
|
|
5097
|
-
return
|
|
5118
|
+
*/ function Ar(t, e) {
|
|
5119
|
+
const n = wn(t = ot(t, ln)), r = _r(t.converter, e), s = Dn(Vn(t.firestore), "addDoc", n._key, r, null !== n.converter, {});
|
|
5120
|
+
return Je(en(t.firestore), [ s.toMutation(n._key, be.exists(!1)) ]).then((() => n));
|
|
5098
5121
|
}
|
|
5099
5122
|
|
|
5100
5123
|
/**
|
|
@@ -5116,15 +5139,15 @@ function Ir(t, n, e, ...r) {
|
|
|
5116
5139
|
/**
|
|
5117
5140
|
* Returns a sentinel for use with {@link @firebase/firestore/lite#(updateDoc:1)} or
|
|
5118
5141
|
* {@link @firebase/firestore/lite#(setDoc:1)} with `{merge: true}` to mark a field for deletion.
|
|
5119
|
-
*/ function
|
|
5120
|
-
return new
|
|
5142
|
+
*/ function Rr() {
|
|
5143
|
+
return new Nn("deleteField");
|
|
5121
5144
|
}
|
|
5122
5145
|
|
|
5123
5146
|
/**
|
|
5124
5147
|
* Returns a sentinel used with {@link @firebase/firestore/lite#(setDoc:1)} or {@link @firebase/firestore/lite#(updateDoc:1)} to
|
|
5125
5148
|
* include a server-generated timestamp in the written data.
|
|
5126
|
-
*/ function
|
|
5127
|
-
return new
|
|
5149
|
+
*/ function Pr() {
|
|
5150
|
+
return new Sn("serverTimestamp");
|
|
5128
5151
|
}
|
|
5129
5152
|
|
|
5130
5153
|
/**
|
|
@@ -5138,10 +5161,10 @@ function Ir(t, n, e, ...r) {
|
|
|
5138
5161
|
* @param elements - The elements to union into the array.
|
|
5139
5162
|
* @returns The `FieldValue` sentinel for use in a call to `setDoc()` or
|
|
5140
5163
|
* `updateDoc()`.
|
|
5141
|
-
*/ function
|
|
5164
|
+
*/ function Vr(...t) {
|
|
5142
5165
|
// NOTE: We don't actually parse the data until it's used in set() or
|
|
5143
5166
|
// update() since we'd need the Firestore instance to do this.
|
|
5144
|
-
return new
|
|
5167
|
+
return new Fn("arrayUnion", t);
|
|
5145
5168
|
}
|
|
5146
5169
|
|
|
5147
5170
|
/**
|
|
@@ -5154,10 +5177,10 @@ function Ir(t, n, e, ...r) {
|
|
|
5154
5177
|
* @param elements - The elements to remove from the array.
|
|
5155
5178
|
* @returns The `FieldValue` sentinel for use in a call to `setDoc()` or
|
|
5156
5179
|
* `updateDoc()`
|
|
5157
|
-
*/ function
|
|
5180
|
+
*/ function Dr(...t) {
|
|
5158
5181
|
// NOTE: We don't actually parse the data until it's used in set() or
|
|
5159
5182
|
// update() since we'd need the Firestore instance to do this.
|
|
5160
|
-
return new
|
|
5183
|
+
return new xn("arrayRemove", t);
|
|
5161
5184
|
}
|
|
5162
5185
|
|
|
5163
5186
|
/**
|
|
@@ -5178,8 +5201,8 @@ function Ir(t, n, e, ...r) {
|
|
|
5178
5201
|
* @param n - The value to increment by.
|
|
5179
5202
|
* @returns The `FieldValue` sentinel for use in a call to `setDoc()` or
|
|
5180
5203
|
* `updateDoc()`
|
|
5181
|
-
*/ function
|
|
5182
|
-
return new
|
|
5204
|
+
*/ function Nr(t) {
|
|
5205
|
+
return new qn("increment", t);
|
|
5183
5206
|
}
|
|
5184
5207
|
|
|
5185
5208
|
/**
|
|
@@ -5205,25 +5228,25 @@ function Ir(t, n, e, ...r) {
|
|
|
5205
5228
|
* provides methods for adding writes to the write batch. None of the writes
|
|
5206
5229
|
* will be committed (or visible locally) until {@link WriteBatch.commit} is
|
|
5207
5230
|
* called.
|
|
5208
|
-
*/ class
|
|
5231
|
+
*/ class $r {
|
|
5209
5232
|
/** @hideconstructor */
|
|
5210
|
-
constructor(t,
|
|
5211
|
-
this._firestore = t, this._commitHandler =
|
|
5212
|
-
this._dataReader =
|
|
5233
|
+
constructor(t, e) {
|
|
5234
|
+
this._firestore = t, this._commitHandler = e, this._mutations = [], this._committed = !1,
|
|
5235
|
+
this._dataReader = Vn(t);
|
|
5213
5236
|
}
|
|
5214
|
-
set(t,
|
|
5237
|
+
set(t, e, n) {
|
|
5215
5238
|
this._verifyNotCommitted();
|
|
5216
|
-
const r =
|
|
5217
|
-
return this._mutations.push(i.toMutation(r._key,
|
|
5239
|
+
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);
|
|
5240
|
+
return this._mutations.push(i.toMutation(r._key, be.none())), this;
|
|
5218
5241
|
}
|
|
5219
|
-
update(t,
|
|
5242
|
+
update(t, e, n, ...r) {
|
|
5220
5243
|
this._verifyNotCommitted();
|
|
5221
|
-
const s =
|
|
5244
|
+
const s = Sr(t, this._firestore);
|
|
5222
5245
|
// For Compat types, we have to "extract" the underlying types before
|
|
5223
5246
|
// performing validation.
|
|
5224
5247
|
let i;
|
|
5225
|
-
return i = "string" == typeof (
|
|
5226
|
-
this._mutations.push(i.toMutation(s._key,
|
|
5248
|
+
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),
|
|
5249
|
+
this._mutations.push(i.toMutation(s._key, be.exists(!0))), this;
|
|
5227
5250
|
}
|
|
5228
5251
|
/**
|
|
5229
5252
|
* Deletes the document referred to by the provided {@link DocumentReference}.
|
|
@@ -5232,8 +5255,8 @@ function Ir(t, n, e, ...r) {
|
|
|
5232
5255
|
* @returns This `WriteBatch` instance. Used for chaining method calls.
|
|
5233
5256
|
*/ delete(t) {
|
|
5234
5257
|
this._verifyNotCommitted();
|
|
5235
|
-
const
|
|
5236
|
-
return this._mutations = this._mutations.concat(new
|
|
5258
|
+
const e = Sr(t, this._firestore);
|
|
5259
|
+
return this._mutations = this._mutations.concat(new Ae(e._key, be.none())), this;
|
|
5237
5260
|
}
|
|
5238
5261
|
/**
|
|
5239
5262
|
* Commits all of the writes in this write batch as a single atomic unit.
|
|
@@ -5254,8 +5277,8 @@ function Ir(t, n, e, ...r) {
|
|
|
5254
5277
|
}
|
|
5255
5278
|
}
|
|
5256
5279
|
|
|
5257
|
-
function
|
|
5258
|
-
if ((t = getModularInstance(t)).firestore !==
|
|
5280
|
+
function Sr(t, e) {
|
|
5281
|
+
if ((t = getModularInstance(t)).firestore !== e) throw new U(A, "Provided document reference is from a different Firestore instance.");
|
|
5259
5282
|
return t;
|
|
5260
5283
|
}
|
|
5261
5284
|
|
|
@@ -5271,9 +5294,9 @@ function Fr(t, n) {
|
|
|
5271
5294
|
*
|
|
5272
5295
|
* @returns A `WriteBatch` that can be used to atomically execute multiple
|
|
5273
5296
|
* writes.
|
|
5274
|
-
*/ function
|
|
5275
|
-
const
|
|
5276
|
-
return new
|
|
5297
|
+
*/ function Fr(t) {
|
|
5298
|
+
const e = en(t = ot(t, rn));
|
|
5299
|
+
return new $r(t, (t => Je(e, t)));
|
|
5277
5300
|
}
|
|
5278
5301
|
|
|
5279
5302
|
/**
|
|
@@ -5295,7 +5318,7 @@ function Fr(t, n) {
|
|
|
5295
5318
|
/**
|
|
5296
5319
|
* Internal transaction object responsible for accumulating the mutations to
|
|
5297
5320
|
* perform and the base versions for any documents read.
|
|
5298
|
-
*/ class
|
|
5321
|
+
*/ class xr {
|
|
5299
5322
|
constructor(t) {
|
|
5300
5323
|
this.datastore = t,
|
|
5301
5324
|
// The version of each document that was read during this transaction.
|
|
@@ -5315,66 +5338,66 @@ function Fr(t, n) {
|
|
|
5315
5338
|
}
|
|
5316
5339
|
async lookup(t) {
|
|
5317
5340
|
if (this.ensureCommitNotCalled(), this.mutations.length > 0) throw new U(A, "Firestore transactions require all reads to be executed before all writes.");
|
|
5318
|
-
const
|
|
5319
|
-
return
|
|
5341
|
+
const e = await Xe(this.datastore, t);
|
|
5342
|
+
return e.forEach((t => this.recordVersion(t))), e;
|
|
5320
5343
|
}
|
|
5321
|
-
set(t,
|
|
5322
|
-
this.write(
|
|
5344
|
+
set(t, e) {
|
|
5345
|
+
this.write(e.toMutation(t, this.precondition(t))), this.writtenDocs.add(t.toString());
|
|
5323
5346
|
}
|
|
5324
|
-
update(t,
|
|
5347
|
+
update(t, e) {
|
|
5325
5348
|
try {
|
|
5326
|
-
this.write(
|
|
5349
|
+
this.write(e.toMutation(t, this.preconditionForUpdate(t)));
|
|
5327
5350
|
} catch (t) {
|
|
5328
5351
|
this.lastWriteError = t;
|
|
5329
5352
|
}
|
|
5330
5353
|
this.writtenDocs.add(t.toString());
|
|
5331
5354
|
}
|
|
5332
5355
|
delete(t) {
|
|
5333
|
-
this.write(new
|
|
5356
|
+
this.write(new Ae(t, this.precondition(t))), this.writtenDocs.add(t.toString());
|
|
5334
5357
|
}
|
|
5335
5358
|
async commit() {
|
|
5336
5359
|
if (this.ensureCommitNotCalled(), this.lastWriteError) throw this.lastWriteError;
|
|
5337
5360
|
const t = this.readVersions;
|
|
5338
5361
|
// For each mutation, note that the doc was written.
|
|
5339
|
-
this.mutations.forEach((
|
|
5340
|
-
t.delete(
|
|
5362
|
+
this.mutations.forEach((e => {
|
|
5363
|
+
t.delete(e.key.toString());
|
|
5341
5364
|
})),
|
|
5342
5365
|
// For each document that was read but not written to, we want to perform
|
|
5343
5366
|
// a `verify` operation.
|
|
5344
|
-
t.forEach(((t,
|
|
5345
|
-
const
|
|
5346
|
-
this.mutations.push(new
|
|
5347
|
-
})), await
|
|
5367
|
+
t.forEach(((t, e) => {
|
|
5368
|
+
const n = et.fromPath(e);
|
|
5369
|
+
this.mutations.push(new Re(n, this.precondition(n)));
|
|
5370
|
+
})), await Je(this.datastore, this.mutations), this.committed = !0;
|
|
5348
5371
|
}
|
|
5349
5372
|
recordVersion(t) {
|
|
5350
|
-
let
|
|
5351
|
-
if (t.isFoundDocument())
|
|
5373
|
+
let e;
|
|
5374
|
+
if (t.isFoundDocument()) e = t.version; else {
|
|
5352
5375
|
if (!t.isNoDocument()) throw g();
|
|
5353
5376
|
// For deleted docs, we must use baseVersion 0 when we overwrite them.
|
|
5354
|
-
|
|
5377
|
+
e = vt.min();
|
|
5355
5378
|
}
|
|
5356
|
-
const
|
|
5357
|
-
if (
|
|
5358
|
-
if (!
|
|
5379
|
+
const n = this.readVersions.get(t.key.toString());
|
|
5380
|
+
if (n) {
|
|
5381
|
+
if (!e.isEqual(n))
|
|
5359
5382
|
// This transaction will fail no matter what.
|
|
5360
5383
|
throw new U(F, "Document version changed between two reads.");
|
|
5361
|
-
} else this.readVersions.set(t.key.toString(),
|
|
5384
|
+
} else this.readVersions.set(t.key.toString(), e);
|
|
5362
5385
|
}
|
|
5363
5386
|
/**
|
|
5364
5387
|
* Returns the version of this document when it was read in this transaction,
|
|
5365
5388
|
* as a precondition, or no precondition if it was not read.
|
|
5366
5389
|
*/ precondition(t) {
|
|
5367
|
-
const
|
|
5368
|
-
return !this.writtenDocs.has(t.toString()) &&
|
|
5390
|
+
const e = this.readVersions.get(t.toString());
|
|
5391
|
+
return !this.writtenDocs.has(t.toString()) && e ? be.updateTime(e) : be.none();
|
|
5369
5392
|
}
|
|
5370
5393
|
/**
|
|
5371
5394
|
* Returns the precondition for a document if the operation is an update.
|
|
5372
5395
|
*/ preconditionForUpdate(t) {
|
|
5373
|
-
const
|
|
5396
|
+
const e = this.readVersions.get(t.toString());
|
|
5374
5397
|
// The first time a document is written, we want to take into account the
|
|
5375
5398
|
// read time and existence
|
|
5376
|
-
if (!this.writtenDocs.has(t.toString()) &&
|
|
5377
|
-
if (
|
|
5399
|
+
if (!this.writtenDocs.has(t.toString()) && e) {
|
|
5400
|
+
if (e.isEqual(vt.min()))
|
|
5378
5401
|
// The document doesn't exist, so fail the transaction.
|
|
5379
5402
|
// This has to be validated locally because you can't send a
|
|
5380
5403
|
// precondition that a document does not exist without changing the
|
|
@@ -5386,11 +5409,11 @@ function Fr(t, n) {
|
|
|
5386
5409
|
// transaction.
|
|
5387
5410
|
throw new U(A, "Can't update a document that doesn't exist.");
|
|
5388
5411
|
// Document exists, base precondition on document update time.
|
|
5389
|
-
return
|
|
5412
|
+
return be.updateTime(e);
|
|
5390
5413
|
}
|
|
5391
5414
|
// Document was not read, so we just use the preconditions for a blind
|
|
5392
5415
|
// update.
|
|
5393
|
-
return
|
|
5416
|
+
return be.exists(!0);
|
|
5394
5417
|
}
|
|
5395
5418
|
write(t) {
|
|
5396
5419
|
this.ensureCommitNotCalled(), this.mutations.push(t);
|
|
@@ -5418,20 +5441,20 @@ function Fr(t, n) {
|
|
|
5418
5441
|
* TransactionRunner encapsulates the logic needed to run and retry transactions
|
|
5419
5442
|
* with backoff.
|
|
5420
5443
|
*/
|
|
5421
|
-
class
|
|
5422
|
-
constructor(t,
|
|
5423
|
-
this.asyncQueue = t, this.datastore =
|
|
5424
|
-
this.Tt = 5, this.It = new
|
|
5444
|
+
class qr {
|
|
5445
|
+
constructor(t, e, n, r) {
|
|
5446
|
+
this.asyncQueue = t, this.datastore = e, this.updateFunction = n, this.deferred = r,
|
|
5447
|
+
this.Tt = 5, this.It = new He(this.asyncQueue, "transaction_retry" /* TransactionRetry */);
|
|
5425
5448
|
}
|
|
5426
5449
|
/** Runs the transaction and sets the result on deferred. */ run() {
|
|
5427
5450
|
this.Tt -= 1, this.At();
|
|
5428
5451
|
}
|
|
5429
5452
|
At() {
|
|
5430
5453
|
this.It.W((async () => {
|
|
5431
|
-
const t = new
|
|
5432
|
-
|
|
5454
|
+
const t = new xr(this.datastore), e = this.Rt(t);
|
|
5455
|
+
e && e.then((e => {
|
|
5433
5456
|
this.asyncQueue.enqueueAndForget((() => t.commit().then((() => {
|
|
5434
|
-
this.deferred.resolve(
|
|
5457
|
+
this.deferred.resolve(e);
|
|
5435
5458
|
})).catch((t => {
|
|
5436
5459
|
this.Pt(t);
|
|
5437
5460
|
}))));
|
|
@@ -5442,8 +5465,8 @@ class Or {
|
|
|
5442
5465
|
}
|
|
5443
5466
|
Rt(t) {
|
|
5444
5467
|
try {
|
|
5445
|
-
const
|
|
5446
|
-
return !ct(
|
|
5468
|
+
const e = this.updateFunction(t);
|
|
5469
|
+
return !ct(e) && e.catch && e.then ? e : (this.deferred.reject(Error("Transaction callback must return a Promise")),
|
|
5447
5470
|
null);
|
|
5448
5471
|
} catch (t) {
|
|
5449
5472
|
// Do not retry errors thrown by user provided updateFunction.
|
|
@@ -5458,8 +5481,8 @@ class Or {
|
|
|
5458
5481
|
if ("FirebaseError" === t.name) {
|
|
5459
5482
|
// In transactions, the backend will fail outdated reads with FAILED_PRECONDITION and
|
|
5460
5483
|
// non-matching document versions with ABORTED. These errors should be retried.
|
|
5461
|
-
const
|
|
5462
|
-
return "aborted" ===
|
|
5484
|
+
const e = t.code;
|
|
5485
|
+
return "aborted" === e || "failed-precondition" === e || !
|
|
5463
5486
|
/**
|
|
5464
5487
|
* Determines whether an error code represents a permanent error when received
|
|
5465
5488
|
* in response to a non-write operation.
|
|
@@ -5496,7 +5519,7 @@ class Or {
|
|
|
5496
5519
|
case L:
|
|
5497
5520
|
return !0;
|
|
5498
5521
|
}
|
|
5499
|
-
}(
|
|
5522
|
+
}(e);
|
|
5500
5523
|
}
|
|
5501
5524
|
return !1;
|
|
5502
5525
|
}
|
|
@@ -5518,7 +5541,7 @@ class Or {
|
|
|
5518
5541
|
* See the License for the specific language governing permissions and
|
|
5519
5542
|
* limitations under the License.
|
|
5520
5543
|
*/
|
|
5521
|
-
/** The Platform's 'document' implementation or null if not available. */ function
|
|
5544
|
+
/** The Platform's 'document' implementation or null if not available. */ function Or() {
|
|
5522
5545
|
// `document` is not always available, e.g. in ReactNative and WebWorkers.
|
|
5523
5546
|
// eslint-disable-next-line no-restricted-globals
|
|
5524
5547
|
return "undefined" != typeof document ? document : null;
|
|
@@ -5550,9 +5573,9 @@ class Or {
|
|
|
5550
5573
|
* Note: We implement `PromiseLike` instead of `Promise`, as the `Promise` type
|
|
5551
5574
|
* in newer versions of TypeScript defines `finally`, which is not available in
|
|
5552
5575
|
* IE.
|
|
5553
|
-
*/ class
|
|
5554
|
-
constructor(t,
|
|
5555
|
-
this.asyncQueue = t, this.timerId =
|
|
5576
|
+
*/ class Cr {
|
|
5577
|
+
constructor(t, e, n, r, s) {
|
|
5578
|
+
this.asyncQueue = t, this.timerId = e, this.targetTimeMs = n, this.op = r, this.removalCallback = s,
|
|
5556
5579
|
this.deferred = new k, this.then = this.deferred.promise.then.bind(this.deferred.promise),
|
|
5557
5580
|
// It's normal for the deferred promise to be canceled (due to cancellation)
|
|
5558
5581
|
// and so we attach a dummy catch callback to avoid
|
|
@@ -5572,9 +5595,9 @@ class Or {
|
|
|
5572
5595
|
* from its delayedOperations list.
|
|
5573
5596
|
* PORTING NOTE: This exists to prevent making removeDelayedOperation() and
|
|
5574
5597
|
* the DelayedOperation class public.
|
|
5575
|
-
*/ static createAndSchedule(t,
|
|
5576
|
-
const i = Date.now() +
|
|
5577
|
-
return o.start(
|
|
5598
|
+
*/ static createAndSchedule(t, e, n, r, s) {
|
|
5599
|
+
const i = Date.now() + n, o = new Cr(t, e, i, r, s);
|
|
5600
|
+
return o.start(n), o;
|
|
5578
5601
|
}
|
|
5579
5602
|
/**
|
|
5580
5603
|
* Starts the timer. This is called immediately after construction by
|
|
@@ -5622,7 +5645,7 @@ class Or {
|
|
|
5622
5645
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
5623
5646
|
* See the License for the specific language governing permissions and
|
|
5624
5647
|
* limitations under the License.
|
|
5625
|
-
*/ class
|
|
5648
|
+
*/ class Lr {
|
|
5626
5649
|
constructor() {
|
|
5627
5650
|
// The last promise in the queue.
|
|
5628
5651
|
this.Dt = Promise.resolve(),
|
|
@@ -5645,15 +5668,15 @@ class Or {
|
|
|
5645
5668
|
// List of TimerIds to fast-forward delays for.
|
|
5646
5669
|
this.Ot = [],
|
|
5647
5670
|
// Backoff timer used to schedule retries for retryable operations
|
|
5648
|
-
this.It = new
|
|
5671
|
+
this.It = new He(this, "async_queue_retry" /* AsyncQueueRetry */),
|
|
5649
5672
|
// Visibility handler that triggers an immediate retry of all retryable
|
|
5650
5673
|
// operations. Meant to speed up recovery when we regain file system access
|
|
5651
5674
|
// after page comes into foreground.
|
|
5652
5675
|
this.Ct = () => {
|
|
5653
|
-
const t =
|
|
5676
|
+
const t = Or();
|
|
5654
5677
|
t && m("AsyncQueue", "Visibility state changed to " + t.visibilityState), this.It.H();
|
|
5655
5678
|
};
|
|
5656
|
-
const t =
|
|
5679
|
+
const t = Or();
|
|
5657
5680
|
t && "function" == typeof t.addEventListener && t.addEventListener("visibilitychange", this.Ct);
|
|
5658
5681
|
}
|
|
5659
5682
|
get isShuttingDown() {
|
|
@@ -5674,8 +5697,8 @@ class Or {
|
|
|
5674
5697
|
enterRestrictedMode(t) {
|
|
5675
5698
|
if (!this.$t) {
|
|
5676
5699
|
this.$t = !0, this.qt = t || !1;
|
|
5677
|
-
const
|
|
5678
|
-
|
|
5700
|
+
const e = Or();
|
|
5701
|
+
e && "function" == typeof e.removeEventListener && e.removeEventListener("visibilitychange", this.Ct);
|
|
5679
5702
|
}
|
|
5680
5703
|
}
|
|
5681
5704
|
enqueue(t) {
|
|
@@ -5685,9 +5708,9 @@ class Or {
|
|
|
5685
5708
|
// Create a deferred Promise that we can return to the callee. This
|
|
5686
5709
|
// allows us to return a "hanging Promise" only to the callee and still
|
|
5687
5710
|
// advance the queue even when the operation is not run.
|
|
5688
|
-
const
|
|
5689
|
-
return this.Ut((() => this.$t && this.qt ? Promise.resolve() : (t().then(
|
|
5690
|
-
|
|
5711
|
+
const e = new k;
|
|
5712
|
+
return this.Ut((() => this.$t && this.qt ? Promise.resolve() : (t().then(e.resolve, e.reject),
|
|
5713
|
+
e.promise))).then((() => e.promise));
|
|
5691
5714
|
}
|
|
5692
5715
|
enqueueRetryable(t) {
|
|
5693
5716
|
this.enqueueAndForget((() => (this.Nt.push(t), this.kt())));
|
|
@@ -5757,18 +5780,18 @@ class Or {
|
|
|
5757
5780
|
}
|
|
5758
5781
|
}
|
|
5759
5782
|
Ut(t) {
|
|
5760
|
-
const
|
|
5783
|
+
const e = this.Dt.then((() => (this.xt = !0, t().catch((t => {
|
|
5761
5784
|
this.Ft = t, this.xt = !1;
|
|
5762
|
-
const
|
|
5785
|
+
const e =
|
|
5763
5786
|
/**
|
|
5764
5787
|
* Chrome includes Error.message in Error.stack. Other browsers do not.
|
|
5765
5788
|
* This returns expected output of message + stack when available.
|
|
5766
5789
|
* @param error - Error or FirestoreError
|
|
5767
5790
|
*/
|
|
5768
5791
|
function(t) {
|
|
5769
|
-
let
|
|
5770
|
-
t.stack && (
|
|
5771
|
-
return
|
|
5792
|
+
let e = t.message || "";
|
|
5793
|
+
t.stack && (e = t.stack.includes(t.message) ? t.stack : t.message + "\n" + t.stack);
|
|
5794
|
+
return e;
|
|
5772
5795
|
}
|
|
5773
5796
|
/**
|
|
5774
5797
|
* @license
|
|
@@ -5798,15 +5821,15 @@ class Or {
|
|
|
5798
5821
|
// Re-throw the error so that this.tail becomes a rejected Promise and
|
|
5799
5822
|
// all further attempts to chain (via .then) will just short-circuit
|
|
5800
5823
|
// and return the rejected Promise.
|
|
5801
|
-
throw p("INTERNAL UNHANDLED ERROR: ",
|
|
5824
|
+
throw p("INTERNAL UNHANDLED ERROR: ", e), t;
|
|
5802
5825
|
})).then((t => (this.xt = !1, t))))));
|
|
5803
|
-
return this.Dt =
|
|
5826
|
+
return this.Dt = e, e;
|
|
5804
5827
|
}
|
|
5805
|
-
enqueueAfterDelay(t,
|
|
5828
|
+
enqueueAfterDelay(t, e, n) {
|
|
5806
5829
|
this.Lt(),
|
|
5807
5830
|
// Fast-forward delays for timerIds that have been overriden.
|
|
5808
|
-
this.Ot.indexOf(t) > -1 && (
|
|
5809
|
-
const r =
|
|
5831
|
+
this.Ot.indexOf(t) > -1 && (e = 0);
|
|
5832
|
+
const r = Cr.createAndSchedule(this, t, e, n, (t => this.jt(t)));
|
|
5810
5833
|
return this.St.push(r), r;
|
|
5811
5834
|
}
|
|
5812
5835
|
Lt() {
|
|
@@ -5830,7 +5853,7 @@ class Or {
|
|
|
5830
5853
|
* For Tests: Determine if a delayed operation with a particular TimerId
|
|
5831
5854
|
* exists.
|
|
5832
5855
|
*/ Bt(t) {
|
|
5833
|
-
for (const
|
|
5856
|
+
for (const e of this.St) if (e.timerId === t) return !0;
|
|
5834
5857
|
return !1;
|
|
5835
5858
|
}
|
|
5836
5859
|
/**
|
|
@@ -5843,8 +5866,8 @@ class Or {
|
|
|
5843
5866
|
// Note that draining may generate more delayed ops, so we do that first.
|
|
5844
5867
|
return this.Mt().then((() => {
|
|
5845
5868
|
// Run ops in the same order they'd run if they ran naturally.
|
|
5846
|
-
this.St.sort(((t,
|
|
5847
|
-
for (const
|
|
5869
|
+
this.St.sort(((t, e) => t.targetTimeMs - e.targetTimeMs));
|
|
5870
|
+
for (const e of this.St) if (e.skipDelay(), "all" /* All */ !== t && e.timerId === t) break;
|
|
5848
5871
|
return this.Mt();
|
|
5849
5872
|
}));
|
|
5850
5873
|
}
|
|
@@ -5855,15 +5878,15 @@ class Or {
|
|
|
5855
5878
|
}
|
|
5856
5879
|
/** Called once a DelayedOperation is run or canceled. */ jt(t) {
|
|
5857
5880
|
// NOTE: indexOf / slice are O(n), but delayedOperations is expected to be small.
|
|
5858
|
-
const
|
|
5859
|
-
this.St.splice(
|
|
5881
|
+
const e = this.St.indexOf(t);
|
|
5882
|
+
this.St.splice(e, 1);
|
|
5860
5883
|
}
|
|
5861
5884
|
}
|
|
5862
5885
|
|
|
5863
|
-
class
|
|
5886
|
+
class Ur {
|
|
5864
5887
|
/** @hideconstructor */
|
|
5865
|
-
constructor(t,
|
|
5866
|
-
this._firestore = t, this._transaction =
|
|
5888
|
+
constructor(t, e) {
|
|
5889
|
+
this._firestore = t, this._transaction = e, this._dataReader = Vn(t);
|
|
5867
5890
|
}
|
|
5868
5891
|
/**
|
|
5869
5892
|
* Reads the document referenced by the provided {@link DocumentReference}.
|
|
@@ -5871,25 +5894,25 @@ class kr {
|
|
|
5871
5894
|
* @param documentRef - A reference to the document to be read.
|
|
5872
5895
|
* @returns A `DocumentSnapshot` with the read data.
|
|
5873
5896
|
*/ get(t) {
|
|
5874
|
-
const
|
|
5875
|
-
return this._transaction.lookup([
|
|
5897
|
+
const e = Sr(t, this._firestore), n = new gr(this._firestore);
|
|
5898
|
+
return this._transaction.lookup([ e._key ]).then((t => {
|
|
5876
5899
|
if (!t || 1 !== t.length) return g();
|
|
5877
5900
|
const r = t[0];
|
|
5878
|
-
if (r.isFoundDocument()) return new
|
|
5879
|
-
if (r.isNoDocument()) return new
|
|
5901
|
+
if (r.isFoundDocument()) return new Yn(this._firestore, n, r.key, r, e.converter);
|
|
5902
|
+
if (r.isNoDocument()) return new Yn(this._firestore, n, e._key, null, e.converter);
|
|
5880
5903
|
throw g();
|
|
5881
5904
|
}));
|
|
5882
5905
|
}
|
|
5883
|
-
set(t,
|
|
5884
|
-
const r =
|
|
5906
|
+
set(t, e, n) {
|
|
5907
|
+
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);
|
|
5885
5908
|
return this._transaction.set(r._key, i), this;
|
|
5886
5909
|
}
|
|
5887
|
-
update(t,
|
|
5888
|
-
const s =
|
|
5910
|
+
update(t, e, n, ...r) {
|
|
5911
|
+
const s = Sr(t, this._firestore);
|
|
5889
5912
|
// For Compat types, we have to "extract" the underlying types before
|
|
5890
5913
|
// performing validation.
|
|
5891
5914
|
let i;
|
|
5892
|
-
return i = "string" == typeof (
|
|
5915
|
+
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),
|
|
5893
5916
|
this._transaction.update(s._key, i), this;
|
|
5894
5917
|
}
|
|
5895
5918
|
/**
|
|
@@ -5898,8 +5921,8 @@ class kr {
|
|
|
5898
5921
|
* @param documentRef - A reference to the document to be deleted.
|
|
5899
5922
|
* @returns This `Transaction` instance. Used for chaining method calls.
|
|
5900
5923
|
*/ delete(t) {
|
|
5901
|
-
const
|
|
5902
|
-
return this._transaction.delete(
|
|
5924
|
+
const e = Sr(t, this._firestore);
|
|
5925
|
+
return this._transaction.delete(e._key), this;
|
|
5903
5926
|
}
|
|
5904
5927
|
}
|
|
5905
5928
|
|
|
@@ -5919,9 +5942,9 @@ class kr {
|
|
|
5919
5942
|
* (the `updateFunction` returned a failed promise), the promise returned by the
|
|
5920
5943
|
* `updateFunction `is returned here. Otherwise, if the transaction failed, a
|
|
5921
5944
|
* rejected promise with the corresponding failure error is returned.
|
|
5922
|
-
*/ function
|
|
5923
|
-
const
|
|
5924
|
-
return new
|
|
5945
|
+
*/ function kr(t, e) {
|
|
5946
|
+
const n = en(t = ot(t, rn)), r = new k;
|
|
5947
|
+
return new qr(new Lr, n, (n => e(new Ur(t, n))), r).run(), r.promise;
|
|
5925
5948
|
}
|
|
5926
5949
|
|
|
5927
5950
|
/**
|
|
@@ -5933,12 +5956,12 @@ class kr {
|
|
|
5933
5956
|
* @packageDocumentation
|
|
5934
5957
|
*/ !function(t) {
|
|
5935
5958
|
f = t;
|
|
5936
|
-
}(`${SDK_VERSION}_lite`), _registerComponent(new Component("firestore/lite", ((t, {options:
|
|
5937
|
-
const
|
|
5938
|
-
return
|
|
5959
|
+
}(`${SDK_VERSION}_lite`), _registerComponent(new Component("firestore/lite", ((t, {options: e}) => {
|
|
5960
|
+
const n = t.getProvider("app").getImmediate(), r = new rn(n, new z(t.getProvider("auth-internal")), new Y(t.getProvider("app-check-internal")));
|
|
5961
|
+
return e && r._setSettings(e), r;
|
|
5939
5962
|
}), "PUBLIC")),
|
|
5940
5963
|
// RUNTIME_ENV and BUILD_TARGET are replaced by real values during the compilation
|
|
5941
|
-
registerVersion("firestore-lite", "3.4.
|
|
5964
|
+
registerVersion("firestore-lite", "3.4.5-2022116201138", ""), registerVersion("firestore-lite", "3.4.5-2022116201138", "esm2017");
|
|
5942
5965
|
|
|
5943
|
-
export {
|
|
5966
|
+
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 };
|
|
5944
5967
|
//# sourceMappingURL=index.browser.esm2017.js.map
|