} struct.\r\n */\r\nfunction toInt32Proto(serializer, val) {\r\n if (serializer.useProto3Json || isNullOrUndefined(val)) {\r\n return val;\r\n }\r\n else {\r\n return { value: val };\r\n }\r\n}\r\n/**\r\n * Returns a number (or null) from a google.protobuf.Int32Value proto.\r\n */\r\nfunction fromInt32Proto(val) {\r\n let result;\r\n if (typeof val === 'object') {\r\n result = val.value;\r\n }\r\n else {\r\n result = val;\r\n }\r\n return isNullOrUndefined(result) ? null : result;\r\n}\r\n/**\r\n * Returns a value for a Date that's appropriate to put into a proto.\r\n */\r\nfunction toTimestamp(serializer, timestamp) {\r\n if (serializer.useProto3Json) {\r\n // Serialize to ISO-8601 date format, but with full nano resolution.\r\n // Since JS Date has only millis, let's only use it for the seconds and\r\n // then manually add the fractions to the end.\r\n const jsDateStr = new Date(timestamp.seconds * 1000).toISOString();\r\n // Remove .xxx frac part and Z in the end.\r\n const strUntilSeconds = jsDateStr.replace(/\\.\\d*/, '').replace('Z', '');\r\n // Pad the fraction out to 9 digits (nanos).\r\n const nanoStr = ('000000000' + timestamp.nanoseconds).slice(-9);\r\n return `${strUntilSeconds}.${nanoStr}Z`;\r\n }\r\n else {\r\n return {\r\n seconds: '' + timestamp.seconds,\r\n nanos: timestamp.nanoseconds\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n };\r\n }\r\n}\r\nfunction fromTimestamp(date) {\r\n const timestamp = normalizeTimestamp(date);\r\n return new Timestamp(timestamp.seconds, timestamp.nanos);\r\n}\r\n/**\r\n * Returns a value for bytes that's appropriate to put in a proto.\r\n *\r\n * Visible for testing.\r\n */\r\nfunction toBytes(serializer, bytes) {\r\n if (serializer.useProto3Json) {\r\n return bytes.toBase64();\r\n }\r\n else {\r\n return bytes.toUint8Array();\r\n }\r\n}\r\n/**\r\n * Returns a ByteString based on the proto string value.\r\n */\r\nfunction fromBytes(serializer, value) {\r\n if (serializer.useProto3Json) {\r\n hardAssert(value === undefined || typeof value === 'string');\r\n return ByteString.fromBase64String(value ? value : '');\r\n }\r\n else {\r\n hardAssert(value === undefined || value instanceof Uint8Array);\r\n return ByteString.fromUint8Array(value ? value : new Uint8Array());\r\n }\r\n}\r\nfunction toVersion(serializer, version) {\r\n return toTimestamp(serializer, version.toTimestamp());\r\n}\r\nfunction fromVersion(version) {\r\n hardAssert(!!version);\r\n return SnapshotVersion.fromTimestamp(fromTimestamp(version));\r\n}\r\nfunction toResourceName(databaseId, path) {\r\n return fullyQualifiedPrefixPath(databaseId)\r\n .child('documents')\r\n .child(path)\r\n .canonicalString();\r\n}\r\nfunction fromResourceName(name) {\r\n const resource = ResourcePath.fromString(name);\r\n hardAssert(isValidResourceName(resource));\r\n return resource;\r\n}\r\nfunction toName(serializer, key) {\r\n return toResourceName(serializer.databaseId, key.path);\r\n}\r\nfunction fromName(serializer, name) {\r\n const resource = fromResourceName(name);\r\n if (resource.get(1) !== serializer.databaseId.projectId) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Tried to deserialize key from different project: ' +\r\n resource.get(1) +\r\n ' vs ' +\r\n serializer.databaseId.projectId);\r\n }\r\n if (resource.get(3) !== serializer.databaseId.database) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Tried to deserialize key from different database: ' +\r\n resource.get(3) +\r\n ' vs ' +\r\n serializer.databaseId.database);\r\n }\r\n return new DocumentKey(extractLocalPathFromResourceName(resource));\r\n}\r\nfunction toQueryPath(serializer, path) {\r\n return toResourceName(serializer.databaseId, path);\r\n}\r\nfunction fromQueryPath(name) {\r\n const resourceName = fromResourceName(name);\r\n // In v1beta1 queries for collections at the root did not have a trailing\r\n // \"/documents\". In v1 all resource paths contain \"/documents\". Preserve the\r\n // ability to read the v1beta1 form for compatibility with queries persisted\r\n // in the local target cache.\r\n if (resourceName.length === 4) {\r\n return ResourcePath.emptyPath();\r\n }\r\n return extractLocalPathFromResourceName(resourceName);\r\n}\r\nfunction getEncodedDatabaseId(serializer) {\r\n const path = new ResourcePath([\r\n 'projects',\r\n serializer.databaseId.projectId,\r\n 'databases',\r\n serializer.databaseId.database\r\n ]);\r\n return path.canonicalString();\r\n}\r\nfunction fullyQualifiedPrefixPath(databaseId) {\r\n return new ResourcePath([\r\n 'projects',\r\n databaseId.projectId,\r\n 'databases',\r\n databaseId.database\r\n ]);\r\n}\r\nfunction extractLocalPathFromResourceName(resourceName) {\r\n hardAssert(resourceName.length > 4 && resourceName.get(4) === 'documents');\r\n return resourceName.popFirst(5);\r\n}\r\n/** Creates a Document proto from key and fields (but no create/update time) */\r\nfunction toMutationDocument(serializer, key, fields) {\r\n return {\r\n name: toName(serializer, key),\r\n fields: fields.value.mapValue.fields\r\n };\r\n}\r\nfunction toDocument(serializer, document) {\r\n return {\r\n name: toName(serializer, document.key),\r\n fields: document.data.value.mapValue.fields,\r\n updateTime: toTimestamp(serializer, document.version.toTimestamp()),\r\n createTime: toTimestamp(serializer, document.createTime.toTimestamp())\r\n };\r\n}\r\nfunction fromDocument(serializer, document, hasCommittedMutations) {\r\n const key = fromName(serializer, document.name);\r\n const version = fromVersion(document.updateTime);\r\n // If we read a document from persistence that is missing createTime, it's due\r\n // to older SDK versions not storing this information. In such cases, we'll\r\n // set the createTime to zero. This can be removed in the long term.\r\n const createTime = document.createTime\r\n ? fromVersion(document.createTime)\r\n : SnapshotVersion.min();\r\n const data = new ObjectValue({ mapValue: { fields: document.fields } });\r\n const result = MutableDocument.newFoundDocument(key, version, createTime, data);\r\n if (hasCommittedMutations) {\r\n result.setHasCommittedMutations();\r\n }\r\n return hasCommittedMutations ? result.setHasCommittedMutations() : result;\r\n}\r\nfunction fromFound(serializer, doc) {\r\n hardAssert(!!doc.found);\r\n assertPresent(doc.found.name);\r\n assertPresent(doc.found.updateTime);\r\n const key = fromName(serializer, doc.found.name);\r\n const version = fromVersion(doc.found.updateTime);\r\n const createTime = doc.found.createTime\r\n ? fromVersion(doc.found.createTime)\r\n : SnapshotVersion.min();\r\n const data = new ObjectValue({ mapValue: { fields: doc.found.fields } });\r\n return MutableDocument.newFoundDocument(key, version, createTime, data);\r\n}\r\nfunction fromMissing(serializer, result) {\r\n hardAssert(!!result.missing);\r\n hardAssert(!!result.readTime);\r\n const key = fromName(serializer, result.missing);\r\n const version = fromVersion(result.readTime);\r\n return MutableDocument.newNoDocument(key, version);\r\n}\r\nfunction fromBatchGetDocumentsResponse(serializer, result) {\r\n if ('found' in result) {\r\n return fromFound(serializer, result);\r\n }\r\n else if ('missing' in result) {\r\n return fromMissing(serializer, result);\r\n }\r\n return fail();\r\n}\r\nfunction fromWatchChange(serializer, change) {\r\n let watchChange;\r\n if ('targetChange' in change) {\r\n assertPresent(change.targetChange);\r\n // proto3 default value is unset in JSON (undefined), so use 'NO_CHANGE'\r\n // if unset\r\n const state = fromWatchTargetChangeState(change.targetChange.targetChangeType || 'NO_CHANGE');\r\n const targetIds = change.targetChange.targetIds || [];\r\n const resumeToken = fromBytes(serializer, change.targetChange.resumeToken);\r\n const causeProto = change.targetChange.cause;\r\n const cause = causeProto && fromRpcStatus(causeProto);\r\n watchChange = new WatchTargetChange(state, targetIds, resumeToken, cause || null);\r\n }\r\n else if ('documentChange' in change) {\r\n assertPresent(change.documentChange);\r\n const entityChange = change.documentChange;\r\n assertPresent(entityChange.document);\r\n assertPresent(entityChange.document.name);\r\n assertPresent(entityChange.document.updateTime);\r\n const key = fromName(serializer, entityChange.document.name);\r\n const version = fromVersion(entityChange.document.updateTime);\r\n const createTime = entityChange.document.createTime\r\n ? fromVersion(entityChange.document.createTime)\r\n : SnapshotVersion.min();\r\n const data = new ObjectValue({\r\n mapValue: { fields: entityChange.document.fields }\r\n });\r\n const doc = MutableDocument.newFoundDocument(key, version, createTime, data);\r\n const updatedTargetIds = entityChange.targetIds || [];\r\n const removedTargetIds = entityChange.removedTargetIds || [];\r\n watchChange = new DocumentWatchChange(updatedTargetIds, removedTargetIds, doc.key, doc);\r\n }\r\n else if ('documentDelete' in change) {\r\n assertPresent(change.documentDelete);\r\n const docDelete = change.documentDelete;\r\n assertPresent(docDelete.document);\r\n const key = fromName(serializer, docDelete.document);\r\n const version = docDelete.readTime\r\n ? fromVersion(docDelete.readTime)\r\n : SnapshotVersion.min();\r\n const doc = MutableDocument.newNoDocument(key, version);\r\n const removedTargetIds = docDelete.removedTargetIds || [];\r\n watchChange = new DocumentWatchChange([], removedTargetIds, doc.key, doc);\r\n }\r\n else if ('documentRemove' in change) {\r\n assertPresent(change.documentRemove);\r\n const docRemove = change.documentRemove;\r\n assertPresent(docRemove.document);\r\n const key = fromName(serializer, docRemove.document);\r\n const removedTargetIds = docRemove.removedTargetIds || [];\r\n watchChange = new DocumentWatchChange([], removedTargetIds, key, null);\r\n }\r\n else if ('filter' in change) {\r\n // TODO(dimond): implement existence filter parsing with strategy.\r\n assertPresent(change.filter);\r\n const filter = change.filter;\r\n assertPresent(filter.targetId);\r\n const count = filter.count || 0;\r\n const existenceFilter = new ExistenceFilter(count);\r\n const targetId = filter.targetId;\r\n watchChange = new ExistenceFilterChange(targetId, existenceFilter);\r\n }\r\n else {\r\n return fail();\r\n }\r\n return watchChange;\r\n}\r\nfunction fromWatchTargetChangeState(state) {\r\n if (state === 'NO_CHANGE') {\r\n return 0 /* WatchTargetChangeState.NoChange */;\r\n }\r\n else if (state === 'ADD') {\r\n return 1 /* WatchTargetChangeState.Added */;\r\n }\r\n else if (state === 'REMOVE') {\r\n return 2 /* WatchTargetChangeState.Removed */;\r\n }\r\n else if (state === 'CURRENT') {\r\n return 3 /* WatchTargetChangeState.Current */;\r\n }\r\n else if (state === 'RESET') {\r\n return 4 /* WatchTargetChangeState.Reset */;\r\n }\r\n else {\r\n return fail();\r\n }\r\n}\r\nfunction versionFromListenResponse(change) {\r\n // We have only reached a consistent snapshot for the entire stream if there\r\n // is a read_time set and it applies to all targets (i.e. the list of\r\n // targets is empty). The backend is guaranteed to send such responses.\r\n if (!('targetChange' in change)) {\r\n return SnapshotVersion.min();\r\n }\r\n const targetChange = change.targetChange;\r\n if (targetChange.targetIds && targetChange.targetIds.length) {\r\n return SnapshotVersion.min();\r\n }\r\n if (!targetChange.readTime) {\r\n return SnapshotVersion.min();\r\n }\r\n return fromVersion(targetChange.readTime);\r\n}\r\nfunction toMutation(serializer, mutation) {\r\n let result;\r\n if (mutation instanceof SetMutation) {\r\n result = {\r\n update: toMutationDocument(serializer, mutation.key, mutation.value)\r\n };\r\n }\r\n else if (mutation instanceof DeleteMutation) {\r\n result = { delete: toName(serializer, mutation.key) };\r\n }\r\n else if (mutation instanceof PatchMutation) {\r\n result = {\r\n update: toMutationDocument(serializer, mutation.key, mutation.data),\r\n updateMask: toDocumentMask(mutation.fieldMask)\r\n };\r\n }\r\n else if (mutation instanceof VerifyMutation) {\r\n result = {\r\n verify: toName(serializer, mutation.key)\r\n };\r\n }\r\n else {\r\n return fail();\r\n }\r\n if (mutation.fieldTransforms.length > 0) {\r\n result.updateTransforms = mutation.fieldTransforms.map(transform => toFieldTransform(serializer, transform));\r\n }\r\n if (!mutation.precondition.isNone) {\r\n result.currentDocument = toPrecondition(serializer, mutation.precondition);\r\n }\r\n return result;\r\n}\r\nfunction fromMutation(serializer, proto) {\r\n const precondition = proto.currentDocument\r\n ? fromPrecondition(proto.currentDocument)\r\n : Precondition.none();\r\n const fieldTransforms = proto.updateTransforms\r\n ? proto.updateTransforms.map(transform => fromFieldTransform(serializer, transform))\r\n : [];\r\n if (proto.update) {\r\n assertPresent(proto.update.name);\r\n const key = fromName(serializer, proto.update.name);\r\n const value = new ObjectValue({\r\n mapValue: { fields: proto.update.fields }\r\n });\r\n if (proto.updateMask) {\r\n const fieldMask = fromDocumentMask(proto.updateMask);\r\n return new PatchMutation(key, value, fieldMask, precondition, fieldTransforms);\r\n }\r\n else {\r\n return new SetMutation(key, value, precondition, fieldTransforms);\r\n }\r\n }\r\n else if (proto.delete) {\r\n const key = fromName(serializer, proto.delete);\r\n return new DeleteMutation(key, precondition);\r\n }\r\n else if (proto.verify) {\r\n const key = fromName(serializer, proto.verify);\r\n return new VerifyMutation(key, precondition);\r\n }\r\n else {\r\n return fail();\r\n }\r\n}\r\nfunction toPrecondition(serializer, precondition) {\r\n if (precondition.updateTime !== undefined) {\r\n return {\r\n updateTime: toVersion(serializer, precondition.updateTime)\r\n };\r\n }\r\n else if (precondition.exists !== undefined) {\r\n return { exists: precondition.exists };\r\n }\r\n else {\r\n return fail();\r\n }\r\n}\r\nfunction fromPrecondition(precondition) {\r\n if (precondition.updateTime !== undefined) {\r\n return Precondition.updateTime(fromVersion(precondition.updateTime));\r\n }\r\n else if (precondition.exists !== undefined) {\r\n return Precondition.exists(precondition.exists);\r\n }\r\n else {\r\n return Precondition.none();\r\n }\r\n}\r\nfunction fromWriteResult(proto, commitTime) {\r\n // NOTE: Deletes don't have an updateTime.\r\n let version = proto.updateTime\r\n ? fromVersion(proto.updateTime)\r\n : fromVersion(commitTime);\r\n if (version.isEqual(SnapshotVersion.min())) {\r\n // The Firestore Emulator currently returns an update time of 0 for\r\n // deletes of non-existing documents (rather than null). This breaks the\r\n // test \"get deleted doc while offline with source=cache\" as NoDocuments\r\n // with version 0 are filtered by IndexedDb's RemoteDocumentCache.\r\n // TODO(#2149): Remove this when Emulator is fixed\r\n version = fromVersion(commitTime);\r\n }\r\n return new MutationResult(version, proto.transformResults || []);\r\n}\r\nfunction fromWriteResults(protos, commitTime) {\r\n if (protos && protos.length > 0) {\r\n hardAssert(commitTime !== undefined);\r\n return protos.map(proto => fromWriteResult(proto, commitTime));\r\n }\r\n else {\r\n return [];\r\n }\r\n}\r\nfunction toFieldTransform(serializer, fieldTransform) {\r\n const transform = fieldTransform.transform;\r\n if (transform instanceof ServerTimestampTransform) {\r\n return {\r\n fieldPath: fieldTransform.field.canonicalString(),\r\n setToServerValue: 'REQUEST_TIME'\r\n };\r\n }\r\n else if (transform instanceof ArrayUnionTransformOperation) {\r\n return {\r\n fieldPath: fieldTransform.field.canonicalString(),\r\n appendMissingElements: {\r\n values: transform.elements\r\n }\r\n };\r\n }\r\n else if (transform instanceof ArrayRemoveTransformOperation) {\r\n return {\r\n fieldPath: fieldTransform.field.canonicalString(),\r\n removeAllFromArray: {\r\n values: transform.elements\r\n }\r\n };\r\n }\r\n else if (transform instanceof NumericIncrementTransformOperation) {\r\n return {\r\n fieldPath: fieldTransform.field.canonicalString(),\r\n increment: transform.operand\r\n };\r\n }\r\n else {\r\n throw fail();\r\n }\r\n}\r\nfunction fromFieldTransform(serializer, proto) {\r\n let transform = null;\r\n if ('setToServerValue' in proto) {\r\n hardAssert(proto.setToServerValue === 'REQUEST_TIME');\r\n transform = new ServerTimestampTransform();\r\n }\r\n else if ('appendMissingElements' in proto) {\r\n const values = proto.appendMissingElements.values || [];\r\n transform = new ArrayUnionTransformOperation(values);\r\n }\r\n else if ('removeAllFromArray' in proto) {\r\n const values = proto.removeAllFromArray.values || [];\r\n transform = new ArrayRemoveTransformOperation(values);\r\n }\r\n else if ('increment' in proto) {\r\n transform = new NumericIncrementTransformOperation(serializer, proto.increment);\r\n }\r\n else {\r\n fail();\r\n }\r\n const fieldPath = FieldPath$1.fromServerFormat(proto.fieldPath);\r\n return new FieldTransform(fieldPath, transform);\r\n}\r\nfunction toDocumentsTarget(serializer, target) {\r\n return { documents: [toQueryPath(serializer, target.path)] };\r\n}\r\nfunction fromDocumentsTarget(documentsTarget) {\r\n const count = documentsTarget.documents.length;\r\n hardAssert(count === 1);\r\n const name = documentsTarget.documents[0];\r\n return queryToTarget(newQueryForPath(fromQueryPath(name)));\r\n}\r\nfunction toQueryTarget(serializer, target) {\r\n // Dissect the path into parent, collectionId, and optional key filter.\r\n const result = { structuredQuery: {} };\r\n const path = target.path;\r\n if (target.collectionGroup !== null) {\r\n result.parent = toQueryPath(serializer, path);\r\n result.structuredQuery.from = [\r\n {\r\n collectionId: target.collectionGroup,\r\n allDescendants: true\r\n }\r\n ];\r\n }\r\n else {\r\n result.parent = toQueryPath(serializer, path.popLast());\r\n result.structuredQuery.from = [{ collectionId: path.lastSegment() }];\r\n }\r\n const where = toFilters(target.filters);\r\n if (where) {\r\n result.structuredQuery.where = where;\r\n }\r\n const orderBy = toOrder(target.orderBy);\r\n if (orderBy) {\r\n result.structuredQuery.orderBy = orderBy;\r\n }\r\n const limit = toInt32Proto(serializer, target.limit);\r\n if (limit !== null) {\r\n result.structuredQuery.limit = limit;\r\n }\r\n if (target.startAt) {\r\n result.structuredQuery.startAt = toStartAtCursor(target.startAt);\r\n }\r\n if (target.endAt) {\r\n result.structuredQuery.endAt = toEndAtCursor(target.endAt);\r\n }\r\n return result;\r\n}\r\nfunction toRunAggregationQueryRequest(serializer, target) {\r\n const queryTarget = toQueryTarget(serializer, target);\r\n return {\r\n structuredAggregationQuery: {\r\n aggregations: [\r\n {\r\n count: {},\r\n alias: 'count_alias'\r\n }\r\n ],\r\n structuredQuery: queryTarget.structuredQuery\r\n },\r\n parent: queryTarget.parent\r\n };\r\n}\r\nfunction convertQueryTargetToQuery(target) {\r\n let path = fromQueryPath(target.parent);\r\n const query = target.structuredQuery;\r\n const fromCount = query.from ? query.from.length : 0;\r\n let collectionGroup = null;\r\n if (fromCount > 0) {\r\n hardAssert(fromCount === 1);\r\n const from = query.from[0];\r\n if (from.allDescendants) {\r\n collectionGroup = from.collectionId;\r\n }\r\n else {\r\n path = path.child(from.collectionId);\r\n }\r\n }\r\n let filterBy = [];\r\n if (query.where) {\r\n filterBy = fromFilters(query.where);\r\n }\r\n let orderBy = [];\r\n if (query.orderBy) {\r\n orderBy = fromOrder(query.orderBy);\r\n }\r\n let limit = null;\r\n if (query.limit) {\r\n limit = fromInt32Proto(query.limit);\r\n }\r\n let startAt = null;\r\n if (query.startAt) {\r\n startAt = fromStartAtCursor(query.startAt);\r\n }\r\n let endAt = null;\r\n if (query.endAt) {\r\n endAt = fromEndAtCursor(query.endAt);\r\n }\r\n return newQuery(path, collectionGroup, orderBy, filterBy, limit, \"F\" /* LimitType.First */, startAt, endAt);\r\n}\r\nfunction fromQueryTarget(target) {\r\n return queryToTarget(convertQueryTargetToQuery(target));\r\n}\r\nfunction toListenRequestLabels(serializer, targetData) {\r\n const value = toLabel(serializer, targetData.purpose);\r\n if (value == null) {\r\n return null;\r\n }\r\n else {\r\n return {\r\n 'goog-listen-tags': value\r\n };\r\n }\r\n}\r\nfunction toLabel(serializer, purpose) {\r\n switch (purpose) {\r\n case 0 /* TargetPurpose.Listen */:\r\n return null;\r\n case 1 /* TargetPurpose.ExistenceFilterMismatch */:\r\n return 'existence-filter-mismatch';\r\n case 2 /* TargetPurpose.LimboResolution */:\r\n return 'limbo-document';\r\n default:\r\n return fail();\r\n }\r\n}\r\nfunction toTarget(serializer, targetData) {\r\n let result;\r\n const target = targetData.target;\r\n if (targetIsDocumentTarget(target)) {\r\n result = { documents: toDocumentsTarget(serializer, target) };\r\n }\r\n else {\r\n result = { query: toQueryTarget(serializer, target) };\r\n }\r\n result.targetId = targetData.targetId;\r\n if (targetData.resumeToken.approximateByteSize() > 0) {\r\n result.resumeToken = toBytes(serializer, targetData.resumeToken);\r\n }\r\n else if (targetData.snapshotVersion.compareTo(SnapshotVersion.min()) > 0) {\r\n // TODO(wuandy): Consider removing above check because it is most likely true.\r\n // Right now, many tests depend on this behaviour though (leaving min() out\r\n // of serialization).\r\n result.readTime = toTimestamp(serializer, targetData.snapshotVersion.toTimestamp());\r\n }\r\n return result;\r\n}\r\nfunction toFilters(filters) {\r\n if (filters.length === 0) {\r\n return;\r\n }\r\n return toFilter(CompositeFilter.create(filters, \"and\" /* CompositeOperator.AND */));\r\n}\r\nfunction fromFilters(filter) {\r\n const result = fromFilter(filter);\r\n if (result instanceof CompositeFilter &&\r\n compositeFilterIsFlatConjunction(result)) {\r\n return result.getFilters();\r\n }\r\n return [result];\r\n}\r\nfunction fromFilter(filter) {\r\n if (filter.unaryFilter !== undefined) {\r\n return fromUnaryFilter(filter);\r\n }\r\n else if (filter.fieldFilter !== undefined) {\r\n return fromFieldFilter(filter);\r\n }\r\n else if (filter.compositeFilter !== undefined) {\r\n return fromCompositeFilter(filter);\r\n }\r\n else {\r\n return fail();\r\n }\r\n}\r\nfunction toOrder(orderBys) {\r\n if (orderBys.length === 0) {\r\n return;\r\n }\r\n return orderBys.map(order => toPropertyOrder(order));\r\n}\r\nfunction fromOrder(orderBys) {\r\n return orderBys.map(order => fromPropertyOrder(order));\r\n}\r\nfunction toStartAtCursor(cursor) {\r\n return {\r\n before: cursor.inclusive,\r\n values: cursor.position\r\n };\r\n}\r\nfunction toEndAtCursor(cursor) {\r\n return {\r\n before: !cursor.inclusive,\r\n values: cursor.position\r\n };\r\n}\r\nfunction fromStartAtCursor(cursor) {\r\n const inclusive = !!cursor.before;\r\n const position = cursor.values || [];\r\n return new Bound(position, inclusive);\r\n}\r\nfunction fromEndAtCursor(cursor) {\r\n const inclusive = !cursor.before;\r\n const position = cursor.values || [];\r\n return new Bound(position, inclusive);\r\n}\r\n// visible for testing\r\nfunction toDirection(dir) {\r\n return DIRECTIONS[dir];\r\n}\r\n// visible for testing\r\nfunction fromDirection(dir) {\r\n switch (dir) {\r\n case 'ASCENDING':\r\n return \"asc\" /* Direction.ASCENDING */;\r\n case 'DESCENDING':\r\n return \"desc\" /* Direction.DESCENDING */;\r\n default:\r\n return undefined;\r\n }\r\n}\r\n// visible for testing\r\nfunction toOperatorName(op) {\r\n return OPERATORS[op];\r\n}\r\nfunction toCompositeOperatorName(op) {\r\n return COMPOSITE_OPERATORS[op];\r\n}\r\nfunction fromOperatorName(op) {\r\n switch (op) {\r\n case 'EQUAL':\r\n return \"==\" /* Operator.EQUAL */;\r\n case 'NOT_EQUAL':\r\n return \"!=\" /* Operator.NOT_EQUAL */;\r\n case 'GREATER_THAN':\r\n return \">\" /* Operator.GREATER_THAN */;\r\n case 'GREATER_THAN_OR_EQUAL':\r\n return \">=\" /* Operator.GREATER_THAN_OR_EQUAL */;\r\n case 'LESS_THAN':\r\n return \"<\" /* Operator.LESS_THAN */;\r\n case 'LESS_THAN_OR_EQUAL':\r\n return \"<=\" /* Operator.LESS_THAN_OR_EQUAL */;\r\n case 'ARRAY_CONTAINS':\r\n return \"array-contains\" /* Operator.ARRAY_CONTAINS */;\r\n case 'IN':\r\n return \"in\" /* Operator.IN */;\r\n case 'NOT_IN':\r\n return \"not-in\" /* Operator.NOT_IN */;\r\n case 'ARRAY_CONTAINS_ANY':\r\n return \"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */;\r\n case 'OPERATOR_UNSPECIFIED':\r\n return fail();\r\n default:\r\n return fail();\r\n }\r\n}\r\nfunction fromCompositeOperatorName(op) {\r\n switch (op) {\r\n case 'AND':\r\n return \"and\" /* CompositeOperator.AND */;\r\n case 'OR':\r\n return \"or\" /* CompositeOperator.OR */;\r\n default:\r\n return fail();\r\n }\r\n}\r\nfunction toFieldPathReference(path) {\r\n return { fieldPath: path.canonicalString() };\r\n}\r\nfunction fromFieldPathReference(fieldReference) {\r\n return FieldPath$1.fromServerFormat(fieldReference.fieldPath);\r\n}\r\n// visible for testing\r\nfunction toPropertyOrder(orderBy) {\r\n return {\r\n field: toFieldPathReference(orderBy.field),\r\n direction: toDirection(orderBy.dir)\r\n };\r\n}\r\nfunction fromPropertyOrder(orderBy) {\r\n return new OrderBy(fromFieldPathReference(orderBy.field), fromDirection(orderBy.direction));\r\n}\r\n// visible for testing\r\nfunction toFilter(filter) {\r\n if (filter instanceof FieldFilter) {\r\n return toUnaryOrFieldFilter(filter);\r\n }\r\n else if (filter instanceof CompositeFilter) {\r\n return toCompositeFilter(filter);\r\n }\r\n else {\r\n return fail();\r\n }\r\n}\r\nfunction toCompositeFilter(filter) {\r\n const protos = filter.getFilters().map(filter => toFilter(filter));\r\n if (protos.length === 1) {\r\n return protos[0];\r\n }\r\n return {\r\n compositeFilter: {\r\n op: toCompositeOperatorName(filter.op),\r\n filters: protos\r\n }\r\n };\r\n}\r\nfunction toUnaryOrFieldFilter(filter) {\r\n if (filter.op === \"==\" /* Operator.EQUAL */) {\r\n if (isNanValue(filter.value)) {\r\n return {\r\n unaryFilter: {\r\n field: toFieldPathReference(filter.field),\r\n op: 'IS_NAN'\r\n }\r\n };\r\n }\r\n else if (isNullValue(filter.value)) {\r\n return {\r\n unaryFilter: {\r\n field: toFieldPathReference(filter.field),\r\n op: 'IS_NULL'\r\n }\r\n };\r\n }\r\n }\r\n else if (filter.op === \"!=\" /* Operator.NOT_EQUAL */) {\r\n if (isNanValue(filter.value)) {\r\n return {\r\n unaryFilter: {\r\n field: toFieldPathReference(filter.field),\r\n op: 'IS_NOT_NAN'\r\n }\r\n };\r\n }\r\n else if (isNullValue(filter.value)) {\r\n return {\r\n unaryFilter: {\r\n field: toFieldPathReference(filter.field),\r\n op: 'IS_NOT_NULL'\r\n }\r\n };\r\n }\r\n }\r\n return {\r\n fieldFilter: {\r\n field: toFieldPathReference(filter.field),\r\n op: toOperatorName(filter.op),\r\n value: filter.value\r\n }\r\n };\r\n}\r\nfunction fromUnaryFilter(filter) {\r\n switch (filter.unaryFilter.op) {\r\n case 'IS_NAN':\r\n const nanField = fromFieldPathReference(filter.unaryFilter.field);\r\n return FieldFilter.create(nanField, \"==\" /* Operator.EQUAL */, {\r\n doubleValue: NaN\r\n });\r\n case 'IS_NULL':\r\n const nullField = fromFieldPathReference(filter.unaryFilter.field);\r\n return FieldFilter.create(nullField, \"==\" /* Operator.EQUAL */, {\r\n nullValue: 'NULL_VALUE'\r\n });\r\n case 'IS_NOT_NAN':\r\n const notNanField = fromFieldPathReference(filter.unaryFilter.field);\r\n return FieldFilter.create(notNanField, \"!=\" /* Operator.NOT_EQUAL */, {\r\n doubleValue: NaN\r\n });\r\n case 'IS_NOT_NULL':\r\n const notNullField = fromFieldPathReference(filter.unaryFilter.field);\r\n return FieldFilter.create(notNullField, \"!=\" /* Operator.NOT_EQUAL */, {\r\n nullValue: 'NULL_VALUE'\r\n });\r\n case 'OPERATOR_UNSPECIFIED':\r\n return fail();\r\n default:\r\n return fail();\r\n }\r\n}\r\nfunction fromFieldFilter(filter) {\r\n return FieldFilter.create(fromFieldPathReference(filter.fieldFilter.field), fromOperatorName(filter.fieldFilter.op), filter.fieldFilter.value);\r\n}\r\nfunction fromCompositeFilter(filter) {\r\n return CompositeFilter.create(filter.compositeFilter.filters.map(filter => fromFilter(filter)), fromCompositeOperatorName(filter.compositeFilter.op));\r\n}\r\nfunction toDocumentMask(fieldMask) {\r\n const canonicalFields = [];\r\n fieldMask.fields.forEach(field => canonicalFields.push(field.canonicalString()));\r\n return {\r\n fieldPaths: canonicalFields\r\n };\r\n}\r\nfunction fromDocumentMask(proto) {\r\n const paths = proto.fieldPaths || [];\r\n return new FieldMask(paths.map(path => FieldPath$1.fromServerFormat(path)));\r\n}\r\nfunction isValidResourceName(path) {\r\n // Resource names have at least 4 components (project ID, database ID)\r\n return (path.length >= 4 &&\r\n path.get(0) === 'projects' &&\r\n path.get(2) === 'databases');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An immutable set of metadata that the local store tracks for each target.\r\n */\r\nclass TargetData {\r\n constructor(\r\n /** The target being listened to. */\r\n target, \r\n /**\r\n * The target ID to which the target corresponds; Assigned by the\r\n * LocalStore for user listens and by the SyncEngine for limbo watches.\r\n */\r\n targetId, \r\n /** The purpose of the target. */\r\n purpose, \r\n /**\r\n * The sequence number of the last transaction during which this target data\r\n * was modified.\r\n */\r\n sequenceNumber, \r\n /** The latest snapshot version seen for this target. */\r\n snapshotVersion = SnapshotVersion.min(), \r\n /**\r\n * The maximum snapshot version at which the associated view\r\n * contained no limbo documents.\r\n */\r\n lastLimboFreeSnapshotVersion = SnapshotVersion.min(), \r\n /**\r\n * An opaque, server-assigned token that allows watching a target to be\r\n * resumed after disconnecting without retransmitting all the data that\r\n * matches the target. The resume token essentially identifies a point in\r\n * time from which the server should resume sending results.\r\n */\r\n resumeToken = ByteString.EMPTY_BYTE_STRING) {\r\n this.target = target;\r\n this.targetId = targetId;\r\n this.purpose = purpose;\r\n this.sequenceNumber = sequenceNumber;\r\n this.snapshotVersion = snapshotVersion;\r\n this.lastLimboFreeSnapshotVersion = lastLimboFreeSnapshotVersion;\r\n this.resumeToken = resumeToken;\r\n }\r\n /** Creates a new target data instance with an updated sequence number. */\r\n withSequenceNumber(sequenceNumber) {\r\n return new TargetData(this.target, this.targetId, this.purpose, sequenceNumber, this.snapshotVersion, this.lastLimboFreeSnapshotVersion, this.resumeToken);\r\n }\r\n /**\r\n * Creates a new target data instance with an updated resume token and\r\n * snapshot version.\r\n */\r\n withResumeToken(resumeToken, snapshotVersion) {\r\n return new TargetData(this.target, this.targetId, this.purpose, this.sequenceNumber, snapshotVersion, this.lastLimboFreeSnapshotVersion, resumeToken);\r\n }\r\n /**\r\n * Creates a new target data instance with an updated last limbo free\r\n * snapshot version number.\r\n */\r\n withLastLimboFreeSnapshotVersion(lastLimboFreeSnapshotVersion) {\r\n return new TargetData(this.target, this.targetId, this.purpose, this.sequenceNumber, this.snapshotVersion, lastLimboFreeSnapshotVersion, this.resumeToken);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Serializer for values stored in the LocalStore. */\r\nclass LocalSerializer {\r\n constructor(remoteSerializer) {\r\n this.remoteSerializer = remoteSerializer;\r\n }\r\n}\r\n/** Decodes a remote document from storage locally to a Document. */\r\nfunction fromDbRemoteDocument(localSerializer, remoteDoc) {\r\n let doc;\r\n if (remoteDoc.document) {\r\n doc = fromDocument(localSerializer.remoteSerializer, remoteDoc.document, !!remoteDoc.hasCommittedMutations);\r\n }\r\n else if (remoteDoc.noDocument) {\r\n const key = DocumentKey.fromSegments(remoteDoc.noDocument.path);\r\n const version = fromDbTimestamp(remoteDoc.noDocument.readTime);\r\n doc = MutableDocument.newNoDocument(key, version);\r\n if (remoteDoc.hasCommittedMutations) {\r\n doc.setHasCommittedMutations();\r\n }\r\n }\r\n else if (remoteDoc.unknownDocument) {\r\n const key = DocumentKey.fromSegments(remoteDoc.unknownDocument.path);\r\n const version = fromDbTimestamp(remoteDoc.unknownDocument.version);\r\n doc = MutableDocument.newUnknownDocument(key, version);\r\n }\r\n else {\r\n return fail();\r\n }\r\n if (remoteDoc.readTime) {\r\n doc.setReadTime(fromDbTimestampKey(remoteDoc.readTime));\r\n }\r\n return doc;\r\n}\r\n/** Encodes a document for storage locally. */\r\nfunction toDbRemoteDocument(localSerializer, document) {\r\n const key = document.key;\r\n const remoteDoc = {\r\n prefixPath: key.getCollectionPath().popLast().toArray(),\r\n collectionGroup: key.collectionGroup,\r\n documentId: key.path.lastSegment(),\r\n readTime: toDbTimestampKey(document.readTime),\r\n hasCommittedMutations: document.hasCommittedMutations\r\n };\r\n if (document.isFoundDocument()) {\r\n remoteDoc.document = toDocument(localSerializer.remoteSerializer, document);\r\n }\r\n else if (document.isNoDocument()) {\r\n remoteDoc.noDocument = {\r\n path: key.path.toArray(),\r\n readTime: toDbTimestamp(document.version)\r\n };\r\n }\r\n else if (document.isUnknownDocument()) {\r\n remoteDoc.unknownDocument = {\r\n path: key.path.toArray(),\r\n version: toDbTimestamp(document.version)\r\n };\r\n }\r\n else {\r\n return fail();\r\n }\r\n return remoteDoc;\r\n}\r\nfunction toDbTimestampKey(snapshotVersion) {\r\n const timestamp = snapshotVersion.toTimestamp();\r\n return [timestamp.seconds, timestamp.nanoseconds];\r\n}\r\nfunction fromDbTimestampKey(dbTimestampKey) {\r\n const timestamp = new Timestamp(dbTimestampKey[0], dbTimestampKey[1]);\r\n return SnapshotVersion.fromTimestamp(timestamp);\r\n}\r\nfunction toDbTimestamp(snapshotVersion) {\r\n const timestamp = snapshotVersion.toTimestamp();\r\n return { seconds: timestamp.seconds, nanoseconds: timestamp.nanoseconds };\r\n}\r\nfunction fromDbTimestamp(dbTimestamp) {\r\n const timestamp = new Timestamp(dbTimestamp.seconds, dbTimestamp.nanoseconds);\r\n return SnapshotVersion.fromTimestamp(timestamp);\r\n}\r\n/** Encodes a batch of mutations into a DbMutationBatch for local storage. */\r\nfunction toDbMutationBatch(localSerializer, userId, batch) {\r\n const serializedBaseMutations = batch.baseMutations.map(m => toMutation(localSerializer.remoteSerializer, m));\r\n const serializedMutations = batch.mutations.map(m => toMutation(localSerializer.remoteSerializer, m));\r\n return {\r\n userId,\r\n batchId: batch.batchId,\r\n localWriteTimeMs: batch.localWriteTime.toMillis(),\r\n baseMutations: serializedBaseMutations,\r\n mutations: serializedMutations\r\n };\r\n}\r\n/** Decodes a DbMutationBatch into a MutationBatch */\r\nfunction fromDbMutationBatch(localSerializer, dbBatch) {\r\n const baseMutations = (dbBatch.baseMutations || []).map(m => fromMutation(localSerializer.remoteSerializer, m));\r\n // Squash old transform mutations into existing patch or set mutations.\r\n // The replacement of representing `transforms` with `update_transforms`\r\n // on the SDK means that old `transform` mutations stored in IndexedDB need\r\n // to be updated to `update_transforms`.\r\n // TODO(b/174608374): Remove this code once we perform a schema migration.\r\n for (let i = 0; i < dbBatch.mutations.length - 1; ++i) {\r\n const currentMutation = dbBatch.mutations[i];\r\n const hasTransform = i + 1 < dbBatch.mutations.length &&\r\n dbBatch.mutations[i + 1].transform !== undefined;\r\n if (hasTransform) {\r\n const transformMutation = dbBatch.mutations[i + 1];\r\n currentMutation.updateTransforms =\r\n transformMutation.transform.fieldTransforms;\r\n dbBatch.mutations.splice(i + 1, 1);\r\n ++i;\r\n }\r\n }\r\n const mutations = dbBatch.mutations.map(m => fromMutation(localSerializer.remoteSerializer, m));\r\n const timestamp = Timestamp.fromMillis(dbBatch.localWriteTimeMs);\r\n return new MutationBatch(dbBatch.batchId, timestamp, baseMutations, mutations);\r\n}\r\n/** Decodes a DbTarget into TargetData */\r\nfunction fromDbTarget(dbTarget) {\r\n const version = fromDbTimestamp(dbTarget.readTime);\r\n const lastLimboFreeSnapshotVersion = dbTarget.lastLimboFreeSnapshotVersion !== undefined\r\n ? fromDbTimestamp(dbTarget.lastLimboFreeSnapshotVersion)\r\n : SnapshotVersion.min();\r\n let target;\r\n if (isDocumentQuery(dbTarget.query)) {\r\n target = fromDocumentsTarget(dbTarget.query);\r\n }\r\n else {\r\n target = fromQueryTarget(dbTarget.query);\r\n }\r\n return new TargetData(target, dbTarget.targetId, 0 /* TargetPurpose.Listen */, dbTarget.lastListenSequenceNumber, version, lastLimboFreeSnapshotVersion, ByteString.fromBase64String(dbTarget.resumeToken));\r\n}\r\n/** Encodes TargetData into a DbTarget for storage locally. */\r\nfunction toDbTarget(localSerializer, targetData) {\r\n const dbTimestamp = toDbTimestamp(targetData.snapshotVersion);\r\n const dbLastLimboFreeTimestamp = toDbTimestamp(targetData.lastLimboFreeSnapshotVersion);\r\n let queryProto;\r\n if (targetIsDocumentTarget(targetData.target)) {\r\n queryProto = toDocumentsTarget(localSerializer.remoteSerializer, targetData.target);\r\n }\r\n else {\r\n queryProto = toQueryTarget(localSerializer.remoteSerializer, targetData.target);\r\n }\r\n // We can't store the resumeToken as a ByteString in IndexedDb, so we\r\n // convert it to a base64 string for storage.\r\n const resumeToken = targetData.resumeToken.toBase64();\r\n // lastListenSequenceNumber is always 0 until we do real GC.\r\n return {\r\n targetId: targetData.targetId,\r\n canonicalId: canonifyTarget(targetData.target),\r\n readTime: dbTimestamp,\r\n resumeToken,\r\n lastListenSequenceNumber: targetData.sequenceNumber,\r\n lastLimboFreeSnapshotVersion: dbLastLimboFreeTimestamp,\r\n query: queryProto\r\n };\r\n}\r\n/**\r\n * A helper function for figuring out what kind of query has been stored.\r\n */\r\nfunction isDocumentQuery(dbQuery) {\r\n return dbQuery.documents !== undefined;\r\n}\r\n/** Encodes a DbBundle to a BundleMetadata object. */\r\nfunction fromDbBundle(dbBundle) {\r\n return {\r\n id: dbBundle.bundleId,\r\n createTime: fromDbTimestamp(dbBundle.createTime),\r\n version: dbBundle.version\r\n };\r\n}\r\n/** Encodes a BundleMetadata to a DbBundle. */\r\nfunction toDbBundle(metadata) {\r\n return {\r\n bundleId: metadata.id,\r\n createTime: toDbTimestamp(fromVersion(metadata.createTime)),\r\n version: metadata.version\r\n };\r\n}\r\n/** Encodes a DbNamedQuery to a NamedQuery. */\r\nfunction fromDbNamedQuery(dbNamedQuery) {\r\n return {\r\n name: dbNamedQuery.name,\r\n query: fromBundledQuery(dbNamedQuery.bundledQuery),\r\n readTime: fromDbTimestamp(dbNamedQuery.readTime)\r\n };\r\n}\r\n/** Encodes a NamedQuery from a bundle proto to a DbNamedQuery. */\r\nfunction toDbNamedQuery(query) {\r\n return {\r\n name: query.name,\r\n readTime: toDbTimestamp(fromVersion(query.readTime)),\r\n bundledQuery: query.bundledQuery\r\n };\r\n}\r\n/**\r\n * Encodes a `BundledQuery` from bundle proto to a Query object.\r\n *\r\n * This reconstructs the original query used to build the bundle being loaded,\r\n * including features exists only in SDKs (for example: limit-to-last).\r\n */\r\nfunction fromBundledQuery(bundledQuery) {\r\n const query = convertQueryTargetToQuery({\r\n parent: bundledQuery.parent,\r\n structuredQuery: bundledQuery.structuredQuery\r\n });\r\n if (bundledQuery.limitType === 'LAST') {\r\n return queryWithLimit(query, query.limit, \"L\" /* LimitType.Last */);\r\n }\r\n return query;\r\n}\r\n/** Encodes a NamedQuery proto object to a NamedQuery model object. */\r\nfunction fromProtoNamedQuery(namedQuery) {\r\n return {\r\n name: namedQuery.name,\r\n query: fromBundledQuery(namedQuery.bundledQuery),\r\n readTime: fromVersion(namedQuery.readTime)\r\n };\r\n}\r\n/** Decodes a BundleMetadata proto into a BundleMetadata object. */\r\nfunction fromBundleMetadata(metadata) {\r\n return {\r\n id: metadata.id,\r\n version: metadata.version,\r\n createTime: fromVersion(metadata.createTime)\r\n };\r\n}\r\n/** Encodes a DbDocumentOverlay object to an Overlay model object. */\r\nfunction fromDbDocumentOverlay(localSerializer, dbDocumentOverlay) {\r\n return new Overlay(dbDocumentOverlay.largestBatchId, fromMutation(localSerializer.remoteSerializer, dbDocumentOverlay.overlayMutation));\r\n}\r\n/** Decodes an Overlay model object into a DbDocumentOverlay object. */\r\nfunction toDbDocumentOverlay(localSerializer, userId, overlay) {\r\n const [_, collectionPath, documentId] = toDbDocumentOverlayKey(userId, overlay.mutation.key);\r\n return {\r\n userId,\r\n collectionPath,\r\n documentId,\r\n collectionGroup: overlay.mutation.key.getCollectionGroup(),\r\n largestBatchId: overlay.largestBatchId,\r\n overlayMutation: toMutation(localSerializer.remoteSerializer, overlay.mutation)\r\n };\r\n}\r\n/**\r\n * Returns the DbDocumentOverlayKey corresponding to the given user and\r\n * document key.\r\n */\r\nfunction toDbDocumentOverlayKey(userId, docKey) {\r\n const docId = docKey.path.lastSegment();\r\n const collectionPath = encodeResourcePath(docKey.path.popLast());\r\n return [userId, collectionPath, docId];\r\n}\r\nfunction toDbIndexConfiguration(index) {\r\n return {\r\n indexId: index.indexId,\r\n collectionGroup: index.collectionGroup,\r\n fields: index.fields.map(s => [s.fieldPath.canonicalString(), s.kind])\r\n };\r\n}\r\nfunction fromDbIndexConfiguration(index, state) {\r\n const decodedState = state\r\n ? new IndexState(state.sequenceNumber, new IndexOffset(fromDbTimestamp(state.readTime), new DocumentKey(decodeResourcePath(state.documentKey)), state.largestBatchId))\r\n : IndexState.empty();\r\n const decodedSegments = index.fields.map(([fieldPath, kind]) => new IndexSegment(FieldPath$1.fromServerFormat(fieldPath), kind));\r\n return new FieldIndex(index.indexId, index.collectionGroup, decodedSegments, decodedState);\r\n}\r\nfunction toDbIndexState(indexId, user, sequenceNumber, offset) {\r\n return {\r\n indexId,\r\n uid: user.uid || '',\r\n sequenceNumber,\r\n readTime: toDbTimestamp(offset.readTime),\r\n documentKey: encodeResourcePath(offset.documentKey.path),\r\n largestBatchId: offset.largestBatchId\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass IndexedDbBundleCache {\r\n getBundleMetadata(transaction, bundleId) {\r\n return bundlesStore(transaction)\r\n .get(bundleId)\r\n .next(bundle => {\r\n if (bundle) {\r\n return fromDbBundle(bundle);\r\n }\r\n return undefined;\r\n });\r\n }\r\n saveBundleMetadata(transaction, bundleMetadata) {\r\n return bundlesStore(transaction).put(toDbBundle(bundleMetadata));\r\n }\r\n getNamedQuery(transaction, queryName) {\r\n return namedQueriesStore(transaction)\r\n .get(queryName)\r\n .next(query => {\r\n if (query) {\r\n return fromDbNamedQuery(query);\r\n }\r\n return undefined;\r\n });\r\n }\r\n saveNamedQuery(transaction, query) {\r\n return namedQueriesStore(transaction).put(toDbNamedQuery(query));\r\n }\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the bundles object store.\r\n */\r\nfunction bundlesStore(txn) {\r\n return getStore(txn, DbBundleStore);\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the namedQueries object store.\r\n */\r\nfunction namedQueriesStore(txn) {\r\n return getStore(txn, DbNamedQueryStore);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Implementation of DocumentOverlayCache using IndexedDb.\r\n */\r\nclass IndexedDbDocumentOverlayCache {\r\n /**\r\n * @param serializer - The document serializer.\r\n * @param userId - The userId for which we are accessing overlays.\r\n */\r\n constructor(serializer, userId) {\r\n this.serializer = serializer;\r\n this.userId = userId;\r\n }\r\n static forUser(serializer, user) {\r\n const userId = user.uid || '';\r\n return new IndexedDbDocumentOverlayCache(serializer, userId);\r\n }\r\n getOverlay(transaction, key) {\r\n return documentOverlayStore(transaction)\r\n .get(toDbDocumentOverlayKey(this.userId, key))\r\n .next(dbOverlay => {\r\n if (dbOverlay) {\r\n return fromDbDocumentOverlay(this.serializer, dbOverlay);\r\n }\r\n return null;\r\n });\r\n }\r\n getOverlays(transaction, keys) {\r\n const result = newOverlayMap();\r\n return PersistencePromise.forEach(keys, (key) => {\r\n return this.getOverlay(transaction, key).next(overlay => {\r\n if (overlay !== null) {\r\n result.set(key, overlay);\r\n }\r\n });\r\n }).next(() => result);\r\n }\r\n saveOverlays(transaction, largestBatchId, overlays) {\r\n const promises = [];\r\n overlays.forEach((_, mutation) => {\r\n const overlay = new Overlay(largestBatchId, mutation);\r\n promises.push(this.saveOverlay(transaction, overlay));\r\n });\r\n return PersistencePromise.waitFor(promises);\r\n }\r\n removeOverlaysForBatchId(transaction, documentKeys, batchId) {\r\n const collectionPaths = new Set();\r\n // Get the set of unique collection paths.\r\n documentKeys.forEach(key => collectionPaths.add(encodeResourcePath(key.getCollectionPath())));\r\n const promises = [];\r\n collectionPaths.forEach(collectionPath => {\r\n const range = IDBKeyRange.bound([this.userId, collectionPath, batchId], [this.userId, collectionPath, batchId + 1], \r\n /*lowerOpen=*/ false, \r\n /*upperOpen=*/ true);\r\n promises.push(documentOverlayStore(transaction).deleteAll(DbDocumentOverlayCollectionPathOverlayIndex, range));\r\n });\r\n return PersistencePromise.waitFor(promises);\r\n }\r\n getOverlaysForCollection(transaction, collection, sinceBatchId) {\r\n const result = newOverlayMap();\r\n const collectionPath = encodeResourcePath(collection);\r\n // We want batch IDs larger than `sinceBatchId`, and so the lower bound\r\n // is not inclusive.\r\n const range = IDBKeyRange.bound([this.userId, collectionPath, sinceBatchId], [this.userId, collectionPath, Number.POSITIVE_INFINITY], \r\n /*lowerOpen=*/ true);\r\n return documentOverlayStore(transaction)\r\n .loadAll(DbDocumentOverlayCollectionPathOverlayIndex, range)\r\n .next(dbOverlays => {\r\n for (const dbOverlay of dbOverlays) {\r\n const overlay = fromDbDocumentOverlay(this.serializer, dbOverlay);\r\n result.set(overlay.getKey(), overlay);\r\n }\r\n return result;\r\n });\r\n }\r\n getOverlaysForCollectionGroup(transaction, collectionGroup, sinceBatchId, count) {\r\n const result = newOverlayMap();\r\n let currentBatchId = undefined;\r\n // We want batch IDs larger than `sinceBatchId`, and so the lower bound\r\n // is not inclusive.\r\n const range = IDBKeyRange.bound([this.userId, collectionGroup, sinceBatchId], [this.userId, collectionGroup, Number.POSITIVE_INFINITY], \r\n /*lowerOpen=*/ true);\r\n return documentOverlayStore(transaction)\r\n .iterate({\r\n index: DbDocumentOverlayCollectionGroupOverlayIndex,\r\n range\r\n }, (_, dbOverlay, control) => {\r\n // We do not want to return partial batch overlays, even if the size\r\n // of the result set exceeds the given `count` argument. Therefore, we\r\n // continue to aggregate results even after the result size exceeds\r\n // `count` if there are more overlays from the `currentBatchId`.\r\n const overlay = fromDbDocumentOverlay(this.serializer, dbOverlay);\r\n if (result.size() < count ||\r\n overlay.largestBatchId === currentBatchId) {\r\n result.set(overlay.getKey(), overlay);\r\n currentBatchId = overlay.largestBatchId;\r\n }\r\n else {\r\n control.done();\r\n }\r\n })\r\n .next(() => result);\r\n }\r\n saveOverlay(transaction, overlay) {\r\n return documentOverlayStore(transaction).put(toDbDocumentOverlay(this.serializer, this.userId, overlay));\r\n }\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the document overlay object store.\r\n */\r\nfunction documentOverlayStore(txn) {\r\n return getStore(txn, DbDocumentOverlayStore);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Note: This code is copied from the backend. Code that is not used by\r\n// Firestore was removed.\r\nconst INDEX_TYPE_NULL = 5;\r\nconst INDEX_TYPE_BOOLEAN = 10;\r\nconst INDEX_TYPE_NAN = 13;\r\nconst INDEX_TYPE_NUMBER = 15;\r\nconst INDEX_TYPE_TIMESTAMP = 20;\r\nconst INDEX_TYPE_STRING = 25;\r\nconst INDEX_TYPE_BLOB = 30;\r\nconst INDEX_TYPE_REFERENCE = 37;\r\nconst INDEX_TYPE_GEOPOINT = 45;\r\nconst INDEX_TYPE_ARRAY = 50;\r\nconst INDEX_TYPE_MAP = 55;\r\nconst INDEX_TYPE_REFERENCE_SEGMENT = 60;\r\n// A terminator that indicates that a truncatable value was not truncated.\r\n// This must be smaller than all other type labels.\r\nconst NOT_TRUNCATED = 2;\r\n/** Firestore index value writer. */\r\nclass FirestoreIndexValueWriter {\r\n constructor() { }\r\n // The write methods below short-circuit writing terminators for values\r\n // containing a (terminating) truncated value.\r\n //\r\n // As an example, consider the resulting encoding for:\r\n //\r\n // [\"bar\", [2, \"foo\"]] -> (STRING, \"bar\", TERM, ARRAY, NUMBER, 2, STRING, \"foo\", TERM, TERM, TERM)\r\n // [\"bar\", [2, truncated(\"foo\")]] -> (STRING, \"bar\", TERM, ARRAY, NUMBER, 2, STRING, \"foo\", TRUNC)\r\n // [\"bar\", truncated([\"foo\"])] -> (STRING, \"bar\", TERM, ARRAY. STRING, \"foo\", TERM, TRUNC)\r\n /** Writes an index value. */\r\n writeIndexValue(value, encoder) {\r\n this.writeIndexValueAux(value, encoder);\r\n // Write separator to split index values\r\n // (see go/firestore-storage-format#encodings).\r\n encoder.writeInfinity();\r\n }\r\n writeIndexValueAux(indexValue, encoder) {\r\n if ('nullValue' in indexValue) {\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_NULL);\r\n }\r\n else if ('booleanValue' in indexValue) {\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_BOOLEAN);\r\n encoder.writeNumber(indexValue.booleanValue ? 1 : 0);\r\n }\r\n else if ('integerValue' in indexValue) {\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_NUMBER);\r\n encoder.writeNumber(normalizeNumber(indexValue.integerValue));\r\n }\r\n else if ('doubleValue' in indexValue) {\r\n const n = normalizeNumber(indexValue.doubleValue);\r\n if (isNaN(n)) {\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_NAN);\r\n }\r\n else {\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_NUMBER);\r\n if (isNegativeZero(n)) {\r\n // -0.0, 0 and 0.0 are all considered the same\r\n encoder.writeNumber(0.0);\r\n }\r\n else {\r\n encoder.writeNumber(n);\r\n }\r\n }\r\n }\r\n else if ('timestampValue' in indexValue) {\r\n const timestamp = indexValue.timestampValue;\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_TIMESTAMP);\r\n if (typeof timestamp === 'string') {\r\n encoder.writeString(timestamp);\r\n }\r\n else {\r\n encoder.writeString(`${timestamp.seconds || ''}`);\r\n encoder.writeNumber(timestamp.nanos || 0);\r\n }\r\n }\r\n else if ('stringValue' in indexValue) {\r\n this.writeIndexString(indexValue.stringValue, encoder);\r\n this.writeTruncationMarker(encoder);\r\n }\r\n else if ('bytesValue' in indexValue) {\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_BLOB);\r\n encoder.writeBytes(normalizeByteString(indexValue.bytesValue));\r\n this.writeTruncationMarker(encoder);\r\n }\r\n else if ('referenceValue' in indexValue) {\r\n this.writeIndexEntityRef(indexValue.referenceValue, encoder);\r\n }\r\n else if ('geoPointValue' in indexValue) {\r\n const geoPoint = indexValue.geoPointValue;\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_GEOPOINT);\r\n encoder.writeNumber(geoPoint.latitude || 0);\r\n encoder.writeNumber(geoPoint.longitude || 0);\r\n }\r\n else if ('mapValue' in indexValue) {\r\n if (isMaxValue(indexValue)) {\r\n this.writeValueTypeLabel(encoder, Number.MAX_SAFE_INTEGER);\r\n }\r\n else {\r\n this.writeIndexMap(indexValue.mapValue, encoder);\r\n this.writeTruncationMarker(encoder);\r\n }\r\n }\r\n else if ('arrayValue' in indexValue) {\r\n this.writeIndexArray(indexValue.arrayValue, encoder);\r\n this.writeTruncationMarker(encoder);\r\n }\r\n else {\r\n fail();\r\n }\r\n }\r\n writeIndexString(stringIndexValue, encoder) {\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_STRING);\r\n this.writeUnlabeledIndexString(stringIndexValue, encoder);\r\n }\r\n writeUnlabeledIndexString(stringIndexValue, encoder) {\r\n encoder.writeString(stringIndexValue);\r\n }\r\n writeIndexMap(mapIndexValue, encoder) {\r\n const map = mapIndexValue.fields || {};\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_MAP);\r\n for (const key of Object.keys(map)) {\r\n this.writeIndexString(key, encoder);\r\n this.writeIndexValueAux(map[key], encoder);\r\n }\r\n }\r\n writeIndexArray(arrayIndexValue, encoder) {\r\n const values = arrayIndexValue.values || [];\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_ARRAY);\r\n for (const element of values) {\r\n this.writeIndexValueAux(element, encoder);\r\n }\r\n }\r\n writeIndexEntityRef(referenceValue, encoder) {\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_REFERENCE);\r\n const path = DocumentKey.fromName(referenceValue).path;\r\n path.forEach(segment => {\r\n this.writeValueTypeLabel(encoder, INDEX_TYPE_REFERENCE_SEGMENT);\r\n this.writeUnlabeledIndexString(segment, encoder);\r\n });\r\n }\r\n writeValueTypeLabel(encoder, typeOrder) {\r\n encoder.writeNumber(typeOrder);\r\n }\r\n writeTruncationMarker(encoder) {\r\n // While the SDK does not implement truncation, the truncation marker is\r\n // used to terminate all variable length values (which are strings, bytes,\r\n // references, arrays and maps).\r\n encoder.writeNumber(NOT_TRUNCATED);\r\n }\r\n}\r\nFirestoreIndexValueWriter.INSTANCE = new FirestoreIndexValueWriter();\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law | agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES | CONDITIONS OF ANY KIND, either express | implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** These constants are taken from the backend. */\r\nconst MIN_SURROGATE = '\\uD800';\r\nconst MAX_SURROGATE = '\\uDBFF';\r\nconst ESCAPE1 = 0x00;\r\nconst NULL_BYTE = 0xff; // Combined with ESCAPE1\r\nconst SEPARATOR = 0x01; // Combined with ESCAPE1\r\nconst ESCAPE2 = 0xff;\r\nconst INFINITY = 0xff; // Combined with ESCAPE2\r\nconst FF_BYTE = 0x00; // Combined with ESCAPE2\r\nconst LONG_SIZE = 64;\r\nconst BYTE_SIZE = 8;\r\n/**\r\n * The default size of the buffer. This is arbitrary, but likely larger than\r\n * most index values so that less copies of the underlying buffer will be made.\r\n * For large values, a single copy will made to double the buffer length.\r\n */\r\nconst DEFAULT_BUFFER_SIZE = 1024;\r\n/** Converts a JavaScript number to a byte array (using big endian encoding). */\r\nfunction doubleToLongBits(value) {\r\n const dv = new DataView(new ArrayBuffer(8));\r\n dv.setFloat64(0, value, /* littleEndian= */ false);\r\n return new Uint8Array(dv.buffer);\r\n}\r\n/**\r\n * Counts the number of zeros in a byte.\r\n *\r\n * Visible for testing.\r\n */\r\nfunction numberOfLeadingZerosInByte(x) {\r\n if (x === 0) {\r\n return 8;\r\n }\r\n let zeros = 0;\r\n if (x >> 4 === 0) {\r\n // Test if the first four bits are zero.\r\n zeros += 4;\r\n x = x << 4;\r\n }\r\n if (x >> 6 === 0) {\r\n // Test if the first two (or next two) bits are zero.\r\n zeros += 2;\r\n x = x << 2;\r\n }\r\n if (x >> 7 === 0) {\r\n // Test if the remaining bit is zero.\r\n zeros += 1;\r\n }\r\n return zeros;\r\n}\r\n/** Counts the number of leading zeros in the given byte array. */\r\nfunction numberOfLeadingZeros(bytes) {\r\n let leadingZeros = 0;\r\n for (let i = 0; i < 8; ++i) {\r\n const zeros = numberOfLeadingZerosInByte(bytes[i] & 0xff);\r\n leadingZeros += zeros;\r\n if (zeros !== 8) {\r\n break;\r\n }\r\n }\r\n return leadingZeros;\r\n}\r\n/**\r\n * Returns the number of bytes required to store \"value\". Leading zero bytes\r\n * are skipped.\r\n */\r\nfunction unsignedNumLength(value) {\r\n // This is just the number of bytes for the unsigned representation of the number.\r\n const numBits = LONG_SIZE - numberOfLeadingZeros(value);\r\n return Math.ceil(numBits / BYTE_SIZE);\r\n}\r\n/**\r\n * OrderedCodeWriter is a minimal-allocation implementation of the writing\r\n * behavior defined by the backend.\r\n *\r\n * The code is ported from its Java counterpart.\r\n */\r\nclass OrderedCodeWriter {\r\n constructor() {\r\n this.buffer = new Uint8Array(DEFAULT_BUFFER_SIZE);\r\n this.position = 0;\r\n }\r\n writeBytesAscending(value) {\r\n const it = value[Symbol.iterator]();\r\n let byte = it.next();\r\n while (!byte.done) {\r\n this.writeByteAscending(byte.value);\r\n byte = it.next();\r\n }\r\n this.writeSeparatorAscending();\r\n }\r\n writeBytesDescending(value) {\r\n const it = value[Symbol.iterator]();\r\n let byte = it.next();\r\n while (!byte.done) {\r\n this.writeByteDescending(byte.value);\r\n byte = it.next();\r\n }\r\n this.writeSeparatorDescending();\r\n }\r\n /** Writes utf8 bytes into this byte sequence, ascending. */\r\n writeUtf8Ascending(sequence) {\r\n for (const c of sequence) {\r\n const charCode = c.charCodeAt(0);\r\n if (charCode < 0x80) {\r\n this.writeByteAscending(charCode);\r\n }\r\n else if (charCode < 0x800) {\r\n this.writeByteAscending((0x0f << 6) | (charCode >>> 6));\r\n this.writeByteAscending(0x80 | (0x3f & charCode));\r\n }\r\n else if (c < MIN_SURROGATE || MAX_SURROGATE < c) {\r\n this.writeByteAscending((0x0f << 5) | (charCode >>> 12));\r\n this.writeByteAscending(0x80 | (0x3f & (charCode >>> 6)));\r\n this.writeByteAscending(0x80 | (0x3f & charCode));\r\n }\r\n else {\r\n const codePoint = c.codePointAt(0);\r\n this.writeByteAscending((0x0f << 4) | (codePoint >>> 18));\r\n this.writeByteAscending(0x80 | (0x3f & (codePoint >>> 12)));\r\n this.writeByteAscending(0x80 | (0x3f & (codePoint >>> 6)));\r\n this.writeByteAscending(0x80 | (0x3f & codePoint));\r\n }\r\n }\r\n this.writeSeparatorAscending();\r\n }\r\n /** Writes utf8 bytes into this byte sequence, descending */\r\n writeUtf8Descending(sequence) {\r\n for (const c of sequence) {\r\n const charCode = c.charCodeAt(0);\r\n if (charCode < 0x80) {\r\n this.writeByteDescending(charCode);\r\n }\r\n else if (charCode < 0x800) {\r\n this.writeByteDescending((0x0f << 6) | (charCode >>> 6));\r\n this.writeByteDescending(0x80 | (0x3f & charCode));\r\n }\r\n else if (c < MIN_SURROGATE || MAX_SURROGATE < c) {\r\n this.writeByteDescending((0x0f << 5) | (charCode >>> 12));\r\n this.writeByteDescending(0x80 | (0x3f & (charCode >>> 6)));\r\n this.writeByteDescending(0x80 | (0x3f & charCode));\r\n }\r\n else {\r\n const codePoint = c.codePointAt(0);\r\n this.writeByteDescending((0x0f << 4) | (codePoint >>> 18));\r\n this.writeByteDescending(0x80 | (0x3f & (codePoint >>> 12)));\r\n this.writeByteDescending(0x80 | (0x3f & (codePoint >>> 6)));\r\n this.writeByteDescending(0x80 | (0x3f & codePoint));\r\n }\r\n }\r\n this.writeSeparatorDescending();\r\n }\r\n writeNumberAscending(val) {\r\n // Values are encoded with a single byte length prefix, followed by the\r\n // actual value in big-endian format with leading 0 bytes dropped.\r\n const value = this.toOrderedBits(val);\r\n const len = unsignedNumLength(value);\r\n this.ensureAvailable(1 + len);\r\n this.buffer[this.position++] = len & 0xff; // Write the length\r\n for (let i = value.length - len; i < value.length; ++i) {\r\n this.buffer[this.position++] = value[i] & 0xff;\r\n }\r\n }\r\n writeNumberDescending(val) {\r\n // Values are encoded with a single byte length prefix, followed by the\r\n // inverted value in big-endian format with leading 0 bytes dropped.\r\n const value = this.toOrderedBits(val);\r\n const len = unsignedNumLength(value);\r\n this.ensureAvailable(1 + len);\r\n this.buffer[this.position++] = ~(len & 0xff); // Write the length\r\n for (let i = value.length - len; i < value.length; ++i) {\r\n this.buffer[this.position++] = ~(value[i] & 0xff);\r\n }\r\n }\r\n /**\r\n * Writes the \"infinity\" byte sequence that sorts after all other byte\r\n * sequences written in ascending order.\r\n */\r\n writeInfinityAscending() {\r\n this.writeEscapedByteAscending(ESCAPE2);\r\n this.writeEscapedByteAscending(INFINITY);\r\n }\r\n /**\r\n * Writes the \"infinity\" byte sequence that sorts before all other byte\r\n * sequences written in descending order.\r\n */\r\n writeInfinityDescending() {\r\n this.writeEscapedByteDescending(ESCAPE2);\r\n this.writeEscapedByteDescending(INFINITY);\r\n }\r\n /**\r\n * Resets the buffer such that it is the same as when it was newly\r\n * constructed.\r\n */\r\n reset() {\r\n this.position = 0;\r\n }\r\n seed(encodedBytes) {\r\n this.ensureAvailable(encodedBytes.length);\r\n this.buffer.set(encodedBytes, this.position);\r\n this.position += encodedBytes.length;\r\n }\r\n /** Makes a copy of the encoded bytes in this buffer. */\r\n encodedBytes() {\r\n return this.buffer.slice(0, this.position);\r\n }\r\n /**\r\n * Encodes `val` into an encoding so that the order matches the IEEE 754\r\n * floating-point comparison results with the following exceptions:\r\n * -0.0 < 0.0\r\n * all non-NaN < NaN\r\n * NaN = NaN\r\n */\r\n toOrderedBits(val) {\r\n const value = doubleToLongBits(val);\r\n // Check if the first bit is set. We use a bit mask since value[0] is\r\n // encoded as a number from 0 to 255.\r\n const isNegative = (value[0] & 0x80) !== 0;\r\n // Revert the two complement to get natural ordering\r\n value[0] ^= isNegative ? 0xff : 0x80;\r\n for (let i = 1; i < value.length; ++i) {\r\n value[i] ^= isNegative ? 0xff : 0x00;\r\n }\r\n return value;\r\n }\r\n /** Writes a single byte ascending to the buffer. */\r\n writeByteAscending(b) {\r\n const masked = b & 0xff;\r\n if (masked === ESCAPE1) {\r\n this.writeEscapedByteAscending(ESCAPE1);\r\n this.writeEscapedByteAscending(NULL_BYTE);\r\n }\r\n else if (masked === ESCAPE2) {\r\n this.writeEscapedByteAscending(ESCAPE2);\r\n this.writeEscapedByteAscending(FF_BYTE);\r\n }\r\n else {\r\n this.writeEscapedByteAscending(masked);\r\n }\r\n }\r\n /** Writes a single byte descending to the buffer. */\r\n writeByteDescending(b) {\r\n const masked = b & 0xff;\r\n if (masked === ESCAPE1) {\r\n this.writeEscapedByteDescending(ESCAPE1);\r\n this.writeEscapedByteDescending(NULL_BYTE);\r\n }\r\n else if (masked === ESCAPE2) {\r\n this.writeEscapedByteDescending(ESCAPE2);\r\n this.writeEscapedByteDescending(FF_BYTE);\r\n }\r\n else {\r\n this.writeEscapedByteDescending(b);\r\n }\r\n }\r\n writeSeparatorAscending() {\r\n this.writeEscapedByteAscending(ESCAPE1);\r\n this.writeEscapedByteAscending(SEPARATOR);\r\n }\r\n writeSeparatorDescending() {\r\n this.writeEscapedByteDescending(ESCAPE1);\r\n this.writeEscapedByteDescending(SEPARATOR);\r\n }\r\n writeEscapedByteAscending(b) {\r\n this.ensureAvailable(1);\r\n this.buffer[this.position++] = b;\r\n }\r\n writeEscapedByteDescending(b) {\r\n this.ensureAvailable(1);\r\n this.buffer[this.position++] = ~b;\r\n }\r\n ensureAvailable(bytes) {\r\n const minCapacity = bytes + this.position;\r\n if (minCapacity <= this.buffer.length) {\r\n return;\r\n }\r\n // Try doubling.\r\n let newLength = this.buffer.length * 2;\r\n // Still not big enough? Just allocate the right size.\r\n if (newLength < minCapacity) {\r\n newLength = minCapacity;\r\n }\r\n // Create the new buffer.\r\n const newBuffer = new Uint8Array(newLength);\r\n newBuffer.set(this.buffer); // copy old data\r\n this.buffer = newBuffer;\r\n }\r\n}\n\nclass AscendingIndexByteEncoder {\r\n constructor(orderedCode) {\r\n this.orderedCode = orderedCode;\r\n }\r\n writeBytes(value) {\r\n this.orderedCode.writeBytesAscending(value);\r\n }\r\n writeString(value) {\r\n this.orderedCode.writeUtf8Ascending(value);\r\n }\r\n writeNumber(value) {\r\n this.orderedCode.writeNumberAscending(value);\r\n }\r\n writeInfinity() {\r\n this.orderedCode.writeInfinityAscending();\r\n }\r\n}\r\nclass DescendingIndexByteEncoder {\r\n constructor(orderedCode) {\r\n this.orderedCode = orderedCode;\r\n }\r\n writeBytes(value) {\r\n this.orderedCode.writeBytesDescending(value);\r\n }\r\n writeString(value) {\r\n this.orderedCode.writeUtf8Descending(value);\r\n }\r\n writeNumber(value) {\r\n this.orderedCode.writeNumberDescending(value);\r\n }\r\n writeInfinity() {\r\n this.orderedCode.writeInfinityDescending();\r\n }\r\n}\r\n/**\r\n * Implements `DirectionalIndexByteEncoder` using `OrderedCodeWriter` for the\r\n * actual encoding.\r\n */\r\nclass IndexByteEncoder {\r\n constructor() {\r\n this.orderedCode = new OrderedCodeWriter();\r\n this.ascending = new AscendingIndexByteEncoder(this.orderedCode);\r\n this.descending = new DescendingIndexByteEncoder(this.orderedCode);\r\n }\r\n seed(encodedBytes) {\r\n this.orderedCode.seed(encodedBytes);\r\n }\r\n forKind(kind) {\r\n return kind === 0 /* IndexKind.ASCENDING */ ? this.ascending : this.descending;\r\n }\r\n encodedBytes() {\r\n return this.orderedCode.encodedBytes();\r\n }\r\n reset() {\r\n this.orderedCode.reset();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Represents an index entry saved by the SDK in persisted storage. */\r\nclass IndexEntry {\r\n constructor(indexId, documentKey, arrayValue, directionalValue) {\r\n this.indexId = indexId;\r\n this.documentKey = documentKey;\r\n this.arrayValue = arrayValue;\r\n this.directionalValue = directionalValue;\r\n }\r\n /**\r\n * Returns an IndexEntry entry that sorts immediately after the current\r\n * directional value.\r\n */\r\n successor() {\r\n const currentLength = this.directionalValue.length;\r\n const newLength = currentLength === 0 || this.directionalValue[currentLength - 1] === 255\r\n ? currentLength + 1\r\n : currentLength;\r\n const successor = new Uint8Array(newLength);\r\n successor.set(this.directionalValue, 0);\r\n if (newLength !== currentLength) {\r\n successor.set([0], this.directionalValue.length);\r\n }\r\n else {\r\n ++successor[successor.length - 1];\r\n }\r\n return new IndexEntry(this.indexId, this.documentKey, this.arrayValue, successor);\r\n }\r\n}\r\nfunction indexEntryComparator(left, right) {\r\n let cmp = left.indexId - right.indexId;\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n cmp = compareByteArrays(left.arrayValue, right.arrayValue);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n cmp = compareByteArrays(left.directionalValue, right.directionalValue);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n return DocumentKey.comparator(left.documentKey, right.documentKey);\r\n}\r\nfunction compareByteArrays(left, right) {\r\n for (let i = 0; i < left.length && i < right.length; ++i) {\r\n const compare = left[i] - right[i];\r\n if (compare !== 0) {\r\n return compare;\r\n }\r\n }\r\n return left.length - right.length;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A light query planner for Firestore.\r\n *\r\n * This class matches a `FieldIndex` against a Firestore Query `Target`. It\r\n * determines whether a given index can be used to serve the specified target.\r\n *\r\n * The following table showcases some possible index configurations:\r\n *\r\n * Query | Index\r\n * -----------------------------------------------------------------------------\r\n * where('a', '==', 'a').where('b', '==', 'b') | a ASC, b DESC\r\n * where('a', '==', 'a').where('b', '==', 'b') | a ASC\r\n * where('a', '==', 'a').where('b', '==', 'b') | b DESC\r\n * where('a', '>=', 'a').orderBy('a') | a ASC\r\n * where('a', '>=', 'a').orderBy('a', 'desc') | a DESC\r\n * where('a', '>=', 'a').orderBy('a').orderBy('b') | a ASC, b ASC\r\n * where('a', '>=', 'a').orderBy('a').orderBy('b') | a ASC\r\n * where('a', 'array-contains', 'a').orderBy('b') | a CONTAINS, b ASCENDING\r\n * where('a', 'array-contains', 'a').orderBy('b') | a CONTAINS\r\n */\r\nclass TargetIndexMatcher {\r\n constructor(target) {\r\n this.collectionId =\r\n target.collectionGroup != null\r\n ? target.collectionGroup\r\n : target.path.lastSegment();\r\n this.orderBys = target.orderBy;\r\n this.equalityFilters = [];\r\n for (const filter of target.filters) {\r\n const fieldFilter = filter;\r\n if (fieldFilter.isInequality()) {\r\n this.inequalityFilter = fieldFilter;\r\n }\r\n else {\r\n this.equalityFilters.push(fieldFilter);\r\n }\r\n }\r\n }\r\n /**\r\n * Returns whether the index can be used to serve the TargetIndexMatcher's\r\n * target.\r\n *\r\n * An index is considered capable of serving the target when:\r\n * - The target uses all index segments for its filters and orderBy clauses.\r\n * The target can have additional filter and orderBy clauses, but not\r\n * fewer.\r\n * - If an ArrayContains/ArrayContainsAnyfilter is used, the index must also\r\n * have a corresponding `CONTAINS` segment.\r\n * - All directional index segments can be mapped to the target as a series of\r\n * equality filters, a single inequality filter and a series of orderBy\r\n * clauses.\r\n * - The segments that represent the equality filters may appear out of order.\r\n * - The optional segment for the inequality filter must appear after all\r\n * equality segments.\r\n * - The segments that represent that orderBy clause of the target must appear\r\n * in order after all equality and inequality segments. Single orderBy\r\n * clauses cannot be skipped, but a continuous orderBy suffix may be\r\n * omitted.\r\n */\r\n servedByIndex(index) {\r\n hardAssert(index.collectionGroup === this.collectionId);\r\n // If there is an array element, find a matching filter.\r\n const arraySegment = fieldIndexGetArraySegment(index);\r\n if (arraySegment !== undefined &&\r\n !this.hasMatchingEqualityFilter(arraySegment)) {\r\n return false;\r\n }\r\n const segments = fieldIndexGetDirectionalSegments(index);\r\n let segmentIndex = 0;\r\n let orderBysIndex = 0;\r\n // Process all equalities first. Equalities can appear out of order.\r\n for (; segmentIndex < segments.length; ++segmentIndex) {\r\n // We attempt to greedily match all segments to equality filters. If a\r\n // filter matches an index segment, we can mark the segment as used.\r\n // Since it is not possible to use the same field path in both an equality\r\n // and inequality/oderBy clause, we do not have to consider the possibility\r\n // that a matching equality segment should instead be used to map to an\r\n // inequality filter or orderBy clause.\r\n if (!this.hasMatchingEqualityFilter(segments[segmentIndex])) {\r\n // If we cannot find a matching filter, we need to verify whether the\r\n // remaining segments map to the target's inequality and its orderBy\r\n // clauses.\r\n break;\r\n }\r\n }\r\n // If we already have processed all segments, all segments are used to serve\r\n // the equality filters and we do not need to map any segments to the\r\n // target's inequality and orderBy clauses.\r\n if (segmentIndex === segments.length) {\r\n return true;\r\n }\r\n // If there is an inequality filter, the next segment must match both the\r\n // filter and the first orderBy clause.\r\n if (this.inequalityFilter !== undefined) {\r\n const segment = segments[segmentIndex];\r\n if (!this.matchesFilter(this.inequalityFilter, segment) ||\r\n !this.matchesOrderBy(this.orderBys[orderBysIndex++], segment)) {\r\n return false;\r\n }\r\n ++segmentIndex;\r\n }\r\n // All remaining segments need to represent the prefix of the target's\r\n // orderBy.\r\n for (; segmentIndex < segments.length; ++segmentIndex) {\r\n const segment = segments[segmentIndex];\r\n if (orderBysIndex >= this.orderBys.length ||\r\n !this.matchesOrderBy(this.orderBys[orderBysIndex++], segment)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n hasMatchingEqualityFilter(segment) {\r\n for (const filter of this.equalityFilters) {\r\n if (this.matchesFilter(filter, segment)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n matchesFilter(filter, segment) {\r\n if (filter === undefined || !filter.field.isEqual(segment.fieldPath)) {\r\n return false;\r\n }\r\n const isArrayOperator = filter.op === \"array-contains\" /* Operator.ARRAY_CONTAINS */ ||\r\n filter.op === \"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */;\r\n return (segment.kind === 2 /* IndexKind.CONTAINS */) === isArrayOperator;\r\n }\r\n matchesOrderBy(orderBy, segment) {\r\n if (!orderBy.field.isEqual(segment.fieldPath)) {\r\n return false;\r\n }\r\n return ((segment.kind === 0 /* IndexKind.ASCENDING */ &&\r\n orderBy.dir === \"asc\" /* Direction.ASCENDING */) ||\r\n (segment.kind === 1 /* IndexKind.DESCENDING */ &&\r\n orderBy.dir === \"desc\" /* Direction.DESCENDING */));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provides utility functions that help with boolean logic transformations needed for handling\r\n * complex filters used in queries.\r\n */\r\n/**\r\n * The `in` filter is only a syntactic sugar over a disjunction of equalities. For instance: `a in\r\n * [1,2,3]` is in fact `a==1 || a==2 || a==3`. This method expands any `in` filter in the given\r\n * input into a disjunction of equality filters and returns the expanded filter.\r\n */\r\nfunction computeInExpansion(filter) {\r\n var _a, _b;\r\n hardAssert(filter instanceof FieldFilter || filter instanceof CompositeFilter);\r\n if (filter instanceof FieldFilter) {\r\n if (filter instanceof InFilter) {\r\n const expandedFilters = ((_b = (_a = filter.value.arrayValue) === null || _a === void 0 ? void 0 : _a.values) === null || _b === void 0 ? void 0 : _b.map(value => FieldFilter.create(filter.field, \"==\" /* Operator.EQUAL */, value))) || [];\r\n return CompositeFilter.create(expandedFilters, \"or\" /* CompositeOperator.OR */);\r\n }\r\n else {\r\n // We have reached other kinds of field filters.\r\n return filter;\r\n }\r\n }\r\n // We have a composite filter.\r\n const expandedFilters = filter.filters.map(subfilter => computeInExpansion(subfilter));\r\n return CompositeFilter.create(expandedFilters, filter.op);\r\n}\r\n/**\r\n * Given a composite filter, returns the list of terms in its disjunctive normal form.\r\n *\r\n * Each element in the return value is one term of the resulting DNF. For instance: For the\r\n * input: (A || B) && C, the DNF form is: (A && C) || (B && C), and the return value is a list\r\n * with two elements: a composite filter that performs (A && C), and a composite filter that\r\n * performs (B && C).\r\n *\r\n * @param filter the composite filter to calculate DNF transform for.\r\n * @return the terms in the DNF transform.\r\n */\r\nfunction getDnfTerms(filter) {\r\n if (filter.getFilters().length === 0) {\r\n return [];\r\n }\r\n const result = computeDistributedNormalForm(computeInExpansion(filter));\r\n hardAssert(isDisjunctiveNormalForm(result));\r\n if (isSingleFieldFilter(result) || isFlatConjunction(result)) {\r\n return [result];\r\n }\r\n return result.getFilters();\r\n}\r\n/** Returns true if the given filter is a single field filter. e.g. (a == 10). */\r\nfunction isSingleFieldFilter(filter) {\r\n return filter instanceof FieldFilter;\r\n}\r\n/**\r\n * Returns true if the given filter is the conjunction of one or more field filters. e.g. (a == 10\r\n * && b == 20)\r\n */\r\nfunction isFlatConjunction(filter) {\r\n return (filter instanceof CompositeFilter &&\r\n compositeFilterIsFlatConjunction(filter));\r\n}\r\n/**\r\n * Returns whether or not the given filter is in disjunctive normal form (DNF).\r\n *\r\n *
In boolean logic, a disjunctive normal form (DNF) is a canonical normal form of a logical\r\n * formula consisting of a disjunction of conjunctions; it can also be described as an OR of ANDs.\r\n *\r\n *
For more info, visit: https://en.wikipedia.org/wiki/Disjunctive_normal_form\r\n */\r\nfunction isDisjunctiveNormalForm(filter) {\r\n return (isSingleFieldFilter(filter) ||\r\n isFlatConjunction(filter) ||\r\n isDisjunctionOfFieldFiltersAndFlatConjunctions(filter));\r\n}\r\n/**\r\n * Returns true if the given filter is the disjunction of one or more \"flat conjunctions\" and\r\n * field filters. e.g. (a == 10) || (b==20 && c==30)\r\n */\r\nfunction isDisjunctionOfFieldFiltersAndFlatConjunctions(filter) {\r\n if (filter instanceof CompositeFilter) {\r\n if (compositeFilterIsDisjunction(filter)) {\r\n for (const subFilter of filter.getFilters()) {\r\n if (!isSingleFieldFilter(subFilter) && !isFlatConjunction(subFilter)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction computeDistributedNormalForm(filter) {\r\n hardAssert(filter instanceof FieldFilter || filter instanceof CompositeFilter);\r\n if (filter instanceof FieldFilter) {\r\n return filter;\r\n }\r\n if (filter.filters.length === 1) {\r\n return computeDistributedNormalForm(filter.filters[0]);\r\n }\r\n // Compute DNF for each of the subfilters first\r\n const result = filter.filters.map(subfilter => computeDistributedNormalForm(subfilter));\r\n let newFilter = CompositeFilter.create(result, filter.op);\r\n newFilter = applyAssociation(newFilter);\r\n if (isDisjunctiveNormalForm(newFilter)) {\r\n return newFilter;\r\n }\r\n hardAssert(newFilter instanceof CompositeFilter);\r\n hardAssert(compositeFilterIsConjunction(newFilter));\r\n hardAssert(newFilter.filters.length > 1);\r\n return newFilter.filters.reduce((runningResult, filter) => applyDistribution(runningResult, filter));\r\n}\r\nfunction applyDistribution(lhs, rhs) {\r\n hardAssert(lhs instanceof FieldFilter || lhs instanceof CompositeFilter);\r\n hardAssert(rhs instanceof FieldFilter || rhs instanceof CompositeFilter);\r\n let result;\r\n if (lhs instanceof FieldFilter) {\r\n if (rhs instanceof FieldFilter) {\r\n // FieldFilter FieldFilter\r\n result = applyDistributionFieldFilters(lhs, rhs);\r\n }\r\n else {\r\n // FieldFilter CompositeFilter\r\n result = applyDistributionFieldAndCompositeFilters(lhs, rhs);\r\n }\r\n }\r\n else {\r\n if (rhs instanceof FieldFilter) {\r\n // CompositeFilter FieldFilter\r\n result = applyDistributionFieldAndCompositeFilters(rhs, lhs);\r\n }\r\n else {\r\n // CompositeFilter CompositeFilter\r\n result = applyDistributionCompositeFilters(lhs, rhs);\r\n }\r\n }\r\n return applyAssociation(result);\r\n}\r\nfunction applyDistributionFieldFilters(lhs, rhs) {\r\n // Conjunction distribution for two field filters is the conjunction of them.\r\n return CompositeFilter.create([lhs, rhs], \"and\" /* CompositeOperator.AND */);\r\n}\r\nfunction applyDistributionCompositeFilters(lhs, rhs) {\r\n hardAssert(lhs.filters.length > 0 && rhs.filters.length > 0);\r\n // There are four cases:\r\n // (A & B) & (C & D) --> (A & B & C & D)\r\n // (A & B) & (C | D) --> (A & B & C) | (A & B & D)\r\n // (A | B) & (C & D) --> (C & D & A) | (C & D & B)\r\n // (A | B) & (C | D) --> (A & C) | (A & D) | (B & C) | (B & D)\r\n // Case 1 is a merge.\r\n if (compositeFilterIsConjunction(lhs) && compositeFilterIsConjunction(rhs)) {\r\n return compositeFilterWithAddedFilters(lhs, rhs.getFilters());\r\n }\r\n // Case 2,3,4 all have at least one side (lhs or rhs) that is a disjunction. In all three cases\r\n // we should take each element of the disjunction and distribute it over the other side, and\r\n // return the disjunction of the distribution results.\r\n const disjunctionSide = compositeFilterIsDisjunction(lhs) ? lhs : rhs;\r\n const otherSide = compositeFilterIsDisjunction(lhs) ? rhs : lhs;\r\n const results = disjunctionSide.filters.map(subfilter => applyDistribution(subfilter, otherSide));\r\n return CompositeFilter.create(results, \"or\" /* CompositeOperator.OR */);\r\n}\r\nfunction applyDistributionFieldAndCompositeFilters(fieldFilter, compositeFilter) {\r\n // There are two cases:\r\n // A & (B & C) --> (A & B & C)\r\n // A & (B | C) --> (A & B) | (A & C)\r\n if (compositeFilterIsConjunction(compositeFilter)) {\r\n // Case 1\r\n return compositeFilterWithAddedFilters(compositeFilter, fieldFilter.getFilters());\r\n }\r\n else {\r\n // Case 2\r\n const newFilters = compositeFilter.filters.map(subfilter => applyDistribution(fieldFilter, subfilter));\r\n return CompositeFilter.create(newFilters, \"or\" /* CompositeOperator.OR */);\r\n }\r\n}\r\n/**\r\n * Applies the associativity property to the given filter and returns the resulting filter.\r\n *\r\n *
\r\n * - A | (B | C) == (A | B) | C == (A | B | C)\r\n *
- A & (B & C) == (A & B) & C == (A & B & C)\r\n *
\r\n *\r\n * For more info, visit: https://en.wikipedia.org/wiki/Associative_property#Propositional_logic\r\n */\r\nfunction applyAssociation(filter) {\r\n hardAssert(filter instanceof FieldFilter || filter instanceof CompositeFilter);\r\n if (filter instanceof FieldFilter) {\r\n return filter;\r\n }\r\n const filters = filter.getFilters();\r\n // If the composite filter only contains 1 filter, apply associativity to it.\r\n if (filters.length === 1) {\r\n return applyAssociation(filters[0]);\r\n }\r\n // Associativity applied to a flat composite filter results is itself.\r\n if (compositeFilterIsFlat(filter)) {\r\n return filter;\r\n }\r\n // First apply associativity to all subfilters. This will in turn recursively apply\r\n // associativity to all nested composite filters and field filters.\r\n const updatedFilters = filters.map(subfilter => applyAssociation(subfilter));\r\n // For composite subfilters that perform the same kind of logical operation as `compositeFilter`\r\n // take out their filters and add them to `compositeFilter`. For example:\r\n // compositeFilter = (A | (B | C | D))\r\n // compositeSubfilter = (B | C | D)\r\n // Result: (A | B | C | D)\r\n // Note that the `compositeSubfilter` has been eliminated, and its filters (B, C, D) have been\r\n // added to the top-level \"compositeFilter\".\r\n const newSubfilters = [];\r\n updatedFilters.forEach(subfilter => {\r\n if (subfilter instanceof FieldFilter) {\r\n newSubfilters.push(subfilter);\r\n }\r\n else if (subfilter instanceof CompositeFilter) {\r\n if (subfilter.op === filter.op) {\r\n // compositeFilter: (A | (B | C))\r\n // compositeSubfilter: (B | C)\r\n // Result: (A | B | C)\r\n newSubfilters.push(...subfilter.filters);\r\n }\r\n else {\r\n // compositeFilter: (A | (B & C))\r\n // compositeSubfilter: (B & C)\r\n // Result: (A | (B & C))\r\n newSubfilters.push(subfilter);\r\n }\r\n }\r\n });\r\n if (newSubfilters.length === 1) {\r\n return newSubfilters[0];\r\n }\r\n return CompositeFilter.create(newSubfilters, filter.op);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An in-memory implementation of IndexManager.\r\n */\r\nclass MemoryIndexManager {\r\n constructor() {\r\n this.collectionParentIndex = new MemoryCollectionParentIndex();\r\n }\r\n addToCollectionParentIndex(transaction, collectionPath) {\r\n this.collectionParentIndex.add(collectionPath);\r\n return PersistencePromise.resolve();\r\n }\r\n getCollectionParents(transaction, collectionId) {\r\n return PersistencePromise.resolve(this.collectionParentIndex.getEntries(collectionId));\r\n }\r\n addFieldIndex(transaction, index) {\r\n // Field indices are not supported with memory persistence.\r\n return PersistencePromise.resolve();\r\n }\r\n deleteFieldIndex(transaction, index) {\r\n // Field indices are not supported with memory persistence.\r\n return PersistencePromise.resolve();\r\n }\r\n getDocumentsMatchingTarget(transaction, target) {\r\n // Field indices are not supported with memory persistence.\r\n return PersistencePromise.resolve(null);\r\n }\r\n getIndexType(transaction, target) {\r\n // Field indices are not supported with memory persistence.\r\n return PersistencePromise.resolve(0 /* IndexType.NONE */);\r\n }\r\n getFieldIndexes(transaction, collectionGroup) {\r\n // Field indices are not supported with memory persistence.\r\n return PersistencePromise.resolve([]);\r\n }\r\n getNextCollectionGroupToUpdate(transaction) {\r\n // Field indices are not supported with memory persistence.\r\n return PersistencePromise.resolve(null);\r\n }\r\n getMinOffset(transaction, target) {\r\n return PersistencePromise.resolve(IndexOffset.min());\r\n }\r\n getMinOffsetFromCollectionGroup(transaction, collectionGroup) {\r\n return PersistencePromise.resolve(IndexOffset.min());\r\n }\r\n updateCollectionGroup(transaction, collectionGroup, offset) {\r\n // Field indices are not supported with memory persistence.\r\n return PersistencePromise.resolve();\r\n }\r\n updateIndexEntries(transaction, documents) {\r\n // Field indices are not supported with memory persistence.\r\n return PersistencePromise.resolve();\r\n }\r\n}\r\n/**\r\n * Internal implementation of the collection-parent index exposed by MemoryIndexManager.\r\n * Also used for in-memory caching by IndexedDbIndexManager and initial index population\r\n * in indexeddb_schema.ts\r\n */\r\nclass MemoryCollectionParentIndex {\r\n constructor() {\r\n this.index = {};\r\n }\r\n // Returns false if the entry already existed.\r\n add(collectionPath) {\r\n const collectionId = collectionPath.lastSegment();\r\n const parentPath = collectionPath.popLast();\r\n const existingParents = this.index[collectionId] ||\r\n new SortedSet(ResourcePath.comparator);\r\n const added = !existingParents.has(parentPath);\r\n this.index[collectionId] = existingParents.add(parentPath);\r\n return added;\r\n }\r\n has(collectionPath) {\r\n const collectionId = collectionPath.lastSegment();\r\n const parentPath = collectionPath.popLast();\r\n const existingParents = this.index[collectionId];\r\n return existingParents && existingParents.has(parentPath);\r\n }\r\n getEntries(collectionId) {\r\n const parentPaths = this.index[collectionId] ||\r\n new SortedSet(ResourcePath.comparator);\r\n return parentPaths.toArray();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$f = 'IndexedDbIndexManager';\r\nconst EMPTY_VALUE = new Uint8Array(0);\r\n/**\r\n * A persisted implementation of IndexManager.\r\n *\r\n * PORTING NOTE: Unlike iOS and Android, the Web SDK does not memoize index\r\n * data as it supports multi-tab access.\r\n */\r\nclass IndexedDbIndexManager {\r\n constructor(user, databaseId) {\r\n this.user = user;\r\n this.databaseId = databaseId;\r\n /**\r\n * An in-memory copy of the index entries we've already written since the SDK\r\n * launched. Used to avoid re-writing the same entry repeatedly.\r\n *\r\n * This is *NOT* a complete cache of what's in persistence and so can never be\r\n * used to satisfy reads.\r\n */\r\n this.collectionParentsCache = new MemoryCollectionParentIndex();\r\n /**\r\n * Maps from a target to its equivalent list of sub-targets. Each sub-target\r\n * contains only one term from the target's disjunctive normal form (DNF).\r\n */\r\n this.targetToDnfSubTargets = new ObjectMap(t => canonifyTarget(t), (l, r) => targetEquals(l, r));\r\n this.uid = user.uid || '';\r\n }\r\n /**\r\n * Adds a new entry to the collection parent index.\r\n *\r\n * Repeated calls for the same collectionPath should be avoided within a\r\n * transaction as IndexedDbIndexManager only caches writes once a transaction\r\n * has been committed.\r\n */\r\n addToCollectionParentIndex(transaction, collectionPath) {\r\n if (!this.collectionParentsCache.has(collectionPath)) {\r\n const collectionId = collectionPath.lastSegment();\r\n const parentPath = collectionPath.popLast();\r\n transaction.addOnCommittedListener(() => {\r\n // Add the collection to the in memory cache only if the transaction was\r\n // successfully committed.\r\n this.collectionParentsCache.add(collectionPath);\r\n });\r\n const collectionParent = {\r\n collectionId,\r\n parent: encodeResourcePath(parentPath)\r\n };\r\n return collectionParentsStore(transaction).put(collectionParent);\r\n }\r\n return PersistencePromise.resolve();\r\n }\r\n getCollectionParents(transaction, collectionId) {\r\n const parentPaths = [];\r\n const range = IDBKeyRange.bound([collectionId, ''], [immediateSuccessor(collectionId), ''], \r\n /*lowerOpen=*/ false, \r\n /*upperOpen=*/ true);\r\n return collectionParentsStore(transaction)\r\n .loadAll(range)\r\n .next(entries => {\r\n for (const entry of entries) {\r\n // This collectionId guard shouldn't be necessary (and isn't as long\r\n // as we're running in a real browser), but there's a bug in\r\n // indexeddbshim that breaks our range in our tests running in node:\r\n // https://github.com/axemclion/IndexedDBShim/issues/334\r\n if (entry.collectionId !== collectionId) {\r\n break;\r\n }\r\n parentPaths.push(decodeResourcePath(entry.parent));\r\n }\r\n return parentPaths;\r\n });\r\n }\r\n addFieldIndex(transaction, index) {\r\n // TODO(indexing): Verify that the auto-incrementing index ID works in\r\n // Safari & Firefox.\r\n const indexes = indexConfigurationStore(transaction);\r\n const dbIndex = toDbIndexConfiguration(index);\r\n delete dbIndex.indexId; // `indexId` is auto-populated by IndexedDb\r\n const result = indexes.add(dbIndex);\r\n if (index.indexState) {\r\n const states = indexStateStore(transaction);\r\n return result.next(indexId => {\r\n states.put(toDbIndexState(indexId, this.user, index.indexState.sequenceNumber, index.indexState.offset));\r\n });\r\n }\r\n else {\r\n return result.next();\r\n }\r\n }\r\n deleteFieldIndex(transaction, index) {\r\n const indexes = indexConfigurationStore(transaction);\r\n const states = indexStateStore(transaction);\r\n const entries = indexEntriesStore(transaction);\r\n return indexes\r\n .delete(index.indexId)\r\n .next(() => states.delete(IDBKeyRange.bound([index.indexId], [index.indexId + 1], \r\n /*lowerOpen=*/ false, \r\n /*upperOpen=*/ true)))\r\n .next(() => entries.delete(IDBKeyRange.bound([index.indexId], [index.indexId + 1], \r\n /*lowerOpen=*/ false, \r\n /*upperOpen=*/ true)));\r\n }\r\n getDocumentsMatchingTarget(transaction, target) {\r\n const indexEntries = indexEntriesStore(transaction);\r\n let canServeTarget = true;\r\n const indexes = new Map();\r\n return PersistencePromise.forEach(this.getSubTargets(target), (subTarget) => {\r\n return this.getFieldIndex(transaction, subTarget).next(index => {\r\n canServeTarget && (canServeTarget = !!index);\r\n indexes.set(subTarget, index);\r\n });\r\n }).next(() => {\r\n if (!canServeTarget) {\r\n return PersistencePromise.resolve(null);\r\n }\r\n else {\r\n let existingKeys = documentKeySet();\r\n const result = [];\r\n return PersistencePromise.forEach(indexes, (index, subTarget) => {\r\n logDebug(LOG_TAG$f, `Using index ${fieldIndexToString(index)} to execute ${canonifyTarget(target)}`);\r\n const arrayValues = targetGetArrayValues(subTarget, index);\r\n const notInValues = targetGetNotInValues(subTarget, index);\r\n const lowerBound = targetGetLowerBound(subTarget, index);\r\n const upperBound = targetGetUpperBound(subTarget, index);\r\n const lowerBoundEncoded = this.encodeBound(index, subTarget, lowerBound);\r\n const upperBoundEncoded = this.encodeBound(index, subTarget, upperBound);\r\n const notInEncoded = this.encodeValues(index, subTarget, notInValues);\r\n const indexRanges = this.generateIndexRanges(index.indexId, arrayValues, lowerBoundEncoded, lowerBound.inclusive, upperBoundEncoded, upperBound.inclusive, notInEncoded);\r\n return PersistencePromise.forEach(indexRanges, (indexRange) => {\r\n return indexEntries\r\n .loadFirst(indexRange, target.limit)\r\n .next(entries => {\r\n entries.forEach(entry => {\r\n const documentKey = DocumentKey.fromSegments(entry.documentKey);\r\n if (!existingKeys.has(documentKey)) {\r\n existingKeys = existingKeys.add(documentKey);\r\n result.push(documentKey);\r\n }\r\n });\r\n });\r\n });\r\n }).next(() => result);\r\n }\r\n });\r\n }\r\n getSubTargets(target) {\r\n let subTargets = this.targetToDnfSubTargets.get(target);\r\n if (subTargets) {\r\n return subTargets;\r\n }\r\n if (target.filters.length === 0) {\r\n subTargets = [target];\r\n }\r\n else {\r\n // There is an implicit AND operation between all the filters stored in the target\r\n const dnf = getDnfTerms(CompositeFilter.create(target.filters, \"and\" /* CompositeOperator.AND */));\r\n subTargets = dnf.map(term => newTarget(target.path, target.collectionGroup, target.orderBy, term.getFilters(), target.limit, target.startAt, target.endAt));\r\n }\r\n this.targetToDnfSubTargets.set(target, subTargets);\r\n return subTargets;\r\n }\r\n /**\r\n * Constructs a key range query on `DbIndexEntryStore` that unions all\r\n * bounds.\r\n */\r\n generateIndexRanges(indexId, arrayValues, lowerBounds, lowerBoundInclusive, upperBounds, upperBoundInclusive, notInValues) {\r\n // The number of total index scans we union together. This is similar to a\r\n // distributed normal form, but adapted for array values. We create a single\r\n // index range per value in an ARRAY_CONTAINS or ARRAY_CONTAINS_ANY filter\r\n // combined with the values from the query bounds.\r\n const totalScans = (arrayValues != null ? arrayValues.length : 1) *\r\n Math.max(lowerBounds.length, upperBounds.length);\r\n const scansPerArrayElement = totalScans / (arrayValues != null ? arrayValues.length : 1);\r\n const indexRanges = [];\r\n for (let i = 0; i < totalScans; ++i) {\r\n const arrayValue = arrayValues\r\n ? this.encodeSingleElement(arrayValues[i / scansPerArrayElement])\r\n : EMPTY_VALUE;\r\n const lowerBound = this.generateLowerBound(indexId, arrayValue, lowerBounds[i % scansPerArrayElement], lowerBoundInclusive);\r\n const upperBound = this.generateUpperBound(indexId, arrayValue, upperBounds[i % scansPerArrayElement], upperBoundInclusive);\r\n const notInBound = notInValues.map(notIn => this.generateLowerBound(indexId, arrayValue, notIn, \r\n /* inclusive= */ true));\r\n indexRanges.push(...this.createRange(lowerBound, upperBound, notInBound));\r\n }\r\n return indexRanges;\r\n }\r\n /** Generates the lower bound for `arrayValue` and `directionalValue`. */\r\n generateLowerBound(indexId, arrayValue, directionalValue, inclusive) {\r\n const entry = new IndexEntry(indexId, DocumentKey.empty(), arrayValue, directionalValue);\r\n return inclusive ? entry : entry.successor();\r\n }\r\n /** Generates the upper bound for `arrayValue` and `directionalValue`. */\r\n generateUpperBound(indexId, arrayValue, directionalValue, inclusive) {\r\n const entry = new IndexEntry(indexId, DocumentKey.empty(), arrayValue, directionalValue);\r\n return inclusive ? entry.successor() : entry;\r\n }\r\n getFieldIndex(transaction, target) {\r\n const targetIndexMatcher = new TargetIndexMatcher(target);\r\n const collectionGroup = target.collectionGroup != null\r\n ? target.collectionGroup\r\n : target.path.lastSegment();\r\n return this.getFieldIndexes(transaction, collectionGroup).next(indexes => {\r\n // Return the index with the most number of segments.\r\n let index = null;\r\n for (const candidate of indexes) {\r\n const matches = targetIndexMatcher.servedByIndex(candidate);\r\n if (matches &&\r\n (!index || candidate.fields.length > index.fields.length)) {\r\n index = candidate;\r\n }\r\n }\r\n return index;\r\n });\r\n }\r\n getIndexType(transaction, target) {\r\n let indexType = 2 /* IndexType.FULL */;\r\n const subTargets = this.getSubTargets(target);\r\n return PersistencePromise.forEach(subTargets, (target) => {\r\n return this.getFieldIndex(transaction, target).next(index => {\r\n if (!index) {\r\n indexType = 0 /* IndexType.NONE */;\r\n }\r\n else if (indexType !== 0 /* IndexType.NONE */ &&\r\n index.fields.length < targetGetSegmentCount(target)) {\r\n indexType = 1 /* IndexType.PARTIAL */;\r\n }\r\n });\r\n }).next(() => {\r\n // OR queries have more than one sub-target (one sub-target per DNF term). We currently consider\r\n // OR queries that have a `limit` to have a partial index. For such queries we perform sorting\r\n // and apply the limit in memory as a post-processing step.\r\n if (targetHasLimit(target) &&\r\n subTargets.length > 1 &&\r\n indexType === 2 /* IndexType.FULL */) {\r\n return 1 /* IndexType.PARTIAL */;\r\n }\r\n return indexType;\r\n });\r\n }\r\n /**\r\n * Returns the byte encoded form of the directional values in the field index.\r\n * Returns `null` if the document does not have all fields specified in the\r\n * index.\r\n */\r\n encodeDirectionalElements(fieldIndex, document) {\r\n const encoder = new IndexByteEncoder();\r\n for (const segment of fieldIndexGetDirectionalSegments(fieldIndex)) {\r\n const field = document.data.field(segment.fieldPath);\r\n if (field == null) {\r\n return null;\r\n }\r\n const directionalEncoder = encoder.forKind(segment.kind);\r\n FirestoreIndexValueWriter.INSTANCE.writeIndexValue(field, directionalEncoder);\r\n }\r\n return encoder.encodedBytes();\r\n }\r\n /** Encodes a single value to the ascending index format. */\r\n encodeSingleElement(value) {\r\n const encoder = new IndexByteEncoder();\r\n FirestoreIndexValueWriter.INSTANCE.writeIndexValue(value, encoder.forKind(0 /* IndexKind.ASCENDING */));\r\n return encoder.encodedBytes();\r\n }\r\n /**\r\n * Returns an encoded form of the document key that sorts based on the key\r\n * ordering of the field index.\r\n */\r\n encodeDirectionalKey(fieldIndex, documentKey) {\r\n const encoder = new IndexByteEncoder();\r\n FirestoreIndexValueWriter.INSTANCE.writeIndexValue(refValue(this.databaseId, documentKey), encoder.forKind(fieldIndexGetKeyOrder(fieldIndex)));\r\n return encoder.encodedBytes();\r\n }\r\n /**\r\n * Encodes the given field values according to the specification in `target`.\r\n * For IN queries, a list of possible values is returned.\r\n */\r\n encodeValues(fieldIndex, target, values) {\r\n if (values === null) {\r\n return [];\r\n }\r\n let encoders = [];\r\n encoders.push(new IndexByteEncoder());\r\n let valueIdx = 0;\r\n for (const segment of fieldIndexGetDirectionalSegments(fieldIndex)) {\r\n const value = values[valueIdx++];\r\n for (const encoder of encoders) {\r\n if (this.isInFilter(target, segment.fieldPath) && isArray(value)) {\r\n encoders = this.expandIndexValues(encoders, segment, value);\r\n }\r\n else {\r\n const directionalEncoder = encoder.forKind(segment.kind);\r\n FirestoreIndexValueWriter.INSTANCE.writeIndexValue(value, directionalEncoder);\r\n }\r\n }\r\n }\r\n return this.getEncodedBytes(encoders);\r\n }\r\n /**\r\n * Encodes the given bounds according to the specification in `target`. For IN\r\n * queries, a list of possible values is returned.\r\n */\r\n encodeBound(fieldIndex, target, bound) {\r\n return this.encodeValues(fieldIndex, target, bound.position);\r\n }\r\n /** Returns the byte representation for the provided encoders. */\r\n getEncodedBytes(encoders) {\r\n const result = [];\r\n for (let i = 0; i < encoders.length; ++i) {\r\n result[i] = encoders[i].encodedBytes();\r\n }\r\n return result;\r\n }\r\n /**\r\n * Creates a separate encoder for each element of an array.\r\n *\r\n * The method appends each value to all existing encoders (e.g. filter(\"a\",\r\n * \"==\", \"a1\").filter(\"b\", \"in\", [\"b1\", \"b2\"]) becomes [\"a1,b1\", \"a1,b2\"]). A\r\n * list of new encoders is returned.\r\n */\r\n expandIndexValues(encoders, segment, value) {\r\n const prefixes = [...encoders];\r\n const results = [];\r\n for (const arrayElement of value.arrayValue.values || []) {\r\n for (const prefix of prefixes) {\r\n const clonedEncoder = new IndexByteEncoder();\r\n clonedEncoder.seed(prefix.encodedBytes());\r\n FirestoreIndexValueWriter.INSTANCE.writeIndexValue(arrayElement, clonedEncoder.forKind(segment.kind));\r\n results.push(clonedEncoder);\r\n }\r\n }\r\n return results;\r\n }\r\n isInFilter(target, fieldPath) {\r\n return !!target.filters.find(f => f instanceof FieldFilter &&\r\n f.field.isEqual(fieldPath) &&\r\n (f.op === \"in\" /* Operator.IN */ || f.op === \"not-in\" /* Operator.NOT_IN */));\r\n }\r\n getFieldIndexes(transaction, collectionGroup) {\r\n const indexes = indexConfigurationStore(transaction);\r\n const states = indexStateStore(transaction);\r\n return (collectionGroup\r\n ? indexes.loadAll(DbIndexConfigurationCollectionGroupIndex, IDBKeyRange.bound(collectionGroup, collectionGroup))\r\n : indexes.loadAll()).next(indexConfigs => {\r\n const result = [];\r\n return PersistencePromise.forEach(indexConfigs, (indexConfig) => {\r\n return states\r\n .get([indexConfig.indexId, this.uid])\r\n .next(indexState => {\r\n result.push(fromDbIndexConfiguration(indexConfig, indexState));\r\n });\r\n }).next(() => result);\r\n });\r\n }\r\n getNextCollectionGroupToUpdate(transaction) {\r\n return this.getFieldIndexes(transaction).next(indexes => {\r\n if (indexes.length === 0) {\r\n return null;\r\n }\r\n indexes.sort((l, r) => {\r\n const cmp = l.indexState.sequenceNumber - r.indexState.sequenceNumber;\r\n return cmp !== 0\r\n ? cmp\r\n : primitiveComparator(l.collectionGroup, r.collectionGroup);\r\n });\r\n return indexes[0].collectionGroup;\r\n });\r\n }\r\n updateCollectionGroup(transaction, collectionGroup, offset) {\r\n const indexes = indexConfigurationStore(transaction);\r\n const states = indexStateStore(transaction);\r\n return this.getNextSequenceNumber(transaction).next(nextSequenceNumber => indexes\r\n .loadAll(DbIndexConfigurationCollectionGroupIndex, IDBKeyRange.bound(collectionGroup, collectionGroup))\r\n .next(configs => PersistencePromise.forEach(configs, (config) => states.put(toDbIndexState(config.indexId, this.user, nextSequenceNumber, offset)))));\r\n }\r\n updateIndexEntries(transaction, documents) {\r\n // Porting Note: `getFieldIndexes()` on Web does not cache index lookups as\r\n // it could be used across different IndexedDB transactions. As any cached\r\n // data might be invalidated by other multi-tab clients, we can only trust\r\n // data within a single IndexedDB transaction. We therefore add a cache\r\n // here.\r\n const memoizedIndexes = new Map();\r\n return PersistencePromise.forEach(documents, (key, doc) => {\r\n const memoizedCollectionIndexes = memoizedIndexes.get(key.collectionGroup);\r\n const fieldIndexes = memoizedCollectionIndexes\r\n ? PersistencePromise.resolve(memoizedCollectionIndexes)\r\n : this.getFieldIndexes(transaction, key.collectionGroup);\r\n return fieldIndexes.next(fieldIndexes => {\r\n memoizedIndexes.set(key.collectionGroup, fieldIndexes);\r\n return PersistencePromise.forEach(fieldIndexes, (fieldIndex) => {\r\n return this.getExistingIndexEntries(transaction, key, fieldIndex).next(existingEntries => {\r\n const newEntries = this.computeIndexEntries(doc, fieldIndex);\r\n if (!existingEntries.isEqual(newEntries)) {\r\n return this.updateEntries(transaction, doc, fieldIndex, existingEntries, newEntries);\r\n }\r\n return PersistencePromise.resolve();\r\n });\r\n });\r\n });\r\n });\r\n }\r\n addIndexEntry(transaction, document, fieldIndex, indexEntry) {\r\n const indexEntries = indexEntriesStore(transaction);\r\n return indexEntries.put({\r\n indexId: indexEntry.indexId,\r\n uid: this.uid,\r\n arrayValue: indexEntry.arrayValue,\r\n directionalValue: indexEntry.directionalValue,\r\n orderedDocumentKey: this.encodeDirectionalKey(fieldIndex, document.key),\r\n documentKey: document.key.path.toArray()\r\n });\r\n }\r\n deleteIndexEntry(transaction, document, fieldIndex, indexEntry) {\r\n const indexEntries = indexEntriesStore(transaction);\r\n return indexEntries.delete([\r\n indexEntry.indexId,\r\n this.uid,\r\n indexEntry.arrayValue,\r\n indexEntry.directionalValue,\r\n this.encodeDirectionalKey(fieldIndex, document.key),\r\n document.key.path.toArray()\r\n ]);\r\n }\r\n getExistingIndexEntries(transaction, documentKey, fieldIndex) {\r\n const indexEntries = indexEntriesStore(transaction);\r\n let results = new SortedSet(indexEntryComparator);\r\n return indexEntries\r\n .iterate({\r\n index: DbIndexEntryDocumentKeyIndex,\r\n range: IDBKeyRange.only([\r\n fieldIndex.indexId,\r\n this.uid,\r\n this.encodeDirectionalKey(fieldIndex, documentKey)\r\n ])\r\n }, (_, entry) => {\r\n results = results.add(new IndexEntry(fieldIndex.indexId, documentKey, entry.arrayValue, entry.directionalValue));\r\n })\r\n .next(() => results);\r\n }\r\n /** Creates the index entries for the given document. */\r\n computeIndexEntries(document, fieldIndex) {\r\n let results = new SortedSet(indexEntryComparator);\r\n const directionalValue = this.encodeDirectionalElements(fieldIndex, document);\r\n if (directionalValue == null) {\r\n return results;\r\n }\r\n const arraySegment = fieldIndexGetArraySegment(fieldIndex);\r\n if (arraySegment != null) {\r\n const value = document.data.field(arraySegment.fieldPath);\r\n if (isArray(value)) {\r\n for (const arrayValue of value.arrayValue.values || []) {\r\n results = results.add(new IndexEntry(fieldIndex.indexId, document.key, this.encodeSingleElement(arrayValue), directionalValue));\r\n }\r\n }\r\n }\r\n else {\r\n results = results.add(new IndexEntry(fieldIndex.indexId, document.key, EMPTY_VALUE, directionalValue));\r\n }\r\n return results;\r\n }\r\n /**\r\n * Updates the index entries for the provided document by deleting entries\r\n * that are no longer referenced in `newEntries` and adding all newly added\r\n * entries.\r\n */\r\n updateEntries(transaction, document, fieldIndex, existingEntries, newEntries) {\r\n logDebug(LOG_TAG$f, \"Updating index entries for document '%s'\", document.key);\r\n const promises = [];\r\n diffSortedSets(existingEntries, newEntries, indexEntryComparator, \r\n /* onAdd= */ entry => {\r\n promises.push(this.addIndexEntry(transaction, document, fieldIndex, entry));\r\n }, \r\n /* onRemove= */ entry => {\r\n promises.push(this.deleteIndexEntry(transaction, document, fieldIndex, entry));\r\n });\r\n return PersistencePromise.waitFor(promises);\r\n }\r\n getNextSequenceNumber(transaction) {\r\n let nextSequenceNumber = 1;\r\n const states = indexStateStore(transaction);\r\n return states\r\n .iterate({\r\n index: DbIndexStateSequenceNumberIndex,\r\n reverse: true,\r\n range: IDBKeyRange.upperBound([this.uid, Number.MAX_SAFE_INTEGER])\r\n }, (_, state, controller) => {\r\n controller.done();\r\n nextSequenceNumber = state.sequenceNumber + 1;\r\n })\r\n .next(() => nextSequenceNumber);\r\n }\r\n /**\r\n * Returns a new set of IDB ranges that splits the existing range and excludes\r\n * any values that match the `notInValue` from these ranges. As an example,\r\n * '[foo > 2 && foo != 3]` becomes `[foo > 2 && < 3, foo > 3]`.\r\n */\r\n createRange(lower, upper, notInValues) {\r\n // The notIn values need to be sorted and unique so that we can return a\r\n // sorted set of non-overlapping ranges.\r\n notInValues = notInValues\r\n .sort((l, r) => indexEntryComparator(l, r))\r\n .filter((el, i, values) => !i || indexEntryComparator(el, values[i - 1]) !== 0);\r\n const bounds = [];\r\n bounds.push(lower);\r\n for (const notInValue of notInValues) {\r\n const cmpToLower = indexEntryComparator(notInValue, lower);\r\n const cmpToUpper = indexEntryComparator(notInValue, upper);\r\n if (cmpToLower === 0) {\r\n // `notInValue` is the lower bound. We therefore need to raise the bound\r\n // to the next value.\r\n bounds[0] = lower.successor();\r\n }\r\n else if (cmpToLower > 0 && cmpToUpper < 0) {\r\n // `notInValue` is in the middle of the range\r\n bounds.push(notInValue);\r\n bounds.push(notInValue.successor());\r\n }\r\n else if (cmpToUpper > 0) {\r\n // `notInValue` (and all following values) are out of the range\r\n break;\r\n }\r\n }\r\n bounds.push(upper);\r\n const ranges = [];\r\n for (let i = 0; i < bounds.length; i += 2) {\r\n // If we encounter two bounds that will create an unmatchable key range,\r\n // then we return an empty set of key ranges.\r\n if (this.isRangeMatchable(bounds[i], bounds[i + 1])) {\r\n return [];\r\n }\r\n const lowerBound = [\r\n bounds[i].indexId,\r\n this.uid,\r\n bounds[i].arrayValue,\r\n bounds[i].directionalValue,\r\n EMPTY_VALUE,\r\n []\r\n ];\r\n const upperBound = [\r\n bounds[i + 1].indexId,\r\n this.uid,\r\n bounds[i + 1].arrayValue,\r\n bounds[i + 1].directionalValue,\r\n EMPTY_VALUE,\r\n []\r\n ];\r\n ranges.push(IDBKeyRange.bound(lowerBound, upperBound));\r\n }\r\n return ranges;\r\n }\r\n isRangeMatchable(lowerBound, upperBound) {\r\n // If lower bound is greater than the upper bound, then the key\r\n // range can never be matched.\r\n return indexEntryComparator(lowerBound, upperBound) > 0;\r\n }\r\n getMinOffsetFromCollectionGroup(transaction, collectionGroup) {\r\n return this.getFieldIndexes(transaction, collectionGroup).next(getMinOffsetFromFieldIndexes);\r\n }\r\n getMinOffset(transaction, target) {\r\n return PersistencePromise.mapArray(this.getSubTargets(target), (subTarget) => this.getFieldIndex(transaction, subTarget).next(index => index ? index : fail())).next(getMinOffsetFromFieldIndexes);\r\n }\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the collectionParents\r\n * document store.\r\n */\r\nfunction collectionParentsStore(txn) {\r\n return getStore(txn, DbCollectionParentStore);\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the index entry object store.\r\n */\r\nfunction indexEntriesStore(txn) {\r\n return getStore(txn, DbIndexEntryStore);\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the index configuration object store.\r\n */\r\nfunction indexConfigurationStore(txn) {\r\n return getStore(txn, DbIndexConfigurationStore);\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the index state object store.\r\n */\r\nfunction indexStateStore(txn) {\r\n return getStore(txn, DbIndexStateStore);\r\n}\r\nfunction getMinOffsetFromFieldIndexes(fieldIndexes) {\r\n hardAssert(fieldIndexes.length !== 0);\r\n let minOffset = fieldIndexes[0].indexState.offset;\r\n let maxBatchId = minOffset.largestBatchId;\r\n for (let i = 1; i < fieldIndexes.length; i++) {\r\n const newOffset = fieldIndexes[i].indexState.offset;\r\n if (indexOffsetComparator(newOffset, minOffset) < 0) {\r\n minOffset = newOffset;\r\n }\r\n if (maxBatchId < newOffset.largestBatchId) {\r\n maxBatchId = newOffset.largestBatchId;\r\n }\r\n }\r\n return new IndexOffset(minOffset.readTime, minOffset.documentKey, maxBatchId);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Delete a mutation batch and the associated document mutations.\r\n * @returns A PersistencePromise of the document mutations that were removed.\r\n */\r\nfunction removeMutationBatch(txn, userId, batch) {\r\n const mutationStore = txn.store(DbMutationBatchStore);\r\n const indexTxn = txn.store(DbDocumentMutationStore);\r\n const promises = [];\r\n const range = IDBKeyRange.only(batch.batchId);\r\n let numDeleted = 0;\r\n const removePromise = mutationStore.iterate({ range }, (key, value, control) => {\r\n numDeleted++;\r\n return control.delete();\r\n });\r\n promises.push(removePromise.next(() => {\r\n hardAssert(numDeleted === 1);\r\n }));\r\n const removedDocuments = [];\r\n for (const mutation of batch.mutations) {\r\n const indexKey = newDbDocumentMutationKey(userId, mutation.key.path, batch.batchId);\r\n promises.push(indexTxn.delete(indexKey));\r\n removedDocuments.push(mutation.key);\r\n }\r\n return PersistencePromise.waitFor(promises).next(() => removedDocuments);\r\n}\r\n/**\r\n * Returns an approximate size for the given document.\r\n */\r\nfunction dbDocumentSize(doc) {\r\n if (!doc) {\r\n return 0;\r\n }\r\n let value;\r\n if (doc.document) {\r\n value = doc.document;\r\n }\r\n else if (doc.unknownDocument) {\r\n value = doc.unknownDocument;\r\n }\r\n else if (doc.noDocument) {\r\n value = doc.noDocument;\r\n }\r\n else {\r\n throw fail();\r\n }\r\n return JSON.stringify(value).length;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** A mutation queue for a specific user, backed by IndexedDB. */\r\nclass IndexedDbMutationQueue {\r\n constructor(\r\n /**\r\n * The normalized userId (e.g. null UID => \"\" userId) used to store /\r\n * retrieve mutations.\r\n */\r\n userId, serializer, indexManager, referenceDelegate) {\r\n this.userId = userId;\r\n this.serializer = serializer;\r\n this.indexManager = indexManager;\r\n this.referenceDelegate = referenceDelegate;\r\n /**\r\n * Caches the document keys for pending mutation batches. If the mutation\r\n * has been removed from IndexedDb, the cached value may continue to\r\n * be used to retrieve the batch's document keys. To remove a cached value\r\n * locally, `removeCachedMutationKeys()` should be invoked either directly\r\n * or through `removeMutationBatches()`.\r\n *\r\n * With multi-tab, when the primary client acknowledges or rejects a mutation,\r\n * this cache is used by secondary clients to invalidate the local\r\n * view of the documents that were previously affected by the mutation.\r\n */\r\n // PORTING NOTE: Multi-tab only.\r\n this.documentKeysByBatchId = {};\r\n }\r\n /**\r\n * Creates a new mutation queue for the given user.\r\n * @param user - The user for which to create a mutation queue.\r\n * @param serializer - The serializer to use when persisting to IndexedDb.\r\n */\r\n static forUser(user, serializer, indexManager, referenceDelegate) {\r\n // TODO(mcg): Figure out what constraints there are on userIDs\r\n // In particular, are there any reserved characters? are empty ids allowed?\r\n // For the moment store these together in the same mutations table assuming\r\n // that empty userIDs aren't allowed.\r\n hardAssert(user.uid !== '');\r\n const userId = user.isAuthenticated() ? user.uid : '';\r\n return new IndexedDbMutationQueue(userId, serializer, indexManager, referenceDelegate);\r\n }\r\n checkEmpty(transaction) {\r\n let empty = true;\r\n const range = IDBKeyRange.bound([this.userId, Number.NEGATIVE_INFINITY], [this.userId, Number.POSITIVE_INFINITY]);\r\n return mutationsStore(transaction)\r\n .iterate({ index: DbMutationBatchUserMutationsIndex, range }, (key, value, control) => {\r\n empty = false;\r\n control.done();\r\n })\r\n .next(() => empty);\r\n }\r\n addMutationBatch(transaction, localWriteTime, baseMutations, mutations) {\r\n const documentStore = documentMutationsStore(transaction);\r\n const mutationStore = mutationsStore(transaction);\r\n // The IndexedDb implementation in Chrome (and Firefox) does not handle\r\n // compound indices that include auto-generated keys correctly. To ensure\r\n // that the index entry is added correctly in all browsers, we perform two\r\n // writes: The first write is used to retrieve the next auto-generated Batch\r\n // ID, and the second write populates the index and stores the actual\r\n // mutation batch.\r\n // See: https://bugs.chromium.org/p/chromium/issues/detail?id=701972\r\n // We write an empty object to obtain key\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return mutationStore.add({}).next(batchId => {\r\n hardAssert(typeof batchId === 'number');\r\n const batch = new MutationBatch(batchId, localWriteTime, baseMutations, mutations);\r\n const dbBatch = toDbMutationBatch(this.serializer, this.userId, batch);\r\n const promises = [];\r\n let collectionParents = new SortedSet((l, r) => primitiveComparator(l.canonicalString(), r.canonicalString()));\r\n for (const mutation of mutations) {\r\n const indexKey = newDbDocumentMutationKey(this.userId, mutation.key.path, batchId);\r\n collectionParents = collectionParents.add(mutation.key.path.popLast());\r\n promises.push(mutationStore.put(dbBatch));\r\n promises.push(documentStore.put(indexKey, DbDocumentMutationPlaceholder));\r\n }\r\n collectionParents.forEach(parent => {\r\n promises.push(this.indexManager.addToCollectionParentIndex(transaction, parent));\r\n });\r\n transaction.addOnCommittedListener(() => {\r\n this.documentKeysByBatchId[batchId] = batch.keys();\r\n });\r\n return PersistencePromise.waitFor(promises).next(() => batch);\r\n });\r\n }\r\n lookupMutationBatch(transaction, batchId) {\r\n return mutationsStore(transaction)\r\n .get(batchId)\r\n .next(dbBatch => {\r\n if (dbBatch) {\r\n hardAssert(dbBatch.userId === this.userId);\r\n return fromDbMutationBatch(this.serializer, dbBatch);\r\n }\r\n return null;\r\n });\r\n }\r\n /**\r\n * Returns the document keys for the mutation batch with the given batchId.\r\n * For primary clients, this method returns `null` after\r\n * `removeMutationBatches()` has been called. Secondary clients return a\r\n * cached result until `removeCachedMutationKeys()` is invoked.\r\n */\r\n // PORTING NOTE: Multi-tab only.\r\n lookupMutationKeys(transaction, batchId) {\r\n if (this.documentKeysByBatchId[batchId]) {\r\n return PersistencePromise.resolve(this.documentKeysByBatchId[batchId]);\r\n }\r\n else {\r\n return this.lookupMutationBatch(transaction, batchId).next(batch => {\r\n if (batch) {\r\n const keys = batch.keys();\r\n this.documentKeysByBatchId[batchId] = keys;\r\n return keys;\r\n }\r\n else {\r\n return null;\r\n }\r\n });\r\n }\r\n }\r\n getNextMutationBatchAfterBatchId(transaction, batchId) {\r\n const nextBatchId = batchId + 1;\r\n const range = IDBKeyRange.lowerBound([this.userId, nextBatchId]);\r\n let foundBatch = null;\r\n return mutationsStore(transaction)\r\n .iterate({ index: DbMutationBatchUserMutationsIndex, range }, (key, dbBatch, control) => {\r\n if (dbBatch.userId === this.userId) {\r\n hardAssert(dbBatch.batchId >= nextBatchId);\r\n foundBatch = fromDbMutationBatch(this.serializer, dbBatch);\r\n }\r\n control.done();\r\n })\r\n .next(() => foundBatch);\r\n }\r\n getHighestUnacknowledgedBatchId(transaction) {\r\n const range = IDBKeyRange.upperBound([\r\n this.userId,\r\n Number.POSITIVE_INFINITY\r\n ]);\r\n let batchId = BATCHID_UNKNOWN;\r\n return mutationsStore(transaction)\r\n .iterate({ index: DbMutationBatchUserMutationsIndex, range, reverse: true }, (key, dbBatch, control) => {\r\n batchId = dbBatch.batchId;\r\n control.done();\r\n })\r\n .next(() => batchId);\r\n }\r\n getAllMutationBatches(transaction) {\r\n const range = IDBKeyRange.bound([this.userId, BATCHID_UNKNOWN], [this.userId, Number.POSITIVE_INFINITY]);\r\n return mutationsStore(transaction)\r\n .loadAll(DbMutationBatchUserMutationsIndex, range)\r\n .next(dbBatches => dbBatches.map(dbBatch => fromDbMutationBatch(this.serializer, dbBatch)));\r\n }\r\n getAllMutationBatchesAffectingDocumentKey(transaction, documentKey) {\r\n // Scan the document-mutation index starting with a prefix starting with\r\n // the given documentKey.\r\n const indexPrefix = newDbDocumentMutationPrefixForPath(this.userId, documentKey.path);\r\n const indexStart = IDBKeyRange.lowerBound(indexPrefix);\r\n const results = [];\r\n return documentMutationsStore(transaction)\r\n .iterate({ range: indexStart }, (indexKey, _, control) => {\r\n const [userID, encodedPath, batchId] = indexKey;\r\n // Only consider rows matching exactly the specific key of\r\n // interest. Note that because we order by path first, and we\r\n // order terminators before path separators, we'll encounter all\r\n // the index rows for documentKey contiguously. In particular, all\r\n // the rows for documentKey will occur before any rows for\r\n // documents nested in a subcollection beneath documentKey so we\r\n // can stop as soon as we hit any such row.\r\n const path = decodeResourcePath(encodedPath);\r\n if (userID !== this.userId || !documentKey.path.isEqual(path)) {\r\n control.done();\r\n return;\r\n }\r\n // Look up the mutation batch in the store.\r\n return mutationsStore(transaction)\r\n .get(batchId)\r\n .next(mutation => {\r\n if (!mutation) {\r\n throw fail();\r\n }\r\n hardAssert(mutation.userId === this.userId);\r\n results.push(fromDbMutationBatch(this.serializer, mutation));\r\n });\r\n })\r\n .next(() => results);\r\n }\r\n getAllMutationBatchesAffectingDocumentKeys(transaction, documentKeys) {\r\n let uniqueBatchIDs = new SortedSet(primitiveComparator);\r\n const promises = [];\r\n documentKeys.forEach(documentKey => {\r\n const indexStart = newDbDocumentMutationPrefixForPath(this.userId, documentKey.path);\r\n const range = IDBKeyRange.lowerBound(indexStart);\r\n const promise = documentMutationsStore(transaction).iterate({ range }, (indexKey, _, control) => {\r\n const [userID, encodedPath, batchID] = indexKey;\r\n // Only consider rows matching exactly the specific key of\r\n // interest. Note that because we order by path first, and we\r\n // order terminators before path separators, we'll encounter all\r\n // the index rows for documentKey contiguously. In particular, all\r\n // the rows for documentKey will occur before any rows for\r\n // documents nested in a subcollection beneath documentKey so we\r\n // can stop as soon as we hit any such row.\r\n const path = decodeResourcePath(encodedPath);\r\n if (userID !== this.userId || !documentKey.path.isEqual(path)) {\r\n control.done();\r\n return;\r\n }\r\n uniqueBatchIDs = uniqueBatchIDs.add(batchID);\r\n });\r\n promises.push(promise);\r\n });\r\n return PersistencePromise.waitFor(promises).next(() => this.lookupMutationBatches(transaction, uniqueBatchIDs));\r\n }\r\n getAllMutationBatchesAffectingQuery(transaction, query) {\r\n const queryPath = query.path;\r\n const immediateChildrenLength = queryPath.length + 1;\r\n // TODO(mcg): Actually implement a single-collection query\r\n //\r\n // This is actually executing an ancestor query, traversing the whole\r\n // subtree below the collection which can be horrifically inefficient for\r\n // some structures. The right way to solve this is to implement the full\r\n // value index, but that's not in the cards in the near future so this is\r\n // the best we can do for the moment.\r\n //\r\n // Since we don't yet index the actual properties in the mutations, our\r\n // current approach is to just return all mutation batches that affect\r\n // documents in the collection being queried.\r\n const indexPrefix = newDbDocumentMutationPrefixForPath(this.userId, queryPath);\r\n const indexStart = IDBKeyRange.lowerBound(indexPrefix);\r\n // Collect up unique batchIDs encountered during a scan of the index. Use a\r\n // SortedSet to accumulate batch IDs so they can be traversed in order in a\r\n // scan of the main table.\r\n let uniqueBatchIDs = new SortedSet(primitiveComparator);\r\n return documentMutationsStore(transaction)\r\n .iterate({ range: indexStart }, (indexKey, _, control) => {\r\n const [userID, encodedPath, batchID] = indexKey;\r\n const path = decodeResourcePath(encodedPath);\r\n if (userID !== this.userId || !queryPath.isPrefixOf(path)) {\r\n control.done();\r\n return;\r\n }\r\n // Rows with document keys more than one segment longer than the\r\n // query path can't be matches. For example, a query on 'rooms'\r\n // can't match the document /rooms/abc/messages/xyx.\r\n // TODO(mcg): we'll need a different scanner when we implement\r\n // ancestor queries.\r\n if (path.length !== immediateChildrenLength) {\r\n return;\r\n }\r\n uniqueBatchIDs = uniqueBatchIDs.add(batchID);\r\n })\r\n .next(() => this.lookupMutationBatches(transaction, uniqueBatchIDs));\r\n }\r\n lookupMutationBatches(transaction, batchIDs) {\r\n const results = [];\r\n const promises = [];\r\n // TODO(rockwood): Implement this using iterate.\r\n batchIDs.forEach(batchId => {\r\n promises.push(mutationsStore(transaction)\r\n .get(batchId)\r\n .next(mutation => {\r\n if (mutation === null) {\r\n throw fail();\r\n }\r\n hardAssert(mutation.userId === this.userId);\r\n results.push(fromDbMutationBatch(this.serializer, mutation));\r\n }));\r\n });\r\n return PersistencePromise.waitFor(promises).next(() => results);\r\n }\r\n removeMutationBatch(transaction, batch) {\r\n return removeMutationBatch(transaction.simpleDbTransaction, this.userId, batch).next(removedDocuments => {\r\n transaction.addOnCommittedListener(() => {\r\n this.removeCachedMutationKeys(batch.batchId);\r\n });\r\n return PersistencePromise.forEach(removedDocuments, (key) => {\r\n return this.referenceDelegate.markPotentiallyOrphaned(transaction, key);\r\n });\r\n });\r\n }\r\n /**\r\n * Clears the cached keys for a mutation batch. This method should be\r\n * called by secondary clients after they process mutation updates.\r\n *\r\n * Note that this method does not have to be called from primary clients as\r\n * the corresponding cache entries are cleared when an acknowledged or\r\n * rejected batch is removed from the mutation queue.\r\n */\r\n // PORTING NOTE: Multi-tab only\r\n removeCachedMutationKeys(batchId) {\r\n delete this.documentKeysByBatchId[batchId];\r\n }\r\n performConsistencyCheck(txn) {\r\n return this.checkEmpty(txn).next(empty => {\r\n if (!empty) {\r\n return PersistencePromise.resolve();\r\n }\r\n // Verify that there are no entries in the documentMutations index if\r\n // the queue is empty.\r\n const startRange = IDBKeyRange.lowerBound(newDbDocumentMutationPrefixForUser(this.userId));\r\n const danglingMutationReferences = [];\r\n return documentMutationsStore(txn)\r\n .iterate({ range: startRange }, (key, _, control) => {\r\n const userID = key[0];\r\n if (userID !== this.userId) {\r\n control.done();\r\n return;\r\n }\r\n else {\r\n const path = decodeResourcePath(key[1]);\r\n danglingMutationReferences.push(path);\r\n }\r\n })\r\n .next(() => {\r\n hardAssert(danglingMutationReferences.length === 0);\r\n });\r\n });\r\n }\r\n containsKey(txn, key) {\r\n return mutationQueueContainsKey(txn, this.userId, key);\r\n }\r\n // PORTING NOTE: Multi-tab only (state is held in memory in other clients).\r\n /** Returns the mutation queue's metadata from IndexedDb. */\r\n getMutationQueueMetadata(transaction) {\r\n return mutationQueuesStore(transaction)\r\n .get(this.userId)\r\n .next((metadata) => {\r\n return (metadata || {\r\n userId: this.userId,\r\n lastAcknowledgedBatchId: BATCHID_UNKNOWN,\r\n lastStreamToken: ''\r\n });\r\n });\r\n }\r\n}\r\n/**\r\n * @returns true if the mutation queue for the given user contains a pending\r\n * mutation for the given key.\r\n */\r\nfunction mutationQueueContainsKey(txn, userId, key) {\r\n const indexKey = newDbDocumentMutationPrefixForPath(userId, key.path);\r\n const encodedPath = indexKey[1];\r\n const startRange = IDBKeyRange.lowerBound(indexKey);\r\n let containsKey = false;\r\n return documentMutationsStore(txn)\r\n .iterate({ range: startRange, keysOnly: true }, (key, value, control) => {\r\n const [userID, keyPath, /*batchID*/ _] = key;\r\n if (userID === userId && keyPath === encodedPath) {\r\n containsKey = true;\r\n }\r\n control.done();\r\n })\r\n .next(() => containsKey);\r\n}\r\n/** Returns true if any mutation queue contains the given document. */\r\nfunction mutationQueuesContainKey(txn, docKey) {\r\n let found = false;\r\n return mutationQueuesStore(txn)\r\n .iterateSerial(userId => {\r\n return mutationQueueContainsKey(txn, userId, docKey).next(containsKey => {\r\n if (containsKey) {\r\n found = true;\r\n }\r\n return PersistencePromise.resolve(!containsKey);\r\n });\r\n })\r\n .next(() => found);\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the mutations object store.\r\n */\r\nfunction mutationsStore(txn) {\r\n return getStore(txn, DbMutationBatchStore);\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the mutationQueues object store.\r\n */\r\nfunction documentMutationsStore(txn) {\r\n return getStore(txn, DbDocumentMutationStore);\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the mutationQueues object store.\r\n */\r\nfunction mutationQueuesStore(txn) {\r\n return getStore(txn, DbMutationQueueStore);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Offset to ensure non-overlapping target ids. */\r\nconst OFFSET = 2;\r\n/**\r\n * Generates monotonically increasing target IDs for sending targets to the\r\n * watch stream.\r\n *\r\n * The client constructs two generators, one for the target cache, and one for\r\n * for the sync engine (to generate limbo documents targets). These\r\n * generators produce non-overlapping IDs (by using even and odd IDs\r\n * respectively).\r\n *\r\n * By separating the target ID space, the query cache can generate target IDs\r\n * that persist across client restarts, while sync engine can independently\r\n * generate in-memory target IDs that are transient and can be reused after a\r\n * restart.\r\n */\r\nclass TargetIdGenerator {\r\n constructor(lastId) {\r\n this.lastId = lastId;\r\n }\r\n next() {\r\n this.lastId += OFFSET;\r\n return this.lastId;\r\n }\r\n static forTargetCache() {\r\n // The target cache generator must return '2' in its first call to `next()`\r\n // as there is no differentiation in the protocol layer between an unset\r\n // number and the number '0'. If we were to sent a target with target ID\r\n // '0', the backend would consider it unset and replace it with its own ID.\r\n return new TargetIdGenerator(2 - OFFSET);\r\n }\r\n static forSyncEngine() {\r\n // Sync engine assigns target IDs for limbo document detection.\r\n return new TargetIdGenerator(1 - OFFSET);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass IndexedDbTargetCache {\r\n constructor(referenceDelegate, serializer) {\r\n this.referenceDelegate = referenceDelegate;\r\n this.serializer = serializer;\r\n }\r\n // PORTING NOTE: We don't cache global metadata for the target cache, since\r\n // some of it (in particular `highestTargetId`) can be modified by secondary\r\n // tabs. We could perhaps be more granular (and e.g. still cache\r\n // `lastRemoteSnapshotVersion` in memory) but for simplicity we currently go\r\n // to IndexedDb whenever we need to read metadata. We can revisit if it turns\r\n // out to have a meaningful performance impact.\r\n allocateTargetId(transaction) {\r\n return this.retrieveMetadata(transaction).next(metadata => {\r\n const targetIdGenerator = new TargetIdGenerator(metadata.highestTargetId);\r\n metadata.highestTargetId = targetIdGenerator.next();\r\n return this.saveMetadata(transaction, metadata).next(() => metadata.highestTargetId);\r\n });\r\n }\r\n getLastRemoteSnapshotVersion(transaction) {\r\n return this.retrieveMetadata(transaction).next(metadata => {\r\n return SnapshotVersion.fromTimestamp(new Timestamp(metadata.lastRemoteSnapshotVersion.seconds, metadata.lastRemoteSnapshotVersion.nanoseconds));\r\n });\r\n }\r\n getHighestSequenceNumber(transaction) {\r\n return this.retrieveMetadata(transaction).next(targetGlobal => targetGlobal.highestListenSequenceNumber);\r\n }\r\n setTargetsMetadata(transaction, highestListenSequenceNumber, lastRemoteSnapshotVersion) {\r\n return this.retrieveMetadata(transaction).next(metadata => {\r\n metadata.highestListenSequenceNumber = highestListenSequenceNumber;\r\n if (lastRemoteSnapshotVersion) {\r\n metadata.lastRemoteSnapshotVersion =\r\n lastRemoteSnapshotVersion.toTimestamp();\r\n }\r\n if (highestListenSequenceNumber > metadata.highestListenSequenceNumber) {\r\n metadata.highestListenSequenceNumber = highestListenSequenceNumber;\r\n }\r\n return this.saveMetadata(transaction, metadata);\r\n });\r\n }\r\n addTargetData(transaction, targetData) {\r\n return this.saveTargetData(transaction, targetData).next(() => {\r\n return this.retrieveMetadata(transaction).next(metadata => {\r\n metadata.targetCount += 1;\r\n this.updateMetadataFromTargetData(targetData, metadata);\r\n return this.saveMetadata(transaction, metadata);\r\n });\r\n });\r\n }\r\n updateTargetData(transaction, targetData) {\r\n return this.saveTargetData(transaction, targetData);\r\n }\r\n removeTargetData(transaction, targetData) {\r\n return this.removeMatchingKeysForTargetId(transaction, targetData.targetId)\r\n .next(() => targetsStore(transaction).delete(targetData.targetId))\r\n .next(() => this.retrieveMetadata(transaction))\r\n .next(metadata => {\r\n hardAssert(metadata.targetCount > 0);\r\n metadata.targetCount -= 1;\r\n return this.saveMetadata(transaction, metadata);\r\n });\r\n }\r\n /**\r\n * Drops any targets with sequence number less than or equal to the upper bound, excepting those\r\n * present in `activeTargetIds`. Document associations for the removed targets are also removed.\r\n * Returns the number of targets removed.\r\n */\r\n removeTargets(txn, upperBound, activeTargetIds) {\r\n let count = 0;\r\n const promises = [];\r\n return targetsStore(txn)\r\n .iterate((key, value) => {\r\n const targetData = fromDbTarget(value);\r\n if (targetData.sequenceNumber <= upperBound &&\r\n activeTargetIds.get(targetData.targetId) === null) {\r\n count++;\r\n promises.push(this.removeTargetData(txn, targetData));\r\n }\r\n })\r\n .next(() => PersistencePromise.waitFor(promises))\r\n .next(() => count);\r\n }\r\n /**\r\n * Call provided function with each `TargetData` that we have cached.\r\n */\r\n forEachTarget(txn, f) {\r\n return targetsStore(txn).iterate((key, value) => {\r\n const targetData = fromDbTarget(value);\r\n f(targetData);\r\n });\r\n }\r\n retrieveMetadata(transaction) {\r\n return globalTargetStore(transaction)\r\n .get(DbTargetGlobalKey)\r\n .next(metadata => {\r\n hardAssert(metadata !== null);\r\n return metadata;\r\n });\r\n }\r\n saveMetadata(transaction, metadata) {\r\n return globalTargetStore(transaction).put(DbTargetGlobalKey, metadata);\r\n }\r\n saveTargetData(transaction, targetData) {\r\n return targetsStore(transaction).put(toDbTarget(this.serializer, targetData));\r\n }\r\n /**\r\n * In-place updates the provided metadata to account for values in the given\r\n * TargetData. Saving is done separately. Returns true if there were any\r\n * changes to the metadata.\r\n */\r\n updateMetadataFromTargetData(targetData, metadata) {\r\n let updated = false;\r\n if (targetData.targetId > metadata.highestTargetId) {\r\n metadata.highestTargetId = targetData.targetId;\r\n updated = true;\r\n }\r\n if (targetData.sequenceNumber > metadata.highestListenSequenceNumber) {\r\n metadata.highestListenSequenceNumber = targetData.sequenceNumber;\r\n updated = true;\r\n }\r\n return updated;\r\n }\r\n getTargetCount(transaction) {\r\n return this.retrieveMetadata(transaction).next(metadata => metadata.targetCount);\r\n }\r\n getTargetData(transaction, target) {\r\n // Iterating by the canonicalId may yield more than one result because\r\n // canonicalId values are not required to be unique per target. This query\r\n // depends on the queryTargets index to be efficient.\r\n const canonicalId = canonifyTarget(target);\r\n const range = IDBKeyRange.bound([canonicalId, Number.NEGATIVE_INFINITY], [canonicalId, Number.POSITIVE_INFINITY]);\r\n let result = null;\r\n return targetsStore(transaction)\r\n .iterate({ range, index: DbTargetQueryTargetsIndexName }, (key, value, control) => {\r\n const found = fromDbTarget(value);\r\n // After finding a potential match, check that the target is\r\n // actually equal to the requested target.\r\n if (targetEquals(target, found.target)) {\r\n result = found;\r\n control.done();\r\n }\r\n })\r\n .next(() => result);\r\n }\r\n addMatchingKeys(txn, keys, targetId) {\r\n // PORTING NOTE: The reverse index (documentsTargets) is maintained by\r\n // IndexedDb.\r\n const promises = [];\r\n const store = documentTargetStore(txn);\r\n keys.forEach(key => {\r\n const path = encodeResourcePath(key.path);\r\n promises.push(store.put({ targetId, path }));\r\n promises.push(this.referenceDelegate.addReference(txn, targetId, key));\r\n });\r\n return PersistencePromise.waitFor(promises);\r\n }\r\n removeMatchingKeys(txn, keys, targetId) {\r\n // PORTING NOTE: The reverse index (documentsTargets) is maintained by\r\n // IndexedDb.\r\n const store = documentTargetStore(txn);\r\n return PersistencePromise.forEach(keys, (key) => {\r\n const path = encodeResourcePath(key.path);\r\n return PersistencePromise.waitFor([\r\n store.delete([targetId, path]),\r\n this.referenceDelegate.removeReference(txn, targetId, key)\r\n ]);\r\n });\r\n }\r\n removeMatchingKeysForTargetId(txn, targetId) {\r\n const store = documentTargetStore(txn);\r\n const range = IDBKeyRange.bound([targetId], [targetId + 1], \r\n /*lowerOpen=*/ false, \r\n /*upperOpen=*/ true);\r\n return store.delete(range);\r\n }\r\n getMatchingKeysForTargetId(txn, targetId) {\r\n const range = IDBKeyRange.bound([targetId], [targetId + 1], \r\n /*lowerOpen=*/ false, \r\n /*upperOpen=*/ true);\r\n const store = documentTargetStore(txn);\r\n let result = documentKeySet();\r\n return store\r\n .iterate({ range, keysOnly: true }, (key, _, control) => {\r\n const path = decodeResourcePath(key[1]);\r\n const docKey = new DocumentKey(path);\r\n result = result.add(docKey);\r\n })\r\n .next(() => result);\r\n }\r\n containsKey(txn, key) {\r\n const path = encodeResourcePath(key.path);\r\n const range = IDBKeyRange.bound([path], [immediateSuccessor(path)], \r\n /*lowerOpen=*/ false, \r\n /*upperOpen=*/ true);\r\n let count = 0;\r\n return documentTargetStore(txn)\r\n .iterate({\r\n index: DbTargetDocumentDocumentTargetsIndex,\r\n keysOnly: true,\r\n range\r\n }, ([targetId, path], _, control) => {\r\n // Having a sentinel row for a document does not count as containing that document;\r\n // For the target cache, containing the document means the document is part of some\r\n // target.\r\n if (targetId !== 0) {\r\n count++;\r\n control.done();\r\n }\r\n })\r\n .next(() => count > 0);\r\n }\r\n /**\r\n * Looks up a TargetData entry by target ID.\r\n *\r\n * @param targetId - The target ID of the TargetData entry to look up.\r\n * @returns The cached TargetData entry, or null if the cache has no entry for\r\n * the target.\r\n */\r\n // PORTING NOTE: Multi-tab only.\r\n getTargetDataForTarget(transaction, targetId) {\r\n return targetsStore(transaction)\r\n .get(targetId)\r\n .next(found => {\r\n if (found) {\r\n return fromDbTarget(found);\r\n }\r\n else {\r\n return null;\r\n }\r\n });\r\n }\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the queries object store.\r\n */\r\nfunction targetsStore(txn) {\r\n return getStore(txn, DbTargetStore);\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the target globals object store.\r\n */\r\nfunction globalTargetStore(txn) {\r\n return getStore(txn, DbTargetGlobalStore);\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the document target object store.\r\n */\r\nfunction documentTargetStore(txn) {\r\n return getStore(txn, DbTargetDocumentStore);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2018 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst GC_DID_NOT_RUN = {\r\n didRun: false,\r\n sequenceNumbersCollected: 0,\r\n targetsRemoved: 0,\r\n documentsRemoved: 0\r\n};\r\nconst LRU_COLLECTION_DISABLED = -1;\r\nconst LRU_DEFAULT_CACHE_SIZE_BYTES = 40 * 1024 * 1024;\r\nclass LruParams {\r\n constructor(\r\n // When we attempt to collect, we will only do so if the cache size is greater than this\r\n // threshold. Passing `COLLECTION_DISABLED` here will cause collection to always be skipped.\r\n cacheSizeCollectionThreshold, \r\n // The percentage of sequence numbers that we will attempt to collect\r\n percentileToCollect, \r\n // A cap on the total number of sequence numbers that will be collected. This prevents\r\n // us from collecting a huge number of sequence numbers if the cache has grown very large.\r\n maximumSequenceNumbersToCollect) {\r\n this.cacheSizeCollectionThreshold = cacheSizeCollectionThreshold;\r\n this.percentileToCollect = percentileToCollect;\r\n this.maximumSequenceNumbersToCollect = maximumSequenceNumbersToCollect;\r\n }\r\n static withCacheSize(cacheSize) {\r\n return new LruParams(cacheSize, LruParams.DEFAULT_COLLECTION_PERCENTILE, LruParams.DEFAULT_MAX_SEQUENCE_NUMBERS_TO_COLLECT);\r\n }\r\n}\r\nLruParams.DEFAULT_COLLECTION_PERCENTILE = 10;\r\nLruParams.DEFAULT_MAX_SEQUENCE_NUMBERS_TO_COLLECT = 1000;\r\nLruParams.DEFAULT = new LruParams(LRU_DEFAULT_CACHE_SIZE_BYTES, LruParams.DEFAULT_COLLECTION_PERCENTILE, LruParams.DEFAULT_MAX_SEQUENCE_NUMBERS_TO_COLLECT);\r\nLruParams.DISABLED = new LruParams(LRU_COLLECTION_DISABLED, 0, 0);\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$e = 'LruGarbageCollector';\r\nconst LRU_MINIMUM_CACHE_SIZE_BYTES = 1 * 1024 * 1024;\r\n/** How long we wait to try running LRU GC after SDK initialization. */\r\nconst INITIAL_GC_DELAY_MS = 1 * 60 * 1000;\r\n/** Minimum amount of time between GC checks, after the first one. */\r\nconst REGULAR_GC_DELAY_MS = 5 * 60 * 1000;\r\nfunction bufferEntryComparator([aSequence, aIndex], [bSequence, bIndex]) {\r\n const seqCmp = primitiveComparator(aSequence, bSequence);\r\n if (seqCmp === 0) {\r\n // This order doesn't matter, but we can bias against churn by sorting\r\n // entries created earlier as less than newer entries.\r\n return primitiveComparator(aIndex, bIndex);\r\n }\r\n else {\r\n return seqCmp;\r\n }\r\n}\r\n/**\r\n * Used to calculate the nth sequence number. Keeps a rolling buffer of the\r\n * lowest n values passed to `addElement`, and finally reports the largest of\r\n * them in `maxValue`.\r\n */\r\nclass RollingSequenceNumberBuffer {\r\n constructor(maxElements) {\r\n this.maxElements = maxElements;\r\n this.buffer = new SortedSet(bufferEntryComparator);\r\n this.previousIndex = 0;\r\n }\r\n nextIndex() {\r\n return ++this.previousIndex;\r\n }\r\n addElement(sequenceNumber) {\r\n const entry = [sequenceNumber, this.nextIndex()];\r\n if (this.buffer.size < this.maxElements) {\r\n this.buffer = this.buffer.add(entry);\r\n }\r\n else {\r\n const highestValue = this.buffer.last();\r\n if (bufferEntryComparator(entry, highestValue) < 0) {\r\n this.buffer = this.buffer.delete(highestValue).add(entry);\r\n }\r\n }\r\n }\r\n get maxValue() {\r\n // Guaranteed to be non-empty. If we decide we are not collecting any\r\n // sequence numbers, nthSequenceNumber below short-circuits. If we have\r\n // decided that we are collecting n sequence numbers, it's because n is some\r\n // percentage of the existing sequence numbers. That means we should never\r\n // be in a situation where we are collecting sequence numbers but don't\r\n // actually have any.\r\n return this.buffer.last()[0];\r\n }\r\n}\r\n/**\r\n * This class is responsible for the scheduling of LRU garbage collection. It handles checking\r\n * whether or not GC is enabled, as well as which delay to use before the next run.\r\n */\r\nclass LruScheduler {\r\n constructor(garbageCollector, asyncQueue, localStore) {\r\n this.garbageCollector = garbageCollector;\r\n this.asyncQueue = asyncQueue;\r\n this.localStore = localStore;\r\n this.gcTask = null;\r\n }\r\n start() {\r\n if (this.garbageCollector.params.cacheSizeCollectionThreshold !==\r\n LRU_COLLECTION_DISABLED) {\r\n this.scheduleGC(INITIAL_GC_DELAY_MS);\r\n }\r\n }\r\n stop() {\r\n if (this.gcTask) {\r\n this.gcTask.cancel();\r\n this.gcTask = null;\r\n }\r\n }\r\n get started() {\r\n return this.gcTask !== null;\r\n }\r\n scheduleGC(delay) {\r\n logDebug(LOG_TAG$e, `Garbage collection scheduled in ${delay}ms`);\r\n this.gcTask = this.asyncQueue.enqueueAfterDelay(\"lru_garbage_collection\" /* TimerId.LruGarbageCollection */, delay, async () => {\r\n this.gcTask = null;\r\n try {\r\n await this.localStore.collectGarbage(this.garbageCollector);\r\n }\r\n catch (e) {\r\n if (isIndexedDbTransactionError(e)) {\r\n logDebug(LOG_TAG$e, 'Ignoring IndexedDB error during garbage collection: ', e);\r\n }\r\n else {\r\n await ignoreIfPrimaryLeaseLoss(e);\r\n }\r\n }\r\n await this.scheduleGC(REGULAR_GC_DELAY_MS);\r\n });\r\n }\r\n}\r\n/** Implements the steps for LRU garbage collection. */\r\nclass LruGarbageCollectorImpl {\r\n constructor(delegate, params) {\r\n this.delegate = delegate;\r\n this.params = params;\r\n }\r\n calculateTargetCount(txn, percentile) {\r\n return this.delegate.getSequenceNumberCount(txn).next(targetCount => {\r\n return Math.floor((percentile / 100.0) * targetCount);\r\n });\r\n }\r\n nthSequenceNumber(txn, n) {\r\n if (n === 0) {\r\n return PersistencePromise.resolve(ListenSequence.INVALID);\r\n }\r\n const buffer = new RollingSequenceNumberBuffer(n);\r\n return this.delegate\r\n .forEachTarget(txn, target => buffer.addElement(target.sequenceNumber))\r\n .next(() => {\r\n return this.delegate.forEachOrphanedDocumentSequenceNumber(txn, sequenceNumber => buffer.addElement(sequenceNumber));\r\n })\r\n .next(() => buffer.maxValue);\r\n }\r\n removeTargets(txn, upperBound, activeTargetIds) {\r\n return this.delegate.removeTargets(txn, upperBound, activeTargetIds);\r\n }\r\n removeOrphanedDocuments(txn, upperBound) {\r\n return this.delegate.removeOrphanedDocuments(txn, upperBound);\r\n }\r\n collect(txn, activeTargetIds) {\r\n if (this.params.cacheSizeCollectionThreshold === LRU_COLLECTION_DISABLED) {\r\n logDebug('LruGarbageCollector', 'Garbage collection skipped; disabled');\r\n return PersistencePromise.resolve(GC_DID_NOT_RUN);\r\n }\r\n return this.getCacheSize(txn).next(cacheSize => {\r\n if (cacheSize < this.params.cacheSizeCollectionThreshold) {\r\n logDebug('LruGarbageCollector', `Garbage collection skipped; Cache size ${cacheSize} ` +\r\n `is lower than threshold ${this.params.cacheSizeCollectionThreshold}`);\r\n return GC_DID_NOT_RUN;\r\n }\r\n else {\r\n return this.runGarbageCollection(txn, activeTargetIds);\r\n }\r\n });\r\n }\r\n getCacheSize(txn) {\r\n return this.delegate.getCacheSize(txn);\r\n }\r\n runGarbageCollection(txn, activeTargetIds) {\r\n let upperBoundSequenceNumber;\r\n let sequenceNumbersToCollect, targetsRemoved;\r\n // Timestamps for various pieces of the process\r\n let countedTargetsTs, foundUpperBoundTs, removedTargetsTs, removedDocumentsTs;\r\n const startTs = Date.now();\r\n return this.calculateTargetCount(txn, this.params.percentileToCollect)\r\n .next(sequenceNumbers => {\r\n // Cap at the configured max\r\n if (sequenceNumbers > this.params.maximumSequenceNumbersToCollect) {\r\n logDebug('LruGarbageCollector', 'Capping sequence numbers to collect down ' +\r\n `to the maximum of ${this.params.maximumSequenceNumbersToCollect} ` +\r\n `from ${sequenceNumbers}`);\r\n sequenceNumbersToCollect =\r\n this.params.maximumSequenceNumbersToCollect;\r\n }\r\n else {\r\n sequenceNumbersToCollect = sequenceNumbers;\r\n }\r\n countedTargetsTs = Date.now();\r\n return this.nthSequenceNumber(txn, sequenceNumbersToCollect);\r\n })\r\n .next(upperBound => {\r\n upperBoundSequenceNumber = upperBound;\r\n foundUpperBoundTs = Date.now();\r\n return this.removeTargets(txn, upperBoundSequenceNumber, activeTargetIds);\r\n })\r\n .next(numTargetsRemoved => {\r\n targetsRemoved = numTargetsRemoved;\r\n removedTargetsTs = Date.now();\r\n return this.removeOrphanedDocuments(txn, upperBoundSequenceNumber);\r\n })\r\n .next(documentsRemoved => {\r\n removedDocumentsTs = Date.now();\r\n if (getLogLevel() <= LogLevel.DEBUG) {\r\n const desc = 'LRU Garbage Collection\\n' +\r\n `\\tCounted targets in ${countedTargetsTs - startTs}ms\\n` +\r\n `\\tDetermined least recently used ${sequenceNumbersToCollect} in ` +\r\n `${foundUpperBoundTs - countedTargetsTs}ms\\n` +\r\n `\\tRemoved ${targetsRemoved} targets in ` +\r\n `${removedTargetsTs - foundUpperBoundTs}ms\\n` +\r\n `\\tRemoved ${documentsRemoved} documents in ` +\r\n `${removedDocumentsTs - removedTargetsTs}ms\\n` +\r\n `Total Duration: ${removedDocumentsTs - startTs}ms`;\r\n logDebug('LruGarbageCollector', desc);\r\n }\r\n return PersistencePromise.resolve({\r\n didRun: true,\r\n sequenceNumbersCollected: sequenceNumbersToCollect,\r\n targetsRemoved,\r\n documentsRemoved\r\n });\r\n });\r\n }\r\n}\r\nfunction newLruGarbageCollector(delegate, params) {\r\n return new LruGarbageCollectorImpl(delegate, params);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Provides LRU functionality for IndexedDB persistence. */\r\nclass IndexedDbLruDelegateImpl {\r\n constructor(db, params) {\r\n this.db = db;\r\n this.garbageCollector = newLruGarbageCollector(this, params);\r\n }\r\n getSequenceNumberCount(txn) {\r\n const docCountPromise = this.orphanedDocumentCount(txn);\r\n const targetCountPromise = this.db.getTargetCache().getTargetCount(txn);\r\n return targetCountPromise.next(targetCount => docCountPromise.next(docCount => targetCount + docCount));\r\n }\r\n orphanedDocumentCount(txn) {\r\n let orphanedCount = 0;\r\n return this.forEachOrphanedDocumentSequenceNumber(txn, _ => {\r\n orphanedCount++;\r\n }).next(() => orphanedCount);\r\n }\r\n forEachTarget(txn, f) {\r\n return this.db.getTargetCache().forEachTarget(txn, f);\r\n }\r\n forEachOrphanedDocumentSequenceNumber(txn, f) {\r\n return this.forEachOrphanedDocument(txn, (docKey, sequenceNumber) => f(sequenceNumber));\r\n }\r\n addReference(txn, targetId, key) {\r\n return writeSentinelKey(txn, key);\r\n }\r\n removeReference(txn, targetId, key) {\r\n return writeSentinelKey(txn, key);\r\n }\r\n removeTargets(txn, upperBound, activeTargetIds) {\r\n return this.db.getTargetCache().removeTargets(txn, upperBound, activeTargetIds);\r\n }\r\n markPotentiallyOrphaned(txn, key) {\r\n return writeSentinelKey(txn, key);\r\n }\r\n /**\r\n * Returns true if anything would prevent this document from being garbage\r\n * collected, given that the document in question is not present in any\r\n * targets and has a sequence number less than or equal to the upper bound for\r\n * the collection run.\r\n */\r\n isPinned(txn, docKey) {\r\n return mutationQueuesContainKey(txn, docKey);\r\n }\r\n removeOrphanedDocuments(txn, upperBound) {\r\n const documentCache = this.db.getRemoteDocumentCache();\r\n const changeBuffer = documentCache.newChangeBuffer();\r\n const promises = [];\r\n let documentCount = 0;\r\n const iteration = this.forEachOrphanedDocument(txn, (docKey, sequenceNumber) => {\r\n if (sequenceNumber <= upperBound) {\r\n const p = this.isPinned(txn, docKey).next(isPinned => {\r\n if (!isPinned) {\r\n documentCount++;\r\n // Our size accounting requires us to read all documents before\r\n // removing them.\r\n return changeBuffer.getEntry(txn, docKey).next(() => {\r\n changeBuffer.removeEntry(docKey, SnapshotVersion.min());\r\n return documentTargetStore(txn).delete(sentinelKey$1(docKey));\r\n });\r\n }\r\n });\r\n promises.push(p);\r\n }\r\n });\r\n return iteration\r\n .next(() => PersistencePromise.waitFor(promises))\r\n .next(() => changeBuffer.apply(txn))\r\n .next(() => documentCount);\r\n }\r\n removeTarget(txn, targetData) {\r\n const updated = targetData.withSequenceNumber(txn.currentSequenceNumber);\r\n return this.db.getTargetCache().updateTargetData(txn, updated);\r\n }\r\n updateLimboDocument(txn, key) {\r\n return writeSentinelKey(txn, key);\r\n }\r\n /**\r\n * Call provided function for each document in the cache that is 'orphaned'. Orphaned\r\n * means not a part of any target, so the only entry in the target-document index for\r\n * that document will be the sentinel row (targetId 0), which will also have the sequence\r\n * number for the last time the document was accessed.\r\n */\r\n forEachOrphanedDocument(txn, f) {\r\n const store = documentTargetStore(txn);\r\n let nextToReport = ListenSequence.INVALID;\r\n let nextPath;\r\n return store\r\n .iterate({\r\n index: DbTargetDocumentDocumentTargetsIndex\r\n }, ([targetId, docKey], { path, sequenceNumber }) => {\r\n if (targetId === 0) {\r\n // if nextToReport is valid, report it, this is a new key so the\r\n // last one must not be a member of any targets.\r\n if (nextToReport !== ListenSequence.INVALID) {\r\n f(new DocumentKey(decodeResourcePath(nextPath)), nextToReport);\r\n }\r\n // set nextToReport to be this sequence number. It's the next one we\r\n // might report, if we don't find any targets for this document.\r\n // Note that the sequence number must be defined when the targetId\r\n // is 0.\r\n nextToReport = sequenceNumber;\r\n nextPath = path;\r\n }\r\n else {\r\n // set nextToReport to be invalid, we know we don't need to report\r\n // this one since we found a target for it.\r\n nextToReport = ListenSequence.INVALID;\r\n }\r\n })\r\n .next(() => {\r\n // Since we report sequence numbers after getting to the next key, we\r\n // need to check if the last key we iterated over was an orphaned\r\n // document and report it.\r\n if (nextToReport !== ListenSequence.INVALID) {\r\n f(new DocumentKey(decodeResourcePath(nextPath)), nextToReport);\r\n }\r\n });\r\n }\r\n getCacheSize(txn) {\r\n return this.db.getRemoteDocumentCache().getSize(txn);\r\n }\r\n}\r\nfunction sentinelKey$1(key) {\r\n return [0, encodeResourcePath(key.path)];\r\n}\r\n/**\r\n * @returns A value suitable for writing a sentinel row in the target-document\r\n * store.\r\n */\r\nfunction sentinelRow(key, sequenceNumber) {\r\n return { targetId: 0, path: encodeResourcePath(key.path), sequenceNumber };\r\n}\r\nfunction writeSentinelKey(txn, key) {\r\n return documentTargetStore(txn).put(sentinelRow(key, txn.currentSequenceNumber));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An in-memory buffer of entries to be written to a RemoteDocumentCache.\r\n * It can be used to batch up a set of changes to be written to the cache, but\r\n * additionally supports reading entries back with the `getEntry()` method,\r\n * falling back to the underlying RemoteDocumentCache if no entry is\r\n * buffered.\r\n *\r\n * Entries added to the cache *must* be read first. This is to facilitate\r\n * calculating the size delta of the pending changes.\r\n *\r\n * PORTING NOTE: This class was implemented then removed from other platforms.\r\n * If byte-counting ends up being needed on the other platforms, consider\r\n * porting this class as part of that implementation work.\r\n */\r\nclass RemoteDocumentChangeBuffer {\r\n constructor() {\r\n // A mapping of document key to the new cache entry that should be written.\r\n this.changes = new ObjectMap(key => key.toString(), (l, r) => l.isEqual(r));\r\n this.changesApplied = false;\r\n }\r\n /**\r\n * Buffers a `RemoteDocumentCache.addEntry()` call.\r\n *\r\n * You can only modify documents that have already been retrieved via\r\n * `getEntry()/getEntries()` (enforced via IndexedDbs `apply()`).\r\n */\r\n addEntry(document) {\r\n this.assertNotApplied();\r\n this.changes.set(document.key, document);\r\n }\r\n /**\r\n * Buffers a `RemoteDocumentCache.removeEntry()` call.\r\n *\r\n * You can only remove documents that have already been retrieved via\r\n * `getEntry()/getEntries()` (enforced via IndexedDbs `apply()`).\r\n */\r\n removeEntry(key, readTime) {\r\n this.assertNotApplied();\r\n this.changes.set(key, MutableDocument.newInvalidDocument(key).setReadTime(readTime));\r\n }\r\n /**\r\n * Looks up an entry in the cache. The buffered changes will first be checked,\r\n * and if no buffered change applies, this will forward to\r\n * `RemoteDocumentCache.getEntry()`.\r\n *\r\n * @param transaction - The transaction in which to perform any persistence\r\n * operations.\r\n * @param documentKey - The key of the entry to look up.\r\n * @returns The cached document or an invalid document if we have nothing\r\n * cached.\r\n */\r\n getEntry(transaction, documentKey) {\r\n this.assertNotApplied();\r\n const bufferedEntry = this.changes.get(documentKey);\r\n if (bufferedEntry !== undefined) {\r\n return PersistencePromise.resolve(bufferedEntry);\r\n }\r\n else {\r\n return this.getFromCache(transaction, documentKey);\r\n }\r\n }\r\n /**\r\n * Looks up several entries in the cache, forwarding to\r\n * `RemoteDocumentCache.getEntry()`.\r\n *\r\n * @param transaction - The transaction in which to perform any persistence\r\n * operations.\r\n * @param documentKeys - The keys of the entries to look up.\r\n * @returns A map of cached documents, indexed by key. If an entry cannot be\r\n * found, the corresponding key will be mapped to an invalid document.\r\n */\r\n getEntries(transaction, documentKeys) {\r\n return this.getAllFromCache(transaction, documentKeys);\r\n }\r\n /**\r\n * Applies buffered changes to the underlying RemoteDocumentCache, using\r\n * the provided transaction.\r\n */\r\n apply(transaction) {\r\n this.assertNotApplied();\r\n this.changesApplied = true;\r\n return this.applyChanges(transaction);\r\n }\r\n /** Helper to assert this.changes is not null */\r\n assertNotApplied() {\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The RemoteDocumentCache for IndexedDb. To construct, invoke\r\n * `newIndexedDbRemoteDocumentCache()`.\r\n */\r\nclass IndexedDbRemoteDocumentCacheImpl {\r\n constructor(serializer) {\r\n this.serializer = serializer;\r\n }\r\n setIndexManager(indexManager) {\r\n this.indexManager = indexManager;\r\n }\r\n /**\r\n * Adds the supplied entries to the cache.\r\n *\r\n * All calls of `addEntry` are required to go through the RemoteDocumentChangeBuffer\r\n * returned by `newChangeBuffer()` to ensure proper accounting of metadata.\r\n */\r\n addEntry(transaction, key, doc) {\r\n const documentStore = remoteDocumentsStore(transaction);\r\n return documentStore.put(doc);\r\n }\r\n /**\r\n * Removes a document from the cache.\r\n *\r\n * All calls of `removeEntry` are required to go through the RemoteDocumentChangeBuffer\r\n * returned by `newChangeBuffer()` to ensure proper accounting of metadata.\r\n */\r\n removeEntry(transaction, documentKey, readTime) {\r\n const store = remoteDocumentsStore(transaction);\r\n return store.delete(dbReadTimeKey(documentKey, readTime));\r\n }\r\n /**\r\n * Updates the current cache size.\r\n *\r\n * Callers to `addEntry()` and `removeEntry()` *must* call this afterwards to update the\r\n * cache's metadata.\r\n */\r\n updateMetadata(transaction, sizeDelta) {\r\n return this.getMetadata(transaction).next(metadata => {\r\n metadata.byteSize += sizeDelta;\r\n return this.setMetadata(transaction, metadata);\r\n });\r\n }\r\n getEntry(transaction, documentKey) {\r\n let doc = MutableDocument.newInvalidDocument(documentKey);\r\n return remoteDocumentsStore(transaction)\r\n .iterate({\r\n index: DbRemoteDocumentDocumentKeyIndex,\r\n range: IDBKeyRange.only(dbKey(documentKey))\r\n }, (_, dbRemoteDoc) => {\r\n doc = this.maybeDecodeDocument(documentKey, dbRemoteDoc);\r\n })\r\n .next(() => doc);\r\n }\r\n /**\r\n * Looks up an entry in the cache.\r\n *\r\n * @param documentKey - The key of the entry to look up.\r\n * @returns The cached document entry and its size.\r\n */\r\n getSizedEntry(transaction, documentKey) {\r\n let result = {\r\n size: 0,\r\n document: MutableDocument.newInvalidDocument(documentKey)\r\n };\r\n return remoteDocumentsStore(transaction)\r\n .iterate({\r\n index: DbRemoteDocumentDocumentKeyIndex,\r\n range: IDBKeyRange.only(dbKey(documentKey))\r\n }, (_, dbRemoteDoc) => {\r\n result = {\r\n document: this.maybeDecodeDocument(documentKey, dbRemoteDoc),\r\n size: dbDocumentSize(dbRemoteDoc)\r\n };\r\n })\r\n .next(() => result);\r\n }\r\n getEntries(transaction, documentKeys) {\r\n let results = mutableDocumentMap();\r\n return this.forEachDbEntry(transaction, documentKeys, (key, dbRemoteDoc) => {\r\n const doc = this.maybeDecodeDocument(key, dbRemoteDoc);\r\n results = results.insert(key, doc);\r\n }).next(() => results);\r\n }\r\n /**\r\n * Looks up several entries in the cache.\r\n *\r\n * @param documentKeys - The set of keys entries to look up.\r\n * @returns A map of documents indexed by key and a map of sizes indexed by\r\n * key (zero if the document does not exist).\r\n */\r\n getSizedEntries(transaction, documentKeys) {\r\n let results = mutableDocumentMap();\r\n let sizeMap = new SortedMap(DocumentKey.comparator);\r\n return this.forEachDbEntry(transaction, documentKeys, (key, dbRemoteDoc) => {\r\n const doc = this.maybeDecodeDocument(key, dbRemoteDoc);\r\n results = results.insert(key, doc);\r\n sizeMap = sizeMap.insert(key, dbDocumentSize(dbRemoteDoc));\r\n }).next(() => {\r\n return { documents: results, sizeMap };\r\n });\r\n }\r\n forEachDbEntry(transaction, documentKeys, callback) {\r\n if (documentKeys.isEmpty()) {\r\n return PersistencePromise.resolve();\r\n }\r\n let sortedKeys = new SortedSet(dbKeyComparator);\r\n documentKeys.forEach(e => (sortedKeys = sortedKeys.add(e)));\r\n const range = IDBKeyRange.bound(dbKey(sortedKeys.first()), dbKey(sortedKeys.last()));\r\n const keyIter = sortedKeys.getIterator();\r\n let nextKey = keyIter.getNext();\r\n return remoteDocumentsStore(transaction)\r\n .iterate({ index: DbRemoteDocumentDocumentKeyIndex, range }, (_, dbRemoteDoc, control) => {\r\n const potentialKey = DocumentKey.fromSegments([\r\n ...dbRemoteDoc.prefixPath,\r\n dbRemoteDoc.collectionGroup,\r\n dbRemoteDoc.documentId\r\n ]);\r\n // Go through keys not found in cache.\r\n while (nextKey && dbKeyComparator(nextKey, potentialKey) < 0) {\r\n callback(nextKey, null);\r\n nextKey = keyIter.getNext();\r\n }\r\n if (nextKey && nextKey.isEqual(potentialKey)) {\r\n // Key found in cache.\r\n callback(nextKey, dbRemoteDoc);\r\n nextKey = keyIter.hasNext() ? keyIter.getNext() : null;\r\n }\r\n // Skip to the next key (if there is one).\r\n if (nextKey) {\r\n control.skip(dbKey(nextKey));\r\n }\r\n else {\r\n control.done();\r\n }\r\n })\r\n .next(() => {\r\n // The rest of the keys are not in the cache. One case where `iterate`\r\n // above won't go through them is when the cache is empty.\r\n while (nextKey) {\r\n callback(nextKey, null);\r\n nextKey = keyIter.hasNext() ? keyIter.getNext() : null;\r\n }\r\n });\r\n }\r\n getAllFromCollection(transaction, collection, offset) {\r\n const startKey = [\r\n collection.popLast().toArray(),\r\n collection.lastSegment(),\r\n toDbTimestampKey(offset.readTime),\r\n offset.documentKey.path.isEmpty()\r\n ? ''\r\n : offset.documentKey.path.lastSegment()\r\n ];\r\n const endKey = [\r\n collection.popLast().toArray(),\r\n collection.lastSegment(),\r\n [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\r\n ''\r\n ];\r\n return remoteDocumentsStore(transaction)\r\n .loadAll(IDBKeyRange.bound(startKey, endKey, true))\r\n .next(dbRemoteDocs => {\r\n let results = mutableDocumentMap();\r\n for (const dbRemoteDoc of dbRemoteDocs) {\r\n const document = this.maybeDecodeDocument(DocumentKey.fromSegments(dbRemoteDoc.prefixPath.concat(dbRemoteDoc.collectionGroup, dbRemoteDoc.documentId)), dbRemoteDoc);\r\n results = results.insert(document.key, document);\r\n }\r\n return results;\r\n });\r\n }\r\n getAllFromCollectionGroup(transaction, collectionGroup, offset, limit) {\r\n let results = mutableDocumentMap();\r\n const startKey = dbCollectionGroupKey(collectionGroup, offset);\r\n const endKey = dbCollectionGroupKey(collectionGroup, IndexOffset.max());\r\n return remoteDocumentsStore(transaction)\r\n .iterate({\r\n index: DbRemoteDocumentCollectionGroupIndex,\r\n range: IDBKeyRange.bound(startKey, endKey, true)\r\n }, (_, dbRemoteDoc, control) => {\r\n const document = this.maybeDecodeDocument(DocumentKey.fromSegments(dbRemoteDoc.prefixPath.concat(dbRemoteDoc.collectionGroup, dbRemoteDoc.documentId)), dbRemoteDoc);\r\n results = results.insert(document.key, document);\r\n if (results.size === limit) {\r\n control.done();\r\n }\r\n })\r\n .next(() => results);\r\n }\r\n newChangeBuffer(options) {\r\n return new IndexedDbRemoteDocumentChangeBuffer(this, !!options && options.trackRemovals);\r\n }\r\n getSize(txn) {\r\n return this.getMetadata(txn).next(metadata => metadata.byteSize);\r\n }\r\n getMetadata(txn) {\r\n return documentGlobalStore(txn)\r\n .get(DbRemoteDocumentGlobalKey)\r\n .next(metadata => {\r\n hardAssert(!!metadata);\r\n return metadata;\r\n });\r\n }\r\n setMetadata(txn, metadata) {\r\n return documentGlobalStore(txn).put(DbRemoteDocumentGlobalKey, metadata);\r\n }\r\n /**\r\n * Decodes `dbRemoteDoc` and returns the document (or an invalid document if\r\n * the document corresponds to the format used for sentinel deletes).\r\n */\r\n maybeDecodeDocument(documentKey, dbRemoteDoc) {\r\n if (dbRemoteDoc) {\r\n const doc = fromDbRemoteDocument(this.serializer, dbRemoteDoc);\r\n // Whether the document is a sentinel removal and should only be used in the\r\n // `getNewDocumentChanges()`\r\n const isSentinelRemoval = doc.isNoDocument() && doc.version.isEqual(SnapshotVersion.min());\r\n if (!isSentinelRemoval) {\r\n return doc;\r\n }\r\n }\r\n return MutableDocument.newInvalidDocument(documentKey);\r\n }\r\n}\r\n/** Creates a new IndexedDbRemoteDocumentCache. */\r\nfunction newIndexedDbRemoteDocumentCache(serializer) {\r\n return new IndexedDbRemoteDocumentCacheImpl(serializer);\r\n}\r\n/**\r\n * Handles the details of adding and updating documents in the IndexedDbRemoteDocumentCache.\r\n *\r\n * Unlike the MemoryRemoteDocumentChangeBuffer, the IndexedDb implementation computes the size\r\n * delta for all submitted changes. This avoids having to re-read all documents from IndexedDb\r\n * when we apply the changes.\r\n */\r\nclass IndexedDbRemoteDocumentChangeBuffer extends RemoteDocumentChangeBuffer {\r\n /**\r\n * @param documentCache - The IndexedDbRemoteDocumentCache to apply the changes to.\r\n * @param trackRemovals - Whether to create sentinel deletes that can be tracked by\r\n * `getNewDocumentChanges()`.\r\n */\r\n constructor(documentCache, trackRemovals) {\r\n super();\r\n this.documentCache = documentCache;\r\n this.trackRemovals = trackRemovals;\r\n // A map of document sizes and read times prior to applying the changes in\r\n // this buffer.\r\n this.documentStates = new ObjectMap(key => key.toString(), (l, r) => l.isEqual(r));\r\n }\r\n applyChanges(transaction) {\r\n const promises = [];\r\n let sizeDelta = 0;\r\n let collectionParents = new SortedSet((l, r) => primitiveComparator(l.canonicalString(), r.canonicalString()));\r\n this.changes.forEach((key, documentChange) => {\r\n const previousDoc = this.documentStates.get(key);\r\n promises.push(this.documentCache.removeEntry(transaction, key, previousDoc.readTime));\r\n if (documentChange.isValidDocument()) {\r\n const doc = toDbRemoteDocument(this.documentCache.serializer, documentChange);\r\n collectionParents = collectionParents.add(key.path.popLast());\r\n const size = dbDocumentSize(doc);\r\n sizeDelta += size - previousDoc.size;\r\n promises.push(this.documentCache.addEntry(transaction, key, doc));\r\n }\r\n else {\r\n sizeDelta -= previousDoc.size;\r\n if (this.trackRemovals) {\r\n // In order to track removals, we store a \"sentinel delete\" in the\r\n // RemoteDocumentCache. This entry is represented by a NoDocument\r\n // with a version of 0 and ignored by `maybeDecodeDocument()` but\r\n // preserved in `getNewDocumentChanges()`.\r\n const deletedDoc = toDbRemoteDocument(this.documentCache.serializer, documentChange.convertToNoDocument(SnapshotVersion.min()));\r\n promises.push(this.documentCache.addEntry(transaction, key, deletedDoc));\r\n }\r\n }\r\n });\r\n collectionParents.forEach(parent => {\r\n promises.push(this.documentCache.indexManager.addToCollectionParentIndex(transaction, parent));\r\n });\r\n promises.push(this.documentCache.updateMetadata(transaction, sizeDelta));\r\n return PersistencePromise.waitFor(promises);\r\n }\r\n getFromCache(transaction, documentKey) {\r\n // Record the size of everything we load from the cache so we can compute a delta later.\r\n return this.documentCache\r\n .getSizedEntry(transaction, documentKey)\r\n .next(getResult => {\r\n this.documentStates.set(documentKey, {\r\n size: getResult.size,\r\n readTime: getResult.document.readTime\r\n });\r\n return getResult.document;\r\n });\r\n }\r\n getAllFromCache(transaction, documentKeys) {\r\n // Record the size of everything we load from the cache so we can compute\r\n // a delta later.\r\n return this.documentCache\r\n .getSizedEntries(transaction, documentKeys)\r\n .next(({ documents, sizeMap }) => {\r\n // Note: `getAllFromCache` returns two maps instead of a single map from\r\n // keys to `DocumentSizeEntry`s. This is to allow returning the\r\n // `MutableDocumentMap` directly, without a conversion.\r\n sizeMap.forEach((documentKey, size) => {\r\n this.documentStates.set(documentKey, {\r\n size,\r\n readTime: documents.get(documentKey).readTime\r\n });\r\n });\r\n return documents;\r\n });\r\n }\r\n}\r\nfunction documentGlobalStore(txn) {\r\n return getStore(txn, DbRemoteDocumentGlobalStore);\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the remoteDocuments object store.\r\n */\r\nfunction remoteDocumentsStore(txn) {\r\n return getStore(txn, DbRemoteDocumentStore);\r\n}\r\n/**\r\n * Returns a key that can be used for document lookups on the\r\n * `DbRemoteDocumentDocumentKeyIndex` index.\r\n */\r\nfunction dbKey(documentKey) {\r\n const path = documentKey.path.toArray();\r\n return [\r\n /* prefix path */ path.slice(0, path.length - 2),\r\n /* collection id */ path[path.length - 2],\r\n /* document id */ path[path.length - 1]\r\n ];\r\n}\r\n/**\r\n * Returns a key that can be used for document lookups via the primary key of\r\n * the DbRemoteDocument object store.\r\n */\r\nfunction dbReadTimeKey(documentKey, readTime) {\r\n const path = documentKey.path.toArray();\r\n return [\r\n /* prefix path */ path.slice(0, path.length - 2),\r\n /* collection id */ path[path.length - 2],\r\n toDbTimestampKey(readTime),\r\n /* document id */ path[path.length - 1]\r\n ];\r\n}\r\n/**\r\n * Returns a key that can be used for document lookups on the\r\n * `DbRemoteDocumentDocumentCollectionGroupIndex` index.\r\n */\r\nfunction dbCollectionGroupKey(collectionGroup, offset) {\r\n const path = offset.documentKey.path.toArray();\r\n return [\r\n /* collection id */ collectionGroup,\r\n toDbTimestampKey(offset.readTime),\r\n /* prefix path */ path.slice(0, path.length - 2),\r\n /* document id */ path.length > 0 ? path[path.length - 1] : ''\r\n ];\r\n}\r\n/**\r\n * Comparator that compares document keys according to the primary key sorting\r\n * used by the `DbRemoteDocumentDocument` store (by prefix path, collection id\r\n * and then document ID).\r\n *\r\n * Visible for testing.\r\n */\r\nfunction dbKeyComparator(l, r) {\r\n const left = l.path.toArray();\r\n const right = r.path.toArray();\r\n // The ordering is based on https://chromium.googlesource.com/chromium/blink/+/fe5c21fef94dae71c1c3344775b8d8a7f7e6d9ec/Source/modules/indexeddb/IDBKey.cpp#74\r\n let cmp = 0;\r\n for (let i = 0; i < left.length - 2 && i < right.length - 2; ++i) {\r\n cmp = primitiveComparator(left[i], right[i]);\r\n if (cmp) {\r\n return cmp;\r\n }\r\n }\r\n cmp = primitiveComparator(left.length, right.length);\r\n if (cmp) {\r\n return cmp;\r\n }\r\n cmp = primitiveComparator(left[left.length - 2], right[right.length - 2]);\r\n if (cmp) {\r\n return cmp;\r\n }\r\n return primitiveComparator(left[left.length - 1], right[right.length - 1]);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Schema Version for the Web client:\r\n * 1. Initial version including Mutation Queue, Query Cache, and Remote\r\n * Document Cache\r\n * 2. Used to ensure a targetGlobal object exists and add targetCount to it. No\r\n * longer required because migration 3 unconditionally clears it.\r\n * 3. Dropped and re-created Query Cache to deal with cache corruption related\r\n * to limbo resolution. Addresses\r\n * https://github.com/firebase/firebase-ios-sdk/issues/1548\r\n * 4. Multi-Tab Support.\r\n * 5. Removal of held write acks.\r\n * 6. Create document global for tracking document cache size.\r\n * 7. Ensure every cached document has a sentinel row with a sequence number.\r\n * 8. Add collection-parent index for Collection Group queries.\r\n * 9. Change RemoteDocumentChanges store to be keyed by readTime rather than\r\n * an auto-incrementing ID. This is required for Index-Free queries.\r\n * 10. Rewrite the canonical IDs to the explicit Protobuf-based format.\r\n * 11. Add bundles and named_queries for bundle support.\r\n * 12. Add document overlays.\r\n * 13. Rewrite the keys of the remote document cache to allow for efficient\r\n * document lookup via `getAll()`.\r\n * 14. Add overlays.\r\n * 15. Add indexing support.\r\n */\r\nconst SCHEMA_VERSION = 15;\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Represents a local view (overlay) of a document, and the fields that are\r\n * locally mutated.\r\n */\r\nclass OverlayedDocument {\r\n constructor(overlayedDocument, \r\n /**\r\n * The fields that are locally mutated by patch mutations.\r\n *\r\n * If the overlayed\tdocument is from set or delete mutations, this is `null`.\r\n * If there is no overlay (mutation) for the document, this is an empty `FieldMask`.\r\n */\r\n mutatedFields) {\r\n this.overlayedDocument = overlayedDocument;\r\n this.mutatedFields = mutatedFields;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A readonly view of the local state of all documents we're tracking (i.e. we\r\n * have a cached version in remoteDocumentCache or local mutations for the\r\n * document). The view is computed by applying the mutations in the\r\n * MutationQueue to the RemoteDocumentCache.\r\n */\r\nclass LocalDocumentsView {\r\n constructor(remoteDocumentCache, mutationQueue, documentOverlayCache, indexManager) {\r\n this.remoteDocumentCache = remoteDocumentCache;\r\n this.mutationQueue = mutationQueue;\r\n this.documentOverlayCache = documentOverlayCache;\r\n this.indexManager = indexManager;\r\n }\r\n /**\r\n * Get the local view of the document identified by `key`.\r\n *\r\n * @returns Local view of the document or null if we don't have any cached\r\n * state for it.\r\n */\r\n getDocument(transaction, key) {\r\n let overlay = null;\r\n return this.documentOverlayCache\r\n .getOverlay(transaction, key)\r\n .next(value => {\r\n overlay = value;\r\n return this.remoteDocumentCache.getEntry(transaction, key);\r\n })\r\n .next(document => {\r\n if (overlay !== null) {\r\n mutationApplyToLocalView(overlay.mutation, document, FieldMask.empty(), Timestamp.now());\r\n }\r\n return document;\r\n });\r\n }\r\n /**\r\n * Gets the local view of the documents identified by `keys`.\r\n *\r\n * If we don't have cached state for a document in `keys`, a NoDocument will\r\n * be stored for that key in the resulting set.\r\n */\r\n getDocuments(transaction, keys) {\r\n return this.remoteDocumentCache\r\n .getEntries(transaction, keys)\r\n .next(docs => this.getLocalViewOfDocuments(transaction, docs, documentKeySet()).next(() => docs));\r\n }\r\n /**\r\n * Similar to `getDocuments`, but creates the local view from the given\r\n * `baseDocs` without retrieving documents from the local store.\r\n *\r\n * @param transaction - The transaction this operation is scoped to.\r\n * @param docs - The documents to apply local mutations to get the local views.\r\n * @param existenceStateChanged - The set of document keys whose existence state\r\n * is changed. This is useful to determine if some documents overlay needs\r\n * to be recalculated.\r\n */\r\n getLocalViewOfDocuments(transaction, docs, existenceStateChanged = documentKeySet()) {\r\n const overlays = newOverlayMap();\r\n return this.populateOverlays(transaction, overlays, docs).next(() => {\r\n return this.computeViews(transaction, docs, overlays, existenceStateChanged).next(computeViewsResult => {\r\n let result = documentMap();\r\n computeViewsResult.forEach((documentKey, overlayedDocument) => {\r\n result = result.insert(documentKey, overlayedDocument.overlayedDocument);\r\n });\r\n return result;\r\n });\r\n });\r\n }\r\n /**\r\n * Gets the overlayed documents for the given document map, which will include\r\n * the local view of those documents and a `FieldMask` indicating which fields\r\n * are mutated locally, `null` if overlay is a Set or Delete mutation.\r\n */\r\n getOverlayedDocuments(transaction, docs) {\r\n const overlays = newOverlayMap();\r\n return this.populateOverlays(transaction, overlays, docs).next(() => this.computeViews(transaction, docs, overlays, documentKeySet()));\r\n }\r\n /**\r\n * Fetches the overlays for {@code docs} and adds them to provided overlay map\r\n * if the map does not already contain an entry for the given document key.\r\n */\r\n populateOverlays(transaction, overlays, docs) {\r\n const missingOverlays = [];\r\n docs.forEach(key => {\r\n if (!overlays.has(key)) {\r\n missingOverlays.push(key);\r\n }\r\n });\r\n return this.documentOverlayCache\r\n .getOverlays(transaction, missingOverlays)\r\n .next(result => {\r\n result.forEach((key, val) => {\r\n overlays.set(key, val);\r\n });\r\n });\r\n }\r\n /**\r\n * Computes the local view for the given documents.\r\n *\r\n * @param docs - The documents to compute views for. It also has the base\r\n * version of the documents.\r\n * @param overlays - The overlays that need to be applied to the given base\r\n * version of the documents.\r\n * @param existenceStateChanged - A set of documents whose existence states\r\n * might have changed. This is used to determine if we need to re-calculate\r\n * overlays from mutation queues.\r\n * @return A map represents the local documents view.\r\n */\r\n computeViews(transaction, docs, overlays, existenceStateChanged) {\r\n let recalculateDocuments = mutableDocumentMap();\r\n const mutatedFields = newDocumentKeyMap();\r\n const results = newOverlayedDocumentMap();\r\n docs.forEach((_, doc) => {\r\n const overlay = overlays.get(doc.key);\r\n // Recalculate an overlay if the document's existence state changed due to\r\n // a remote event *and* the overlay is a PatchMutation. This is because\r\n // document existence state can change if some patch mutation's\r\n // preconditions are met.\r\n // NOTE: we recalculate when `overlay` is undefined as well, because there\r\n // might be a patch mutation whose precondition does not match before the\r\n // change (hence overlay is undefined), but would now match.\r\n if (existenceStateChanged.has(doc.key) &&\r\n (overlay === undefined || overlay.mutation instanceof PatchMutation)) {\r\n recalculateDocuments = recalculateDocuments.insert(doc.key, doc);\r\n }\r\n else if (overlay !== undefined) {\r\n mutatedFields.set(doc.key, overlay.mutation.getFieldMask());\r\n mutationApplyToLocalView(overlay.mutation, doc, overlay.mutation.getFieldMask(), Timestamp.now());\r\n }\r\n else {\r\n // no overlay exists\r\n // Using EMPTY to indicate there is no overlay for the document.\r\n mutatedFields.set(doc.key, FieldMask.empty());\r\n }\r\n });\r\n return this.recalculateAndSaveOverlays(transaction, recalculateDocuments).next(recalculatedFields => {\r\n recalculatedFields.forEach((documentKey, mask) => mutatedFields.set(documentKey, mask));\r\n docs.forEach((documentKey, document) => {\r\n var _a;\r\n return results.set(documentKey, new OverlayedDocument(document, (_a = mutatedFields.get(documentKey)) !== null && _a !== void 0 ? _a : null));\r\n });\r\n return results;\r\n });\r\n }\r\n recalculateAndSaveOverlays(transaction, docs) {\r\n const masks = newDocumentKeyMap();\r\n // A reverse lookup map from batch id to the documents within that batch.\r\n let documentsByBatchId = new SortedMap((key1, key2) => key1 - key2);\r\n let processed = documentKeySet();\r\n return this.mutationQueue\r\n .getAllMutationBatchesAffectingDocumentKeys(transaction, docs)\r\n .next(batches => {\r\n for (const batch of batches) {\r\n batch.keys().forEach(key => {\r\n const baseDoc = docs.get(key);\r\n if (baseDoc === null) {\r\n return;\r\n }\r\n let mask = masks.get(key) || FieldMask.empty();\r\n mask = batch.applyToLocalView(baseDoc, mask);\r\n masks.set(key, mask);\r\n const newSet = (documentsByBatchId.get(batch.batchId) || documentKeySet()).add(key);\r\n documentsByBatchId = documentsByBatchId.insert(batch.batchId, newSet);\r\n });\r\n }\r\n })\r\n .next(() => {\r\n const promises = [];\r\n // Iterate in descending order of batch IDs, and skip documents that are\r\n // already saved.\r\n const iter = documentsByBatchId.getReverseIterator();\r\n while (iter.hasNext()) {\r\n const entry = iter.getNext();\r\n const batchId = entry.key;\r\n const keys = entry.value;\r\n const overlays = newMutationMap();\r\n keys.forEach(key => {\r\n if (!processed.has(key)) {\r\n const overlayMutation = calculateOverlayMutation(docs.get(key), masks.get(key));\r\n if (overlayMutation !== null) {\r\n overlays.set(key, overlayMutation);\r\n }\r\n processed = processed.add(key);\r\n }\r\n });\r\n promises.push(this.documentOverlayCache.saveOverlays(transaction, batchId, overlays));\r\n }\r\n return PersistencePromise.waitFor(promises);\r\n })\r\n .next(() => masks);\r\n }\r\n /**\r\n * Recalculates overlays by reading the documents from remote document cache\r\n * first, and saves them after they are calculated.\r\n */\r\n recalculateAndSaveOverlaysForDocumentKeys(transaction, documentKeys) {\r\n return this.remoteDocumentCache\r\n .getEntries(transaction, documentKeys)\r\n .next(docs => this.recalculateAndSaveOverlays(transaction, docs));\r\n }\r\n /**\r\n * Performs a query against the local view of all documents.\r\n *\r\n * @param transaction - The persistence transaction.\r\n * @param query - The query to match documents against.\r\n * @param offset - Read time and key to start scanning by (exclusive).\r\n */\r\n getDocumentsMatchingQuery(transaction, query, offset) {\r\n if (isDocumentQuery$1(query)) {\r\n return this.getDocumentsMatchingDocumentQuery(transaction, query.path);\r\n }\r\n else if (isCollectionGroupQuery(query)) {\r\n return this.getDocumentsMatchingCollectionGroupQuery(transaction, query, offset);\r\n }\r\n else {\r\n return this.getDocumentsMatchingCollectionQuery(transaction, query, offset);\r\n }\r\n }\r\n /**\r\n * Given a collection group, returns the next documents that follow the provided offset, along\r\n * with an updated batch ID.\r\n *\r\n *
The documents returned by this method are ordered by remote version from the provided\r\n * offset. If there are no more remote documents after the provided offset, documents with\r\n * mutations in order of batch id from the offset are returned. Since all documents in a batch are\r\n * returned together, the total number of documents returned can exceed {@code count}.\r\n *\r\n * @param transaction\r\n * @param collectionGroup The collection group for the documents.\r\n * @param offset The offset to index into.\r\n * @param count The number of documents to return\r\n * @return A LocalWriteResult with the documents that follow the provided offset and the last processed batch id.\r\n */\r\n getNextDocuments(transaction, collectionGroup, offset, count) {\r\n return this.remoteDocumentCache\r\n .getAllFromCollectionGroup(transaction, collectionGroup, offset, count)\r\n .next((originalDocs) => {\r\n const overlaysPromise = count - originalDocs.size > 0\r\n ? this.documentOverlayCache.getOverlaysForCollectionGroup(transaction, collectionGroup, offset.largestBatchId, count - originalDocs.size)\r\n : PersistencePromise.resolve(newOverlayMap());\r\n // The callsite will use the largest batch ID together with the latest read time to create\r\n // a new index offset. Since we only process batch IDs if all remote documents have been read,\r\n // no overlay will increase the overall read time. This is why we only need to special case\r\n // the batch id.\r\n let largestBatchId = INITIAL_LARGEST_BATCH_ID;\r\n let modifiedDocs = originalDocs;\r\n return overlaysPromise.next(overlays => {\r\n return PersistencePromise.forEach(overlays, (key, overlay) => {\r\n if (largestBatchId < overlay.largestBatchId) {\r\n largestBatchId = overlay.largestBatchId;\r\n }\r\n if (originalDocs.get(key)) {\r\n return PersistencePromise.resolve();\r\n }\r\n return this.remoteDocumentCache\r\n .getEntry(transaction, key)\r\n .next(doc => {\r\n modifiedDocs = modifiedDocs.insert(key, doc);\r\n });\r\n })\r\n .next(() => this.populateOverlays(transaction, overlays, originalDocs))\r\n .next(() => this.computeViews(transaction, modifiedDocs, overlays, documentKeySet()))\r\n .next(localDocs => ({\r\n batchId: largestBatchId,\r\n changes: convertOverlayedDocumentMapToDocumentMap(localDocs)\r\n }));\r\n });\r\n });\r\n }\r\n getDocumentsMatchingDocumentQuery(transaction, docPath) {\r\n // Just do a simple document lookup.\r\n return this.getDocument(transaction, new DocumentKey(docPath)).next(document => {\r\n let result = documentMap();\r\n if (document.isFoundDocument()) {\r\n result = result.insert(document.key, document);\r\n }\r\n return result;\r\n });\r\n }\r\n getDocumentsMatchingCollectionGroupQuery(transaction, query, offset) {\r\n const collectionId = query.collectionGroup;\r\n let results = documentMap();\r\n return this.indexManager\r\n .getCollectionParents(transaction, collectionId)\r\n .next(parents => {\r\n // Perform a collection query against each parent that contains the\r\n // collectionId and aggregate the results.\r\n return PersistencePromise.forEach(parents, (parent) => {\r\n const collectionQuery = asCollectionQueryAtPath(query, parent.child(collectionId));\r\n return this.getDocumentsMatchingCollectionQuery(transaction, collectionQuery, offset).next(r => {\r\n r.forEach((key, doc) => {\r\n results = results.insert(key, doc);\r\n });\r\n });\r\n }).next(() => results);\r\n });\r\n }\r\n getDocumentsMatchingCollectionQuery(transaction, query, offset) {\r\n // Query the remote documents and overlay mutations.\r\n let remoteDocuments;\r\n return this.remoteDocumentCache\r\n .getAllFromCollection(transaction, query.path, offset)\r\n .next(queryResults => {\r\n remoteDocuments = queryResults;\r\n return this.documentOverlayCache.getOverlaysForCollection(transaction, query.path, offset.largestBatchId);\r\n })\r\n .next(overlays => {\r\n // As documents might match the query because of their overlay we need to\r\n // include documents for all overlays in the initial document set.\r\n overlays.forEach((_, overlay) => {\r\n const key = overlay.getKey();\r\n if (remoteDocuments.get(key) === null) {\r\n remoteDocuments = remoteDocuments.insert(key, MutableDocument.newInvalidDocument(key));\r\n }\r\n });\r\n // Apply the overlays and match against the query.\r\n let results = documentMap();\r\n remoteDocuments.forEach((key, document) => {\r\n const overlay = overlays.get(key);\r\n if (overlay !== undefined) {\r\n mutationApplyToLocalView(overlay.mutation, document, FieldMask.empty(), Timestamp.now());\r\n }\r\n // Finally, insert the documents that still match the query\r\n if (queryMatches(query, document)) {\r\n results = results.insert(key, document);\r\n }\r\n });\r\n return results;\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MemoryBundleCache {\r\n constructor(serializer) {\r\n this.serializer = serializer;\r\n this.bundles = new Map();\r\n this.namedQueries = new Map();\r\n }\r\n getBundleMetadata(transaction, bundleId) {\r\n return PersistencePromise.resolve(this.bundles.get(bundleId));\r\n }\r\n saveBundleMetadata(transaction, bundleMetadata) {\r\n this.bundles.set(bundleMetadata.id, fromBundleMetadata(bundleMetadata));\r\n return PersistencePromise.resolve();\r\n }\r\n getNamedQuery(transaction, queryName) {\r\n return PersistencePromise.resolve(this.namedQueries.get(queryName));\r\n }\r\n saveNamedQuery(transaction, query) {\r\n this.namedQueries.set(query.name, fromProtoNamedQuery(query));\r\n return PersistencePromise.resolve();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An in-memory implementation of DocumentOverlayCache.\r\n */\r\nclass MemoryDocumentOverlayCache {\r\n constructor() {\r\n // A map sorted by DocumentKey, whose value is a pair of the largest batch id\r\n // for the overlay and the overlay itself.\r\n this.overlays = new SortedMap(DocumentKey.comparator);\r\n this.overlayByBatchId = new Map();\r\n }\r\n getOverlay(transaction, key) {\r\n return PersistencePromise.resolve(this.overlays.get(key));\r\n }\r\n getOverlays(transaction, keys) {\r\n const result = newOverlayMap();\r\n return PersistencePromise.forEach(keys, (key) => {\r\n return this.getOverlay(transaction, key).next(overlay => {\r\n if (overlay !== null) {\r\n result.set(key, overlay);\r\n }\r\n });\r\n }).next(() => result);\r\n }\r\n saveOverlays(transaction, largestBatchId, overlays) {\r\n overlays.forEach((_, mutation) => {\r\n this.saveOverlay(transaction, largestBatchId, mutation);\r\n });\r\n return PersistencePromise.resolve();\r\n }\r\n removeOverlaysForBatchId(transaction, documentKeys, batchId) {\r\n const keys = this.overlayByBatchId.get(batchId);\r\n if (keys !== undefined) {\r\n keys.forEach(key => (this.overlays = this.overlays.remove(key)));\r\n this.overlayByBatchId.delete(batchId);\r\n }\r\n return PersistencePromise.resolve();\r\n }\r\n getOverlaysForCollection(transaction, collection, sinceBatchId) {\r\n const result = newOverlayMap();\r\n const immediateChildrenPathLength = collection.length + 1;\r\n const prefix = new DocumentKey(collection.child(''));\r\n const iter = this.overlays.getIteratorFrom(prefix);\r\n while (iter.hasNext()) {\r\n const entry = iter.getNext();\r\n const overlay = entry.value;\r\n const key = overlay.getKey();\r\n if (!collection.isPrefixOf(key.path)) {\r\n break;\r\n }\r\n // Documents from sub-collections\r\n if (key.path.length !== immediateChildrenPathLength) {\r\n continue;\r\n }\r\n if (overlay.largestBatchId > sinceBatchId) {\r\n result.set(overlay.getKey(), overlay);\r\n }\r\n }\r\n return PersistencePromise.resolve(result);\r\n }\r\n getOverlaysForCollectionGroup(transaction, collectionGroup, sinceBatchId, count) {\r\n let batchIdToOverlays = new SortedMap((key1, key2) => key1 - key2);\r\n const iter = this.overlays.getIterator();\r\n while (iter.hasNext()) {\r\n const entry = iter.getNext();\r\n const overlay = entry.value;\r\n const key = overlay.getKey();\r\n if (key.getCollectionGroup() !== collectionGroup) {\r\n continue;\r\n }\r\n if (overlay.largestBatchId > sinceBatchId) {\r\n let overlaysForBatchId = batchIdToOverlays.get(overlay.largestBatchId);\r\n if (overlaysForBatchId === null) {\r\n overlaysForBatchId = newOverlayMap();\r\n batchIdToOverlays = batchIdToOverlays.insert(overlay.largestBatchId, overlaysForBatchId);\r\n }\r\n overlaysForBatchId.set(overlay.getKey(), overlay);\r\n }\r\n }\r\n const result = newOverlayMap();\r\n const batchIter = batchIdToOverlays.getIterator();\r\n while (batchIter.hasNext()) {\r\n const entry = batchIter.getNext();\r\n const overlays = entry.value;\r\n overlays.forEach((key, overlay) => result.set(key, overlay));\r\n if (result.size() >= count) {\r\n break;\r\n }\r\n }\r\n return PersistencePromise.resolve(result);\r\n }\r\n saveOverlay(transaction, largestBatchId, mutation) {\r\n // Remove the association of the overlay to its batch id.\r\n const existing = this.overlays.get(mutation.key);\r\n if (existing !== null) {\r\n const newSet = this.overlayByBatchId\r\n .get(existing.largestBatchId)\r\n .delete(mutation.key);\r\n this.overlayByBatchId.set(existing.largestBatchId, newSet);\r\n }\r\n this.overlays = this.overlays.insert(mutation.key, new Overlay(largestBatchId, mutation));\r\n // Create the association of this overlay to the given largestBatchId.\r\n let batch = this.overlayByBatchId.get(largestBatchId);\r\n if (batch === undefined) {\r\n batch = documentKeySet();\r\n this.overlayByBatchId.set(largestBatchId, batch);\r\n }\r\n this.overlayByBatchId.set(largestBatchId, batch.add(mutation.key));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A collection of references to a document from some kind of numbered entity\r\n * (either a target ID or batch ID). As references are added to or removed from\r\n * the set corresponding events are emitted to a registered garbage collector.\r\n *\r\n * Each reference is represented by a DocumentReference object. Each of them\r\n * contains enough information to uniquely identify the reference. They are all\r\n * stored primarily in a set sorted by key. A document is considered garbage if\r\n * there's no references in that set (this can be efficiently checked thanks to\r\n * sorting by key).\r\n *\r\n * ReferenceSet also keeps a secondary set that contains references sorted by\r\n * IDs. This one is used to efficiently implement removal of all references by\r\n * some target ID.\r\n */\r\nclass ReferenceSet {\r\n constructor() {\r\n // A set of outstanding references to a document sorted by key.\r\n this.refsByKey = new SortedSet(DocReference.compareByKey);\r\n // A set of outstanding references to a document sorted by target id.\r\n this.refsByTarget = new SortedSet(DocReference.compareByTargetId);\r\n }\r\n /** Returns true if the reference set contains no references. */\r\n isEmpty() {\r\n return this.refsByKey.isEmpty();\r\n }\r\n /** Adds a reference to the given document key for the given ID. */\r\n addReference(key, id) {\r\n const ref = new DocReference(key, id);\r\n this.refsByKey = this.refsByKey.add(ref);\r\n this.refsByTarget = this.refsByTarget.add(ref);\r\n }\r\n /** Add references to the given document keys for the given ID. */\r\n addReferences(keys, id) {\r\n keys.forEach(key => this.addReference(key, id));\r\n }\r\n /**\r\n * Removes a reference to the given document key for the given\r\n * ID.\r\n */\r\n removeReference(key, id) {\r\n this.removeRef(new DocReference(key, id));\r\n }\r\n removeReferences(keys, id) {\r\n keys.forEach(key => this.removeReference(key, id));\r\n }\r\n /**\r\n * Clears all references with a given ID. Calls removeRef() for each key\r\n * removed.\r\n */\r\n removeReferencesForId(id) {\r\n const emptyKey = new DocumentKey(new ResourcePath([]));\r\n const startRef = new DocReference(emptyKey, id);\r\n const endRef = new DocReference(emptyKey, id + 1);\r\n const keys = [];\r\n this.refsByTarget.forEachInRange([startRef, endRef], ref => {\r\n this.removeRef(ref);\r\n keys.push(ref.key);\r\n });\r\n return keys;\r\n }\r\n removeAllReferences() {\r\n this.refsByKey.forEach(ref => this.removeRef(ref));\r\n }\r\n removeRef(ref) {\r\n this.refsByKey = this.refsByKey.delete(ref);\r\n this.refsByTarget = this.refsByTarget.delete(ref);\r\n }\r\n referencesForId(id) {\r\n const emptyKey = new DocumentKey(new ResourcePath([]));\r\n const startRef = new DocReference(emptyKey, id);\r\n const endRef = new DocReference(emptyKey, id + 1);\r\n let keys = documentKeySet();\r\n this.refsByTarget.forEachInRange([startRef, endRef], ref => {\r\n keys = keys.add(ref.key);\r\n });\r\n return keys;\r\n }\r\n containsKey(key) {\r\n const ref = new DocReference(key, 0);\r\n const firstRef = this.refsByKey.firstAfterOrEqual(ref);\r\n return firstRef !== null && key.isEqual(firstRef.key);\r\n }\r\n}\r\nclass DocReference {\r\n constructor(key, targetOrBatchId) {\r\n this.key = key;\r\n this.targetOrBatchId = targetOrBatchId;\r\n }\r\n /** Compare by key then by ID */\r\n static compareByKey(left, right) {\r\n return (DocumentKey.comparator(left.key, right.key) ||\r\n primitiveComparator(left.targetOrBatchId, right.targetOrBatchId));\r\n }\r\n /** Compare by ID then by key */\r\n static compareByTargetId(left, right) {\r\n return (primitiveComparator(left.targetOrBatchId, right.targetOrBatchId) ||\r\n DocumentKey.comparator(left.key, right.key));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MemoryMutationQueue {\r\n constructor(indexManager, referenceDelegate) {\r\n this.indexManager = indexManager;\r\n this.referenceDelegate = referenceDelegate;\r\n /**\r\n * The set of all mutations that have been sent but not yet been applied to\r\n * the backend.\r\n */\r\n this.mutationQueue = [];\r\n /** Next value to use when assigning sequential IDs to each mutation batch. */\r\n this.nextBatchId = 1;\r\n /** An ordered mapping between documents and the mutations batch IDs. */\r\n this.batchesByDocumentKey = new SortedSet(DocReference.compareByKey);\r\n }\r\n checkEmpty(transaction) {\r\n return PersistencePromise.resolve(this.mutationQueue.length === 0);\r\n }\r\n addMutationBatch(transaction, localWriteTime, baseMutations, mutations) {\r\n const batchId = this.nextBatchId;\r\n this.nextBatchId++;\r\n if (this.mutationQueue.length > 0) {\r\n this.mutationQueue[this.mutationQueue.length - 1];\r\n }\r\n const batch = new MutationBatch(batchId, localWriteTime, baseMutations, mutations);\r\n this.mutationQueue.push(batch);\r\n // Track references by document key and index collection parents.\r\n for (const mutation of mutations) {\r\n this.batchesByDocumentKey = this.batchesByDocumentKey.add(new DocReference(mutation.key, batchId));\r\n this.indexManager.addToCollectionParentIndex(transaction, mutation.key.path.popLast());\r\n }\r\n return PersistencePromise.resolve(batch);\r\n }\r\n lookupMutationBatch(transaction, batchId) {\r\n return PersistencePromise.resolve(this.findMutationBatch(batchId));\r\n }\r\n getNextMutationBatchAfterBatchId(transaction, batchId) {\r\n const nextBatchId = batchId + 1;\r\n // The requested batchId may still be out of range so normalize it to the\r\n // start of the queue.\r\n const rawIndex = this.indexOfBatchId(nextBatchId);\r\n const index = rawIndex < 0 ? 0 : rawIndex;\r\n return PersistencePromise.resolve(this.mutationQueue.length > index ? this.mutationQueue[index] : null);\r\n }\r\n getHighestUnacknowledgedBatchId() {\r\n return PersistencePromise.resolve(this.mutationQueue.length === 0 ? BATCHID_UNKNOWN : this.nextBatchId - 1);\r\n }\r\n getAllMutationBatches(transaction) {\r\n return PersistencePromise.resolve(this.mutationQueue.slice());\r\n }\r\n getAllMutationBatchesAffectingDocumentKey(transaction, documentKey) {\r\n const start = new DocReference(documentKey, 0);\r\n const end = new DocReference(documentKey, Number.POSITIVE_INFINITY);\r\n const result = [];\r\n this.batchesByDocumentKey.forEachInRange([start, end], ref => {\r\n const batch = this.findMutationBatch(ref.targetOrBatchId);\r\n result.push(batch);\r\n });\r\n return PersistencePromise.resolve(result);\r\n }\r\n getAllMutationBatchesAffectingDocumentKeys(transaction, documentKeys) {\r\n let uniqueBatchIDs = new SortedSet(primitiveComparator);\r\n documentKeys.forEach(documentKey => {\r\n const start = new DocReference(documentKey, 0);\r\n const end = new DocReference(documentKey, Number.POSITIVE_INFINITY);\r\n this.batchesByDocumentKey.forEachInRange([start, end], ref => {\r\n uniqueBatchIDs = uniqueBatchIDs.add(ref.targetOrBatchId);\r\n });\r\n });\r\n return PersistencePromise.resolve(this.findMutationBatches(uniqueBatchIDs));\r\n }\r\n getAllMutationBatchesAffectingQuery(transaction, query) {\r\n // Use the query path as a prefix for testing if a document matches the\r\n // query.\r\n const prefix = query.path;\r\n const immediateChildrenPathLength = prefix.length + 1;\r\n // Construct a document reference for actually scanning the index. Unlike\r\n // the prefix the document key in this reference must have an even number of\r\n // segments. The empty segment can be used a suffix of the query path\r\n // because it precedes all other segments in an ordered traversal.\r\n let startPath = prefix;\r\n if (!DocumentKey.isDocumentKey(startPath)) {\r\n startPath = startPath.child('');\r\n }\r\n const start = new DocReference(new DocumentKey(startPath), 0);\r\n // Find unique batchIDs referenced by all documents potentially matching the\r\n // query.\r\n let uniqueBatchIDs = new SortedSet(primitiveComparator);\r\n this.batchesByDocumentKey.forEachWhile(ref => {\r\n const rowKeyPath = ref.key.path;\r\n if (!prefix.isPrefixOf(rowKeyPath)) {\r\n return false;\r\n }\r\n else {\r\n // Rows with document keys more than one segment longer than the query\r\n // path can't be matches. For example, a query on 'rooms' can't match\r\n // the document /rooms/abc/messages/xyx.\r\n // TODO(mcg): we'll need a different scanner when we implement\r\n // ancestor queries.\r\n if (rowKeyPath.length === immediateChildrenPathLength) {\r\n uniqueBatchIDs = uniqueBatchIDs.add(ref.targetOrBatchId);\r\n }\r\n return true;\r\n }\r\n }, start);\r\n return PersistencePromise.resolve(this.findMutationBatches(uniqueBatchIDs));\r\n }\r\n findMutationBatches(batchIDs) {\r\n // Construct an array of matching batches, sorted by batchID to ensure that\r\n // multiple mutations affecting the same document key are applied in order.\r\n const result = [];\r\n batchIDs.forEach(batchId => {\r\n const batch = this.findMutationBatch(batchId);\r\n if (batch !== null) {\r\n result.push(batch);\r\n }\r\n });\r\n return result;\r\n }\r\n removeMutationBatch(transaction, batch) {\r\n // Find the position of the first batch for removal.\r\n const batchIndex = this.indexOfExistingBatchId(batch.batchId, 'removed');\r\n hardAssert(batchIndex === 0);\r\n this.mutationQueue.shift();\r\n let references = this.batchesByDocumentKey;\r\n return PersistencePromise.forEach(batch.mutations, (mutation) => {\r\n const ref = new DocReference(mutation.key, batch.batchId);\r\n references = references.delete(ref);\r\n return this.referenceDelegate.markPotentiallyOrphaned(transaction, mutation.key);\r\n }).next(() => {\r\n this.batchesByDocumentKey = references;\r\n });\r\n }\r\n removeCachedMutationKeys(batchId) {\r\n // No-op since the memory mutation queue does not maintain a separate cache.\r\n }\r\n containsKey(txn, key) {\r\n const ref = new DocReference(key, 0);\r\n const firstRef = this.batchesByDocumentKey.firstAfterOrEqual(ref);\r\n return PersistencePromise.resolve(key.isEqual(firstRef && firstRef.key));\r\n }\r\n performConsistencyCheck(txn) {\r\n if (this.mutationQueue.length === 0) ;\r\n return PersistencePromise.resolve();\r\n }\r\n /**\r\n * Finds the index of the given batchId in the mutation queue and asserts that\r\n * the resulting index is within the bounds of the queue.\r\n *\r\n * @param batchId - The batchId to search for\r\n * @param action - A description of what the caller is doing, phrased in passive\r\n * form (e.g. \"acknowledged\" in a routine that acknowledges batches).\r\n */\r\n indexOfExistingBatchId(batchId, action) {\r\n const index = this.indexOfBatchId(batchId);\r\n return index;\r\n }\r\n /**\r\n * Finds the index of the given batchId in the mutation queue. This operation\r\n * is O(1).\r\n *\r\n * @returns The computed index of the batch with the given batchId, based on\r\n * the state of the queue. Note this index can be negative if the requested\r\n * batchId has already been remvoed from the queue or past the end of the\r\n * queue if the batchId is larger than the last added batch.\r\n */\r\n indexOfBatchId(batchId) {\r\n if (this.mutationQueue.length === 0) {\r\n // As an index this is past the end of the queue\r\n return 0;\r\n }\r\n // Examine the front of the queue to figure out the difference between the\r\n // batchId and indexes in the array. Note that since the queue is ordered\r\n // by batchId, if the first batch has a larger batchId then the requested\r\n // batchId doesn't exist in the queue.\r\n const firstBatchId = this.mutationQueue[0].batchId;\r\n return batchId - firstBatchId;\r\n }\r\n /**\r\n * A version of lookupMutationBatch that doesn't return a promise, this makes\r\n * other functions that uses this code easier to read and more efficent.\r\n */\r\n findMutationBatch(batchId) {\r\n const index = this.indexOfBatchId(batchId);\r\n if (index < 0 || index >= this.mutationQueue.length) {\r\n return null;\r\n }\r\n const batch = this.mutationQueue[index];\r\n return batch;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction documentEntryMap() {\r\n return new SortedMap(DocumentKey.comparator);\r\n}\r\n/**\r\n * The memory-only RemoteDocumentCache for IndexedDb. To construct, invoke\r\n * `newMemoryRemoteDocumentCache()`.\r\n */\r\nclass MemoryRemoteDocumentCacheImpl {\r\n /**\r\n * @param sizer - Used to assess the size of a document. For eager GC, this is\r\n * expected to just return 0 to avoid unnecessarily doing the work of\r\n * calculating the size.\r\n */\r\n constructor(sizer) {\r\n this.sizer = sizer;\r\n /** Underlying cache of documents and their read times. */\r\n this.docs = documentEntryMap();\r\n /** Size of all cached documents. */\r\n this.size = 0;\r\n }\r\n setIndexManager(indexManager) {\r\n this.indexManager = indexManager;\r\n }\r\n /**\r\n * Adds the supplied entry to the cache and updates the cache size as appropriate.\r\n *\r\n * All calls of `addEntry` are required to go through the RemoteDocumentChangeBuffer\r\n * returned by `newChangeBuffer()`.\r\n */\r\n addEntry(transaction, doc) {\r\n const key = doc.key;\r\n const entry = this.docs.get(key);\r\n const previousSize = entry ? entry.size : 0;\r\n const currentSize = this.sizer(doc);\r\n this.docs = this.docs.insert(key, {\r\n document: doc.mutableCopy(),\r\n size: currentSize\r\n });\r\n this.size += currentSize - previousSize;\r\n return this.indexManager.addToCollectionParentIndex(transaction, key.path.popLast());\r\n }\r\n /**\r\n * Removes the specified entry from the cache and updates the cache size as appropriate.\r\n *\r\n * All calls of `removeEntry` are required to go through the RemoteDocumentChangeBuffer\r\n * returned by `newChangeBuffer()`.\r\n */\r\n removeEntry(documentKey) {\r\n const entry = this.docs.get(documentKey);\r\n if (entry) {\r\n this.docs = this.docs.remove(documentKey);\r\n this.size -= entry.size;\r\n }\r\n }\r\n getEntry(transaction, documentKey) {\r\n const entry = this.docs.get(documentKey);\r\n return PersistencePromise.resolve(entry\r\n ? entry.document.mutableCopy()\r\n : MutableDocument.newInvalidDocument(documentKey));\r\n }\r\n getEntries(transaction, documentKeys) {\r\n let results = mutableDocumentMap();\r\n documentKeys.forEach(documentKey => {\r\n const entry = this.docs.get(documentKey);\r\n results = results.insert(documentKey, entry\r\n ? entry.document.mutableCopy()\r\n : MutableDocument.newInvalidDocument(documentKey));\r\n });\r\n return PersistencePromise.resolve(results);\r\n }\r\n getAllFromCollection(transaction, collectionPath, offset) {\r\n let results = mutableDocumentMap();\r\n // Documents are ordered by key, so we can use a prefix scan to narrow down\r\n // the documents we need to match the query against.\r\n const prefix = new DocumentKey(collectionPath.child(''));\r\n const iterator = this.docs.getIteratorFrom(prefix);\r\n while (iterator.hasNext()) {\r\n const { key, value: { document } } = iterator.getNext();\r\n if (!collectionPath.isPrefixOf(key.path)) {\r\n break;\r\n }\r\n if (key.path.length > collectionPath.length + 1) {\r\n // Exclude entries from subcollections.\r\n continue;\r\n }\r\n if (indexOffsetComparator(newIndexOffsetFromDocument(document), offset) <= 0) {\r\n // The document sorts before the offset.\r\n continue;\r\n }\r\n results = results.insert(document.key, document.mutableCopy());\r\n }\r\n return PersistencePromise.resolve(results);\r\n }\r\n getAllFromCollectionGroup(transaction, collectionGroup, offset, limti) {\r\n // This method should only be called from the IndexBackfiller if persistence\r\n // is enabled.\r\n fail();\r\n }\r\n forEachDocumentKey(transaction, f) {\r\n return PersistencePromise.forEach(this.docs, (key) => f(key));\r\n }\r\n newChangeBuffer(options) {\r\n // `trackRemovals` is ignores since the MemoryRemoteDocumentCache keeps\r\n // a separate changelog and does not need special handling for removals.\r\n return new MemoryRemoteDocumentChangeBuffer(this);\r\n }\r\n getSize(txn) {\r\n return PersistencePromise.resolve(this.size);\r\n }\r\n}\r\n/**\r\n * Creates a new memory-only RemoteDocumentCache.\r\n *\r\n * @param sizer - Used to assess the size of a document. For eager GC, this is\r\n * expected to just return 0 to avoid unnecessarily doing the work of\r\n * calculating the size.\r\n */\r\nfunction newMemoryRemoteDocumentCache(sizer) {\r\n return new MemoryRemoteDocumentCacheImpl(sizer);\r\n}\r\n/**\r\n * Handles the details of adding and updating documents in the MemoryRemoteDocumentCache.\r\n */\r\nclass MemoryRemoteDocumentChangeBuffer extends RemoteDocumentChangeBuffer {\r\n constructor(documentCache) {\r\n super();\r\n this.documentCache = documentCache;\r\n }\r\n applyChanges(transaction) {\r\n const promises = [];\r\n this.changes.forEach((key, doc) => {\r\n if (doc.isValidDocument()) {\r\n promises.push(this.documentCache.addEntry(transaction, doc));\r\n }\r\n else {\r\n this.documentCache.removeEntry(key);\r\n }\r\n });\r\n return PersistencePromise.waitFor(promises);\r\n }\r\n getFromCache(transaction, documentKey) {\r\n return this.documentCache.getEntry(transaction, documentKey);\r\n }\r\n getAllFromCache(transaction, documentKeys) {\r\n return this.documentCache.getEntries(transaction, documentKeys);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MemoryTargetCache {\r\n constructor(persistence) {\r\n this.persistence = persistence;\r\n /**\r\n * Maps a target to the data about that target\r\n */\r\n this.targets = new ObjectMap(t => canonifyTarget(t), targetEquals);\r\n /** The last received snapshot version. */\r\n this.lastRemoteSnapshotVersion = SnapshotVersion.min();\r\n /** The highest numbered target ID encountered. */\r\n this.highestTargetId = 0;\r\n /** The highest sequence number encountered. */\r\n this.highestSequenceNumber = 0;\r\n /**\r\n * A ordered bidirectional mapping between documents and the remote target\r\n * IDs.\r\n */\r\n this.references = new ReferenceSet();\r\n this.targetCount = 0;\r\n this.targetIdGenerator = TargetIdGenerator.forTargetCache();\r\n }\r\n forEachTarget(txn, f) {\r\n this.targets.forEach((_, targetData) => f(targetData));\r\n return PersistencePromise.resolve();\r\n }\r\n getLastRemoteSnapshotVersion(transaction) {\r\n return PersistencePromise.resolve(this.lastRemoteSnapshotVersion);\r\n }\r\n getHighestSequenceNumber(transaction) {\r\n return PersistencePromise.resolve(this.highestSequenceNumber);\r\n }\r\n allocateTargetId(transaction) {\r\n this.highestTargetId = this.targetIdGenerator.next();\r\n return PersistencePromise.resolve(this.highestTargetId);\r\n }\r\n setTargetsMetadata(transaction, highestListenSequenceNumber, lastRemoteSnapshotVersion) {\r\n if (lastRemoteSnapshotVersion) {\r\n this.lastRemoteSnapshotVersion = lastRemoteSnapshotVersion;\r\n }\r\n if (highestListenSequenceNumber > this.highestSequenceNumber) {\r\n this.highestSequenceNumber = highestListenSequenceNumber;\r\n }\r\n return PersistencePromise.resolve();\r\n }\r\n saveTargetData(targetData) {\r\n this.targets.set(targetData.target, targetData);\r\n const targetId = targetData.targetId;\r\n if (targetId > this.highestTargetId) {\r\n this.targetIdGenerator = new TargetIdGenerator(targetId);\r\n this.highestTargetId = targetId;\r\n }\r\n if (targetData.sequenceNumber > this.highestSequenceNumber) {\r\n this.highestSequenceNumber = targetData.sequenceNumber;\r\n }\r\n }\r\n addTargetData(transaction, targetData) {\r\n this.saveTargetData(targetData);\r\n this.targetCount += 1;\r\n return PersistencePromise.resolve();\r\n }\r\n updateTargetData(transaction, targetData) {\r\n this.saveTargetData(targetData);\r\n return PersistencePromise.resolve();\r\n }\r\n removeTargetData(transaction, targetData) {\r\n this.targets.delete(targetData.target);\r\n this.references.removeReferencesForId(targetData.targetId);\r\n this.targetCount -= 1;\r\n return PersistencePromise.resolve();\r\n }\r\n removeTargets(transaction, upperBound, activeTargetIds) {\r\n let count = 0;\r\n const removals = [];\r\n this.targets.forEach((key, targetData) => {\r\n if (targetData.sequenceNumber <= upperBound &&\r\n activeTargetIds.get(targetData.targetId) === null) {\r\n this.targets.delete(key);\r\n removals.push(this.removeMatchingKeysForTargetId(transaction, targetData.targetId));\r\n count++;\r\n }\r\n });\r\n return PersistencePromise.waitFor(removals).next(() => count);\r\n }\r\n getTargetCount(transaction) {\r\n return PersistencePromise.resolve(this.targetCount);\r\n }\r\n getTargetData(transaction, target) {\r\n const targetData = this.targets.get(target) || null;\r\n return PersistencePromise.resolve(targetData);\r\n }\r\n addMatchingKeys(txn, keys, targetId) {\r\n this.references.addReferences(keys, targetId);\r\n return PersistencePromise.resolve();\r\n }\r\n removeMatchingKeys(txn, keys, targetId) {\r\n this.references.removeReferences(keys, targetId);\r\n const referenceDelegate = this.persistence.referenceDelegate;\r\n const promises = [];\r\n if (referenceDelegate) {\r\n keys.forEach(key => {\r\n promises.push(referenceDelegate.markPotentiallyOrphaned(txn, key));\r\n });\r\n }\r\n return PersistencePromise.waitFor(promises);\r\n }\r\n removeMatchingKeysForTargetId(txn, targetId) {\r\n this.references.removeReferencesForId(targetId);\r\n return PersistencePromise.resolve();\r\n }\r\n getMatchingKeysForTargetId(txn, targetId) {\r\n const matchingKeys = this.references.referencesForId(targetId);\r\n return PersistencePromise.resolve(matchingKeys);\r\n }\r\n containsKey(txn, key) {\r\n return PersistencePromise.resolve(this.references.containsKey(key));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$d = 'MemoryPersistence';\r\n/**\r\n * A memory-backed instance of Persistence. Data is stored only in RAM and\r\n * not persisted across sessions.\r\n */\r\nclass MemoryPersistence {\r\n /**\r\n * The constructor accepts a factory for creating a reference delegate. This\r\n * allows both the delegate and this instance to have strong references to\r\n * each other without having nullable fields that would then need to be\r\n * checked or asserted on every access.\r\n */\r\n constructor(referenceDelegateFactory, serializer) {\r\n this.mutationQueues = {};\r\n this.overlays = {};\r\n this.listenSequence = new ListenSequence(0);\r\n this._started = false;\r\n this._started = true;\r\n this.referenceDelegate = referenceDelegateFactory(this);\r\n this.targetCache = new MemoryTargetCache(this);\r\n const sizer = (doc) => this.referenceDelegate.documentSize(doc);\r\n this.indexManager = new MemoryIndexManager();\r\n this.remoteDocumentCache = newMemoryRemoteDocumentCache(sizer);\r\n this.serializer = new LocalSerializer(serializer);\r\n this.bundleCache = new MemoryBundleCache(this.serializer);\r\n }\r\n start() {\r\n return Promise.resolve();\r\n }\r\n shutdown() {\r\n // No durable state to ensure is closed on shutdown.\r\n this._started = false;\r\n return Promise.resolve();\r\n }\r\n get started() {\r\n return this._started;\r\n }\r\n setDatabaseDeletedListener() {\r\n // No op.\r\n }\r\n setNetworkEnabled() {\r\n // No op.\r\n }\r\n getIndexManager(user) {\r\n // We do not currently support indices for memory persistence, so we can\r\n // return the same shared instance of the memory index manager.\r\n return this.indexManager;\r\n }\r\n getDocumentOverlayCache(user) {\r\n let overlay = this.overlays[user.toKey()];\r\n if (!overlay) {\r\n overlay = new MemoryDocumentOverlayCache();\r\n this.overlays[user.toKey()] = overlay;\r\n }\r\n return overlay;\r\n }\r\n getMutationQueue(user, indexManager) {\r\n let queue = this.mutationQueues[user.toKey()];\r\n if (!queue) {\r\n queue = new MemoryMutationQueue(indexManager, this.referenceDelegate);\r\n this.mutationQueues[user.toKey()] = queue;\r\n }\r\n return queue;\r\n }\r\n getTargetCache() {\r\n return this.targetCache;\r\n }\r\n getRemoteDocumentCache() {\r\n return this.remoteDocumentCache;\r\n }\r\n getBundleCache() {\r\n return this.bundleCache;\r\n }\r\n runTransaction(action, mode, transactionOperation) {\r\n logDebug(LOG_TAG$d, 'Starting transaction:', action);\r\n const txn = new MemoryTransaction(this.listenSequence.next());\r\n this.referenceDelegate.onTransactionStarted();\r\n return transactionOperation(txn)\r\n .next(result => {\r\n return this.referenceDelegate\r\n .onTransactionCommitted(txn)\r\n .next(() => result);\r\n })\r\n .toPromise()\r\n .then(result => {\r\n txn.raiseOnCommittedEvent();\r\n return result;\r\n });\r\n }\r\n mutationQueuesContainKey(transaction, key) {\r\n return PersistencePromise.or(Object.values(this.mutationQueues).map(queue => () => queue.containsKey(transaction, key)));\r\n }\r\n}\r\n/**\r\n * Memory persistence is not actually transactional, but future implementations\r\n * may have transaction-scoped state.\r\n */\r\nclass MemoryTransaction extends PersistenceTransaction {\r\n constructor(currentSequenceNumber) {\r\n super();\r\n this.currentSequenceNumber = currentSequenceNumber;\r\n }\r\n}\r\nclass MemoryEagerDelegate {\r\n constructor(persistence) {\r\n this.persistence = persistence;\r\n /** Tracks all documents that are active in Query views. */\r\n this.localViewReferences = new ReferenceSet();\r\n /** The list of documents that are potentially GCed after each transaction. */\r\n this._orphanedDocuments = null;\r\n }\r\n static factory(persistence) {\r\n return new MemoryEagerDelegate(persistence);\r\n }\r\n get orphanedDocuments() {\r\n if (!this._orphanedDocuments) {\r\n throw fail();\r\n }\r\n else {\r\n return this._orphanedDocuments;\r\n }\r\n }\r\n addReference(txn, targetId, key) {\r\n this.localViewReferences.addReference(key, targetId);\r\n this.orphanedDocuments.delete(key.toString());\r\n return PersistencePromise.resolve();\r\n }\r\n removeReference(txn, targetId, key) {\r\n this.localViewReferences.removeReference(key, targetId);\r\n this.orphanedDocuments.add(key.toString());\r\n return PersistencePromise.resolve();\r\n }\r\n markPotentiallyOrphaned(txn, key) {\r\n this.orphanedDocuments.add(key.toString());\r\n return PersistencePromise.resolve();\r\n }\r\n removeTarget(txn, targetData) {\r\n const orphaned = this.localViewReferences.removeReferencesForId(targetData.targetId);\r\n orphaned.forEach(key => this.orphanedDocuments.add(key.toString()));\r\n const cache = this.persistence.getTargetCache();\r\n return cache\r\n .getMatchingKeysForTargetId(txn, targetData.targetId)\r\n .next(keys => {\r\n keys.forEach(key => this.orphanedDocuments.add(key.toString()));\r\n })\r\n .next(() => cache.removeTargetData(txn, targetData));\r\n }\r\n onTransactionStarted() {\r\n this._orphanedDocuments = new Set();\r\n }\r\n onTransactionCommitted(txn) {\r\n // Remove newly orphaned documents.\r\n const cache = this.persistence.getRemoteDocumentCache();\r\n const changeBuffer = cache.newChangeBuffer();\r\n return PersistencePromise.forEach(this.orphanedDocuments, (path) => {\r\n const key = DocumentKey.fromPath(path);\r\n return this.isReferenced(txn, key).next(isReferenced => {\r\n if (!isReferenced) {\r\n changeBuffer.removeEntry(key, SnapshotVersion.min());\r\n }\r\n });\r\n }).next(() => {\r\n this._orphanedDocuments = null;\r\n return changeBuffer.apply(txn);\r\n });\r\n }\r\n updateLimboDocument(txn, key) {\r\n return this.isReferenced(txn, key).next(isReferenced => {\r\n if (isReferenced) {\r\n this.orphanedDocuments.delete(key.toString());\r\n }\r\n else {\r\n this.orphanedDocuments.add(key.toString());\r\n }\r\n });\r\n }\r\n documentSize(doc) {\r\n // For eager GC, we don't care about the document size, there are no size thresholds.\r\n return 0;\r\n }\r\n isReferenced(txn, key) {\r\n return PersistencePromise.or([\r\n () => PersistencePromise.resolve(this.localViewReferences.containsKey(key)),\r\n () => this.persistence.getTargetCache().containsKey(txn, key),\r\n () => this.persistence.mutationQueuesContainKey(txn, key)\r\n ]);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Performs database creation and schema upgrades. */\r\nclass SchemaConverter {\r\n constructor(serializer) {\r\n this.serializer = serializer;\r\n }\r\n /**\r\n * Performs database creation and schema upgrades.\r\n *\r\n * Note that in production, this method is only ever used to upgrade the schema\r\n * to SCHEMA_VERSION. Different values of toVersion are only used for testing\r\n * and local feature development.\r\n */\r\n createOrUpgrade(db, txn, fromVersion, toVersion) {\r\n const simpleDbTransaction = new SimpleDbTransaction('createOrUpgrade', txn);\r\n if (fromVersion < 1 && toVersion >= 1) {\r\n createPrimaryClientStore(db);\r\n createMutationQueue(db);\r\n createQueryCache(db);\r\n createLegacyRemoteDocumentCache(db);\r\n }\r\n // Migration 2 to populate the targetGlobal object no longer needed since\r\n // migration 3 unconditionally clears it.\r\n let p = PersistencePromise.resolve();\r\n if (fromVersion < 3 && toVersion >= 3) {\r\n // Brand new clients don't need to drop and recreate--only clients that\r\n // potentially have corrupt data.\r\n if (fromVersion !== 0) {\r\n dropQueryCache(db);\r\n createQueryCache(db);\r\n }\r\n p = p.next(() => writeEmptyTargetGlobalEntry(simpleDbTransaction));\r\n }\r\n if (fromVersion < 4 && toVersion >= 4) {\r\n if (fromVersion !== 0) {\r\n // Schema version 3 uses auto-generated keys to generate globally unique\r\n // mutation batch IDs (this was previously ensured internally by the\r\n // client). To migrate to the new schema, we have to read all mutations\r\n // and write them back out. We preserve the existing batch IDs to guarantee\r\n // consistency with other object stores. Any further mutation batch IDs will\r\n // be auto-generated.\r\n p = p.next(() => upgradeMutationBatchSchemaAndMigrateData(db, simpleDbTransaction));\r\n }\r\n p = p.next(() => {\r\n createClientMetadataStore(db);\r\n });\r\n }\r\n if (fromVersion < 5 && toVersion >= 5) {\r\n p = p.next(() => this.removeAcknowledgedMutations(simpleDbTransaction));\r\n }\r\n if (fromVersion < 6 && toVersion >= 6) {\r\n p = p.next(() => {\r\n createDocumentGlobalStore(db);\r\n return this.addDocumentGlobal(simpleDbTransaction);\r\n });\r\n }\r\n if (fromVersion < 7 && toVersion >= 7) {\r\n p = p.next(() => this.ensureSequenceNumbers(simpleDbTransaction));\r\n }\r\n if (fromVersion < 8 && toVersion >= 8) {\r\n p = p.next(() => this.createCollectionParentIndex(db, simpleDbTransaction));\r\n }\r\n if (fromVersion < 9 && toVersion >= 9) {\r\n p = p.next(() => {\r\n // Multi-Tab used to manage its own changelog, but this has been moved\r\n // to the DbRemoteDocument object store itself. Since the previous change\r\n // log only contained transient data, we can drop its object store.\r\n dropRemoteDocumentChangesStore(db);\r\n // Note: Schema version 9 used to create a read time index for the\r\n // RemoteDocumentCache. This is now done with schema version 13.\r\n });\r\n }\r\n if (fromVersion < 10 && toVersion >= 10) {\r\n p = p.next(() => this.rewriteCanonicalIds(simpleDbTransaction));\r\n }\r\n if (fromVersion < 11 && toVersion >= 11) {\r\n p = p.next(() => {\r\n createBundlesStore(db);\r\n createNamedQueriesStore(db);\r\n });\r\n }\r\n if (fromVersion < 12 && toVersion >= 12) {\r\n p = p.next(() => {\r\n createDocumentOverlayStore(db);\r\n });\r\n }\r\n if (fromVersion < 13 && toVersion >= 13) {\r\n p = p\r\n .next(() => createRemoteDocumentCache(db))\r\n .next(() => this.rewriteRemoteDocumentCache(db, simpleDbTransaction))\r\n .next(() => db.deleteObjectStore(DbRemoteDocumentStore$1));\r\n }\r\n if (fromVersion < 14 && toVersion >= 14) {\r\n p = p.next(() => this.runOverlayMigration(db, simpleDbTransaction));\r\n }\r\n if (fromVersion < 15 && toVersion >= 15) {\r\n p = p.next(() => createFieldIndex(db));\r\n }\r\n return p;\r\n }\r\n addDocumentGlobal(txn) {\r\n let byteSize = 0;\r\n return txn\r\n .store(DbRemoteDocumentStore$1)\r\n .iterate((_, doc) => {\r\n byteSize += dbDocumentSize(doc);\r\n })\r\n .next(() => {\r\n const metadata = { byteSize };\r\n return txn\r\n .store(DbRemoteDocumentGlobalStore)\r\n .put(DbRemoteDocumentGlobalKey, metadata);\r\n });\r\n }\r\n removeAcknowledgedMutations(txn) {\r\n const queuesStore = txn.store(DbMutationQueueStore);\r\n const mutationsStore = txn.store(DbMutationBatchStore);\r\n return queuesStore.loadAll().next(queues => {\r\n return PersistencePromise.forEach(queues, (queue) => {\r\n const range = IDBKeyRange.bound([queue.userId, BATCHID_UNKNOWN], [queue.userId, queue.lastAcknowledgedBatchId]);\r\n return mutationsStore\r\n .loadAll(DbMutationBatchUserMutationsIndex, range)\r\n .next(dbBatches => {\r\n return PersistencePromise.forEach(dbBatches, (dbBatch) => {\r\n hardAssert(dbBatch.userId === queue.userId);\r\n const batch = fromDbMutationBatch(this.serializer, dbBatch);\r\n return removeMutationBatch(txn, queue.userId, batch).next(() => { });\r\n });\r\n });\r\n });\r\n });\r\n }\r\n /**\r\n * Ensures that every document in the remote document cache has a corresponding sentinel row\r\n * with a sequence number. Missing rows are given the most recently used sequence number.\r\n */\r\n ensureSequenceNumbers(txn) {\r\n const documentTargetStore = txn.store(DbTargetDocumentStore);\r\n const documentsStore = txn.store(DbRemoteDocumentStore$1);\r\n const globalTargetStore = txn.store(DbTargetGlobalStore);\r\n return globalTargetStore.get(DbTargetGlobalKey).next(metadata => {\r\n const writeSentinelKey = (path) => {\r\n return documentTargetStore.put({\r\n targetId: 0,\r\n path: encodeResourcePath(path),\r\n sequenceNumber: metadata.highestListenSequenceNumber\r\n });\r\n };\r\n const promises = [];\r\n return documentsStore\r\n .iterate((key, doc) => {\r\n const path = new ResourcePath(key);\r\n const docSentinelKey = sentinelKey(path);\r\n promises.push(documentTargetStore.get(docSentinelKey).next(maybeSentinel => {\r\n if (!maybeSentinel) {\r\n return writeSentinelKey(path);\r\n }\r\n else {\r\n return PersistencePromise.resolve();\r\n }\r\n }));\r\n })\r\n .next(() => PersistencePromise.waitFor(promises));\r\n });\r\n }\r\n createCollectionParentIndex(db, txn) {\r\n // Create the index.\r\n db.createObjectStore(DbCollectionParentStore, {\r\n keyPath: DbCollectionParentKeyPath\r\n });\r\n const collectionParentsStore = txn.store(DbCollectionParentStore);\r\n // Helper to add an index entry iff we haven't already written it.\r\n const cache = new MemoryCollectionParentIndex();\r\n const addEntry = (collectionPath) => {\r\n if (cache.add(collectionPath)) {\r\n const collectionId = collectionPath.lastSegment();\r\n const parentPath = collectionPath.popLast();\r\n return collectionParentsStore.put({\r\n collectionId,\r\n parent: encodeResourcePath(parentPath)\r\n });\r\n }\r\n };\r\n // Index existing remote documents.\r\n return txn\r\n .store(DbRemoteDocumentStore$1)\r\n .iterate({ keysOnly: true }, (pathSegments, _) => {\r\n const path = new ResourcePath(pathSegments);\r\n return addEntry(path.popLast());\r\n })\r\n .next(() => {\r\n // Index existing mutations.\r\n return txn\r\n .store(DbDocumentMutationStore)\r\n .iterate({ keysOnly: true }, ([userID, encodedPath, batchId], _) => {\r\n const path = decodeResourcePath(encodedPath);\r\n return addEntry(path.popLast());\r\n });\r\n });\r\n }\r\n rewriteCanonicalIds(txn) {\r\n const targetStore = txn.store(DbTargetStore);\r\n return targetStore.iterate((key, originalDbTarget) => {\r\n const originalTargetData = fromDbTarget(originalDbTarget);\r\n const updatedDbTarget = toDbTarget(this.serializer, originalTargetData);\r\n return targetStore.put(updatedDbTarget);\r\n });\r\n }\r\n rewriteRemoteDocumentCache(db, transaction) {\r\n const legacyRemoteDocumentStore = transaction.store(DbRemoteDocumentStore$1);\r\n const writes = [];\r\n return legacyRemoteDocumentStore\r\n .iterate((_, legacyDocument) => {\r\n const remoteDocumentStore = transaction.store(DbRemoteDocumentStore);\r\n const path = extractKey(legacyDocument).path.toArray();\r\n const dbRemoteDocument = {\r\n prefixPath: path.slice(0, path.length - 2),\r\n collectionGroup: path[path.length - 2],\r\n documentId: path[path.length - 1],\r\n readTime: legacyDocument.readTime || [0, 0],\r\n unknownDocument: legacyDocument.unknownDocument,\r\n noDocument: legacyDocument.noDocument,\r\n document: legacyDocument.document,\r\n hasCommittedMutations: !!legacyDocument.hasCommittedMutations\r\n };\r\n writes.push(remoteDocumentStore.put(dbRemoteDocument));\r\n })\r\n .next(() => PersistencePromise.waitFor(writes));\r\n }\r\n runOverlayMigration(db, transaction) {\r\n const mutationsStore = transaction.store(DbMutationBatchStore);\r\n const remoteDocumentCache = newIndexedDbRemoteDocumentCache(this.serializer);\r\n const memoryPersistence = new MemoryPersistence(MemoryEagerDelegate.factory, this.serializer.remoteSerializer);\r\n return mutationsStore.loadAll().next(dbBatches => {\r\n const userToDocumentSet = new Map();\r\n dbBatches.forEach(dbBatch => {\r\n var _a;\r\n let documentSet = (_a = userToDocumentSet.get(dbBatch.userId)) !== null && _a !== void 0 ? _a : documentKeySet();\r\n const batch = fromDbMutationBatch(this.serializer, dbBatch);\r\n batch.keys().forEach(key => (documentSet = documentSet.add(key)));\r\n userToDocumentSet.set(dbBatch.userId, documentSet);\r\n });\r\n return PersistencePromise.forEach(userToDocumentSet, (allDocumentKeysForUser, userId) => {\r\n const user = new User(userId);\r\n const documentOverlayCache = IndexedDbDocumentOverlayCache.forUser(this.serializer, user);\r\n // NOTE: The index manager and the reference delegate are\r\n // irrelevant for the purpose of recalculating and saving\r\n // overlays. We can therefore simply use the memory\r\n // implementation.\r\n const indexManager = memoryPersistence.getIndexManager(user);\r\n const mutationQueue = IndexedDbMutationQueue.forUser(user, this.serializer, indexManager, memoryPersistence.referenceDelegate);\r\n const localDocumentsView = new LocalDocumentsView(remoteDocumentCache, mutationQueue, documentOverlayCache, indexManager);\r\n return localDocumentsView\r\n .recalculateAndSaveOverlaysForDocumentKeys(new IndexedDbTransaction(transaction, ListenSequence.INVALID), allDocumentKeysForUser)\r\n .next();\r\n });\r\n });\r\n }\r\n}\r\nfunction sentinelKey(path) {\r\n return [0, encodeResourcePath(path)];\r\n}\r\nfunction createPrimaryClientStore(db) {\r\n db.createObjectStore(DbPrimaryClientStore);\r\n}\r\nfunction createMutationQueue(db) {\r\n db.createObjectStore(DbMutationQueueStore, {\r\n keyPath: DbMutationQueueKeyPath\r\n });\r\n const mutationBatchesStore = db.createObjectStore(DbMutationBatchStore, {\r\n keyPath: DbMutationBatchKeyPath,\r\n autoIncrement: true\r\n });\r\n mutationBatchesStore.createIndex(DbMutationBatchUserMutationsIndex, DbMutationBatchUserMutationsKeyPath, { unique: true });\r\n db.createObjectStore(DbDocumentMutationStore);\r\n}\r\n/**\r\n * Upgrade function to migrate the 'mutations' store from V1 to V3. Loads\r\n * and rewrites all data.\r\n */\r\nfunction upgradeMutationBatchSchemaAndMigrateData(db, txn) {\r\n const v1MutationsStore = txn.store(DbMutationBatchStore);\r\n return v1MutationsStore.loadAll().next(existingMutations => {\r\n db.deleteObjectStore(DbMutationBatchStore);\r\n const mutationsStore = db.createObjectStore(DbMutationBatchStore, {\r\n keyPath: DbMutationBatchKeyPath,\r\n autoIncrement: true\r\n });\r\n mutationsStore.createIndex(DbMutationBatchUserMutationsIndex, DbMutationBatchUserMutationsKeyPath, { unique: true });\r\n const v3MutationsStore = txn.store(DbMutationBatchStore);\r\n const writeAll = existingMutations.map(mutation => v3MutationsStore.put(mutation));\r\n return PersistencePromise.waitFor(writeAll);\r\n });\r\n}\r\nfunction createLegacyRemoteDocumentCache(db) {\r\n db.createObjectStore(DbRemoteDocumentStore$1);\r\n}\r\nfunction createRemoteDocumentCache(db) {\r\n const remoteDocumentStore = db.createObjectStore(DbRemoteDocumentStore, {\r\n keyPath: DbRemoteDocumentKeyPath\r\n });\r\n remoteDocumentStore.createIndex(DbRemoteDocumentDocumentKeyIndex, DbRemoteDocumentDocumentKeyIndexPath);\r\n remoteDocumentStore.createIndex(DbRemoteDocumentCollectionGroupIndex, DbRemoteDocumentCollectionGroupIndexPath);\r\n}\r\nfunction createDocumentGlobalStore(db) {\r\n db.createObjectStore(DbRemoteDocumentGlobalStore);\r\n}\r\nfunction createQueryCache(db) {\r\n const targetDocumentsStore = db.createObjectStore(DbTargetDocumentStore, {\r\n keyPath: DbTargetDocumentKeyPath\r\n });\r\n targetDocumentsStore.createIndex(DbTargetDocumentDocumentTargetsIndex, DbTargetDocumentDocumentTargetsKeyPath, { unique: true });\r\n const targetStore = db.createObjectStore(DbTargetStore, {\r\n keyPath: DbTargetKeyPath\r\n });\r\n // NOTE: This is unique only because the TargetId is the suffix.\r\n targetStore.createIndex(DbTargetQueryTargetsIndexName, DbTargetQueryTargetsKeyPath, { unique: true });\r\n db.createObjectStore(DbTargetGlobalStore);\r\n}\r\nfunction dropQueryCache(db) {\r\n db.deleteObjectStore(DbTargetDocumentStore);\r\n db.deleteObjectStore(DbTargetStore);\r\n db.deleteObjectStore(DbTargetGlobalStore);\r\n}\r\nfunction dropRemoteDocumentChangesStore(db) {\r\n if (db.objectStoreNames.contains('remoteDocumentChanges')) {\r\n db.deleteObjectStore('remoteDocumentChanges');\r\n }\r\n}\r\n/**\r\n * Creates the target global singleton row.\r\n *\r\n * @param txn - The version upgrade transaction for indexeddb\r\n */\r\nfunction writeEmptyTargetGlobalEntry(txn) {\r\n const globalStore = txn.store(DbTargetGlobalStore);\r\n const metadata = {\r\n highestTargetId: 0,\r\n highestListenSequenceNumber: 0,\r\n lastRemoteSnapshotVersion: SnapshotVersion.min().toTimestamp(),\r\n targetCount: 0\r\n };\r\n return globalStore.put(DbTargetGlobalKey, metadata);\r\n}\r\nfunction createClientMetadataStore(db) {\r\n db.createObjectStore(DbClientMetadataStore, {\r\n keyPath: DbClientMetadataKeyPath\r\n });\r\n}\r\nfunction createBundlesStore(db) {\r\n db.createObjectStore(DbBundleStore, {\r\n keyPath: DbBundleKeyPath\r\n });\r\n}\r\nfunction createNamedQueriesStore(db) {\r\n db.createObjectStore(DbNamedQueryStore, {\r\n keyPath: DbNamedQueryKeyPath\r\n });\r\n}\r\nfunction createFieldIndex(db) {\r\n const indexConfigurationStore = db.createObjectStore(DbIndexConfigurationStore, {\r\n keyPath: DbIndexConfigurationKeyPath,\r\n autoIncrement: true\r\n });\r\n indexConfigurationStore.createIndex(DbIndexConfigurationCollectionGroupIndex, DbIndexConfigurationCollectionGroupIndexPath, { unique: false });\r\n const indexStateStore = db.createObjectStore(DbIndexStateStore, {\r\n keyPath: DbIndexStateKeyPath\r\n });\r\n indexStateStore.createIndex(DbIndexStateSequenceNumberIndex, DbIndexStateSequenceNumberIndexPath, { unique: false });\r\n const indexEntryStore = db.createObjectStore(DbIndexEntryStore, {\r\n keyPath: DbIndexEntryKeyPath\r\n });\r\n indexEntryStore.createIndex(DbIndexEntryDocumentKeyIndex, DbIndexEntryDocumentKeyIndexPath, { unique: false });\r\n}\r\nfunction createDocumentOverlayStore(db) {\r\n const documentOverlayStore = db.createObjectStore(DbDocumentOverlayStore, {\r\n keyPath: DbDocumentOverlayKeyPath\r\n });\r\n documentOverlayStore.createIndex(DbDocumentOverlayCollectionPathOverlayIndex, DbDocumentOverlayCollectionPathOverlayIndexPath, { unique: false });\r\n documentOverlayStore.createIndex(DbDocumentOverlayCollectionGroupOverlayIndex, DbDocumentOverlayCollectionGroupOverlayIndexPath, { unique: false });\r\n}\r\nfunction extractKey(remoteDoc) {\r\n if (remoteDoc.document) {\r\n return new DocumentKey(ResourcePath.fromString(remoteDoc.document.name).popFirst(5));\r\n }\r\n else if (remoteDoc.noDocument) {\r\n return DocumentKey.fromSegments(remoteDoc.noDocument.path);\r\n }\r\n else if (remoteDoc.unknownDocument) {\r\n return DocumentKey.fromSegments(remoteDoc.unknownDocument.path);\r\n }\r\n else {\r\n return fail();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$c = 'IndexedDbPersistence';\r\n/**\r\n * Oldest acceptable age in milliseconds for client metadata before the client\r\n * is considered inactive and its associated data is garbage collected.\r\n */\r\nconst MAX_CLIENT_AGE_MS = 30 * 60 * 1000; // 30 minutes\r\n/**\r\n * Oldest acceptable metadata age for clients that may participate in the\r\n * primary lease election. Clients that have not updated their client metadata\r\n * within 5 seconds are not eligible to receive a primary lease.\r\n */\r\nconst MAX_PRIMARY_ELIGIBLE_AGE_MS = 5000;\r\n/**\r\n * The interval at which clients will update their metadata, including\r\n * refreshing their primary lease if held or potentially trying to acquire it if\r\n * not held.\r\n *\r\n * Primary clients may opportunistically refresh their metadata earlier\r\n * if they're already performing an IndexedDB operation.\r\n */\r\nconst CLIENT_METADATA_REFRESH_INTERVAL_MS = 4000;\r\n/** User-facing error when the primary lease is required but not available. */\r\nconst PRIMARY_LEASE_EXCLUSIVE_ERROR_MSG = 'Failed to obtain exclusive access to the persistence layer. To allow ' +\r\n 'shared access, multi-tab synchronization has to be enabled in all tabs. ' +\r\n 'If you are using `experimentalForceOwningTab:true`, make sure that only ' +\r\n 'one tab has persistence enabled at any given time.';\r\nconst UNSUPPORTED_PLATFORM_ERROR_MSG = 'This platform is either missing IndexedDB or is known to have ' +\r\n 'an incomplete implementation. Offline persistence has been disabled.';\r\n// The format of the LocalStorage key that stores zombied client is:\r\n// firestore_zombie__\r\nconst ZOMBIED_CLIENTS_KEY_PREFIX = 'firestore_zombie';\r\n/**\r\n * The name of the main (and currently only) IndexedDB database. This name is\r\n * appended to the prefix provided to the IndexedDbPersistence constructor.\r\n */\r\nconst MAIN_DATABASE = 'main';\r\n/**\r\n * An IndexedDB-backed instance of Persistence. Data is stored persistently\r\n * across sessions.\r\n *\r\n * On Web only, the Firestore SDKs support shared access to its persistence\r\n * layer. This allows multiple browser tabs to read and write to IndexedDb and\r\n * to synchronize state even without network connectivity. Shared access is\r\n * currently optional and not enabled unless all clients invoke\r\n * `enablePersistence()` with `{synchronizeTabs:true}`.\r\n *\r\n * In multi-tab mode, if multiple clients are active at the same time, the SDK\r\n * will designate one client as the “primary client”. An effort is made to pick\r\n * a visible, network-connected and active client, and this client is\r\n * responsible for letting other clients know about its presence. The primary\r\n * client writes a unique client-generated identifier (the client ID) to\r\n * IndexedDb’s “owner” store every 4 seconds. If the primary client fails to\r\n * update this entry, another client can acquire the lease and take over as\r\n * primary.\r\n *\r\n * Some persistence operations in the SDK are designated as primary-client only\r\n * operations. This includes the acknowledgment of mutations and all updates of\r\n * remote documents. The effects of these operations are written to persistence\r\n * and then broadcast to other tabs via LocalStorage (see\r\n * `WebStorageSharedClientState`), which then refresh their state from\r\n * persistence.\r\n *\r\n * Similarly, the primary client listens to notifications sent by secondary\r\n * clients to discover persistence changes written by secondary clients, such as\r\n * the addition of new mutations and query targets.\r\n *\r\n * If multi-tab is not enabled and another tab already obtained the primary\r\n * lease, IndexedDbPersistence enters a failed state and all subsequent\r\n * operations will automatically fail.\r\n *\r\n * Additionally, there is an optimization so that when a tab is closed, the\r\n * primary lease is released immediately (this is especially important to make\r\n * sure that a refreshed tab is able to immediately re-acquire the primary\r\n * lease). Unfortunately, IndexedDB cannot be reliably used in window.unload\r\n * since it is an asynchronous API. So in addition to attempting to give up the\r\n * lease, the leaseholder writes its client ID to a \"zombiedClient\" entry in\r\n * LocalStorage which acts as an indicator that another tab should go ahead and\r\n * take the primary lease immediately regardless of the current lease timestamp.\r\n *\r\n * TODO(b/114226234): Remove `synchronizeTabs` section when multi-tab is no\r\n * longer optional.\r\n */\r\nclass IndexedDbPersistence {\r\n constructor(\r\n /**\r\n * Whether to synchronize the in-memory state of multiple tabs and share\r\n * access to local persistence.\r\n */\r\n allowTabSynchronization, persistenceKey, clientId, lruParams, queue, window, document, serializer, sequenceNumberSyncer, \r\n /**\r\n * If set to true, forcefully obtains database access. Existing tabs will\r\n * no longer be able to access IndexedDB.\r\n */\r\n forceOwningTab, schemaVersion = SCHEMA_VERSION) {\r\n this.allowTabSynchronization = allowTabSynchronization;\r\n this.persistenceKey = persistenceKey;\r\n this.clientId = clientId;\r\n this.queue = queue;\r\n this.window = window;\r\n this.document = document;\r\n this.sequenceNumberSyncer = sequenceNumberSyncer;\r\n this.forceOwningTab = forceOwningTab;\r\n this.schemaVersion = schemaVersion;\r\n this.listenSequence = null;\r\n this._started = false;\r\n this.isPrimary = false;\r\n this.networkEnabled = true;\r\n /** Our window.unload handler, if registered. */\r\n this.windowUnloadHandler = null;\r\n this.inForeground = false;\r\n /** Our 'visibilitychange' listener if registered. */\r\n this.documentVisibilityHandler = null;\r\n /** The client metadata refresh task. */\r\n this.clientMetadataRefresher = null;\r\n /** The last time we garbage collected the client metadata object store. */\r\n this.lastGarbageCollectionTime = Number.NEGATIVE_INFINITY;\r\n /** A listener to notify on primary state changes. */\r\n this.primaryStateListener = _ => Promise.resolve();\r\n if (!IndexedDbPersistence.isAvailable()) {\r\n throw new FirestoreError(Code.UNIMPLEMENTED, UNSUPPORTED_PLATFORM_ERROR_MSG);\r\n }\r\n this.referenceDelegate = new IndexedDbLruDelegateImpl(this, lruParams);\r\n this.dbName = persistenceKey + MAIN_DATABASE;\r\n this.serializer = new LocalSerializer(serializer);\r\n this.simpleDb = new SimpleDb(this.dbName, this.schemaVersion, new SchemaConverter(this.serializer));\r\n this.targetCache = new IndexedDbTargetCache(this.referenceDelegate, this.serializer);\r\n this.remoteDocumentCache = newIndexedDbRemoteDocumentCache(this.serializer);\r\n this.bundleCache = new IndexedDbBundleCache();\r\n if (this.window && this.window.localStorage) {\r\n this.webStorage = this.window.localStorage;\r\n }\r\n else {\r\n this.webStorage = null;\r\n if (forceOwningTab === false) {\r\n logError(LOG_TAG$c, 'LocalStorage is unavailable. As a result, persistence may not work ' +\r\n 'reliably. In particular enablePersistence() could fail immediately ' +\r\n 'after refreshing the page.');\r\n }\r\n }\r\n }\r\n /**\r\n * Attempt to start IndexedDb persistence.\r\n *\r\n * @returns Whether persistence was enabled.\r\n */\r\n start() {\r\n // NOTE: This is expected to fail sometimes (in the case of another tab\r\n // already having the persistence lock), so it's the first thing we should\r\n // do.\r\n return this.updateClientMetadataAndTryBecomePrimary()\r\n .then(() => {\r\n if (!this.isPrimary && !this.allowTabSynchronization) {\r\n // Fail `start()` if `synchronizeTabs` is disabled and we cannot\r\n // obtain the primary lease.\r\n throw new FirestoreError(Code.FAILED_PRECONDITION, PRIMARY_LEASE_EXCLUSIVE_ERROR_MSG);\r\n }\r\n this.attachVisibilityHandler();\r\n this.attachWindowUnloadHook();\r\n this.scheduleClientMetadataAndPrimaryLeaseRefreshes();\r\n return this.runTransaction('getHighestListenSequenceNumber', 'readonly', txn => this.targetCache.getHighestSequenceNumber(txn));\r\n })\r\n .then(highestListenSequenceNumber => {\r\n this.listenSequence = new ListenSequence(highestListenSequenceNumber, this.sequenceNumberSyncer);\r\n })\r\n .then(() => {\r\n this._started = true;\r\n })\r\n .catch(reason => {\r\n this.simpleDb && this.simpleDb.close();\r\n return Promise.reject(reason);\r\n });\r\n }\r\n /**\r\n * Registers a listener that gets called when the primary state of the\r\n * instance changes. Upon registering, this listener is invoked immediately\r\n * with the current primary state.\r\n *\r\n * PORTING NOTE: This is only used for Web multi-tab.\r\n */\r\n setPrimaryStateListener(primaryStateListener) {\r\n this.primaryStateListener = async (primaryState) => {\r\n if (this.started) {\r\n return primaryStateListener(primaryState);\r\n }\r\n };\r\n return primaryStateListener(this.isPrimary);\r\n }\r\n /**\r\n * Registers a listener that gets called when the database receives a\r\n * version change event indicating that it has deleted.\r\n *\r\n * PORTING NOTE: This is only used for Web multi-tab.\r\n */\r\n setDatabaseDeletedListener(databaseDeletedListener) {\r\n this.simpleDb.setVersionChangeListener(async (event) => {\r\n // Check if an attempt is made to delete IndexedDB.\r\n if (event.newVersion === null) {\r\n await databaseDeletedListener();\r\n }\r\n });\r\n }\r\n /**\r\n * Adjusts the current network state in the client's metadata, potentially\r\n * affecting the primary lease.\r\n *\r\n * PORTING NOTE: This is only used for Web multi-tab.\r\n */\r\n setNetworkEnabled(networkEnabled) {\r\n if (this.networkEnabled !== networkEnabled) {\r\n this.networkEnabled = networkEnabled;\r\n // Schedule a primary lease refresh for immediate execution. The eventual\r\n // lease update will be propagated via `primaryStateListener`.\r\n this.queue.enqueueAndForget(async () => {\r\n if (this.started) {\r\n await this.updateClientMetadataAndTryBecomePrimary();\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Updates the client metadata in IndexedDb and attempts to either obtain or\r\n * extend the primary lease for the local client. Asynchronously notifies the\r\n * primary state listener if the client either newly obtained or released its\r\n * primary lease.\r\n */\r\n updateClientMetadataAndTryBecomePrimary() {\r\n return this.runTransaction('updateClientMetadataAndTryBecomePrimary', 'readwrite', txn => {\r\n const metadataStore = clientMetadataStore(txn);\r\n return metadataStore\r\n .put({\r\n clientId: this.clientId,\r\n updateTimeMs: Date.now(),\r\n networkEnabled: this.networkEnabled,\r\n inForeground: this.inForeground\r\n })\r\n .next(() => {\r\n if (this.isPrimary) {\r\n return this.verifyPrimaryLease(txn).next(success => {\r\n if (!success) {\r\n this.isPrimary = false;\r\n this.queue.enqueueRetryable(() => this.primaryStateListener(false));\r\n }\r\n });\r\n }\r\n })\r\n .next(() => this.canActAsPrimary(txn))\r\n .next(canActAsPrimary => {\r\n if (this.isPrimary && !canActAsPrimary) {\r\n return this.releasePrimaryLeaseIfHeld(txn).next(() => false);\r\n }\r\n else if (canActAsPrimary) {\r\n return this.acquireOrExtendPrimaryLease(txn).next(() => true);\r\n }\r\n else {\r\n return /* canActAsPrimary= */ false;\r\n }\r\n });\r\n })\r\n .catch(e => {\r\n if (isIndexedDbTransactionError(e)) {\r\n logDebug(LOG_TAG$c, 'Failed to extend owner lease: ', e);\r\n // Proceed with the existing state. Any subsequent access to\r\n // IndexedDB will verify the lease.\r\n return this.isPrimary;\r\n }\r\n if (!this.allowTabSynchronization) {\r\n throw e;\r\n }\r\n logDebug(LOG_TAG$c, 'Releasing owner lease after error during lease refresh', e);\r\n return /* isPrimary= */ false;\r\n })\r\n .then(isPrimary => {\r\n if (this.isPrimary !== isPrimary) {\r\n this.queue.enqueueRetryable(() => this.primaryStateListener(isPrimary));\r\n }\r\n this.isPrimary = isPrimary;\r\n });\r\n }\r\n verifyPrimaryLease(txn) {\r\n const store = primaryClientStore(txn);\r\n return store.get(DbPrimaryClientKey).next(primaryClient => {\r\n return PersistencePromise.resolve(this.isLocalClient(primaryClient));\r\n });\r\n }\r\n removeClientMetadata(txn) {\r\n const metadataStore = clientMetadataStore(txn);\r\n return metadataStore.delete(this.clientId);\r\n }\r\n /**\r\n * If the garbage collection threshold has passed, prunes the\r\n * RemoteDocumentChanges and the ClientMetadata store based on the last update\r\n * time of all clients.\r\n */\r\n async maybeGarbageCollectMultiClientState() {\r\n if (this.isPrimary &&\r\n !this.isWithinAge(this.lastGarbageCollectionTime, MAX_CLIENT_AGE_MS)) {\r\n this.lastGarbageCollectionTime = Date.now();\r\n const inactiveClients = await this.runTransaction('maybeGarbageCollectMultiClientState', 'readwrite-primary', txn => {\r\n const metadataStore = getStore(txn, DbClientMetadataStore);\r\n return metadataStore.loadAll().next(existingClients => {\r\n const active = this.filterActiveClients(existingClients, MAX_CLIENT_AGE_MS);\r\n const inactive = existingClients.filter(client => active.indexOf(client) === -1);\r\n // Delete metadata for clients that are no longer considered active.\r\n return PersistencePromise.forEach(inactive, (inactiveClient) => metadataStore.delete(inactiveClient.clientId)).next(() => inactive);\r\n });\r\n }).catch(() => {\r\n // Ignore primary lease violations or any other type of error. The next\r\n // primary will run `maybeGarbageCollectMultiClientState()` again.\r\n // We don't use `ignoreIfPrimaryLeaseLoss()` since we don't want to depend\r\n // on LocalStore.\r\n return [];\r\n });\r\n // Delete potential leftover entries that may continue to mark the\r\n // inactive clients as zombied in LocalStorage.\r\n // Ideally we'd delete the IndexedDb and LocalStorage zombie entries for\r\n // the client atomically, but we can't. So we opt to delete the IndexedDb\r\n // entries first to avoid potentially reviving a zombied client.\r\n if (this.webStorage) {\r\n for (const inactiveClient of inactiveClients) {\r\n this.webStorage.removeItem(this.zombiedClientLocalStorageKey(inactiveClient.clientId));\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Schedules a recurring timer to update the client metadata and to either\r\n * extend or acquire the primary lease if the client is eligible.\r\n */\r\n scheduleClientMetadataAndPrimaryLeaseRefreshes() {\r\n this.clientMetadataRefresher = this.queue.enqueueAfterDelay(\"client_metadata_refresh\" /* TimerId.ClientMetadataRefresh */, CLIENT_METADATA_REFRESH_INTERVAL_MS, () => {\r\n return this.updateClientMetadataAndTryBecomePrimary()\r\n .then(() => this.maybeGarbageCollectMultiClientState())\r\n .then(() => this.scheduleClientMetadataAndPrimaryLeaseRefreshes());\r\n });\r\n }\r\n /** Checks whether `client` is the local client. */\r\n isLocalClient(client) {\r\n return client ? client.ownerId === this.clientId : false;\r\n }\r\n /**\r\n * Evaluate the state of all active clients and determine whether the local\r\n * client is or can act as the holder of the primary lease. Returns whether\r\n * the client is eligible for the lease, but does not actually acquire it.\r\n * May return 'false' even if there is no active leaseholder and another\r\n * (foreground) client should become leaseholder instead.\r\n */\r\n canActAsPrimary(txn) {\r\n if (this.forceOwningTab) {\r\n return PersistencePromise.resolve(true);\r\n }\r\n const store = primaryClientStore(txn);\r\n return store\r\n .get(DbPrimaryClientKey)\r\n .next(currentPrimary => {\r\n const currentLeaseIsValid = currentPrimary !== null &&\r\n this.isWithinAge(currentPrimary.leaseTimestampMs, MAX_PRIMARY_ELIGIBLE_AGE_MS) &&\r\n !this.isClientZombied(currentPrimary.ownerId);\r\n // A client is eligible for the primary lease if:\r\n // - its network is enabled and the client's tab is in the foreground.\r\n // - its network is enabled and no other client's tab is in the\r\n // foreground.\r\n // - every clients network is disabled and the client's tab is in the\r\n // foreground.\r\n // - every clients network is disabled and no other client's tab is in\r\n // the foreground.\r\n // - the `forceOwningTab` setting was passed in.\r\n if (currentLeaseIsValid) {\r\n if (this.isLocalClient(currentPrimary) && this.networkEnabled) {\r\n return true;\r\n }\r\n if (!this.isLocalClient(currentPrimary)) {\r\n if (!currentPrimary.allowTabSynchronization) {\r\n // Fail the `canActAsPrimary` check if the current leaseholder has\r\n // not opted into multi-tab synchronization. If this happens at\r\n // client startup, we reject the Promise returned by\r\n // `enablePersistence()` and the user can continue to use Firestore\r\n // with in-memory persistence.\r\n // If this fails during a lease refresh, we will instead block the\r\n // AsyncQueue from executing further operations. Note that this is\r\n // acceptable since mixing & matching different `synchronizeTabs`\r\n // settings is not supported.\r\n //\r\n // TODO(b/114226234): Remove this check when `synchronizeTabs` can\r\n // no longer be turned off.\r\n throw new FirestoreError(Code.FAILED_PRECONDITION, PRIMARY_LEASE_EXCLUSIVE_ERROR_MSG);\r\n }\r\n return false;\r\n }\r\n }\r\n if (this.networkEnabled && this.inForeground) {\r\n return true;\r\n }\r\n return clientMetadataStore(txn)\r\n .loadAll()\r\n .next(existingClients => {\r\n // Process all existing clients and determine whether at least one of\r\n // them is better suited to obtain the primary lease.\r\n const preferredCandidate = this.filterActiveClients(existingClients, MAX_PRIMARY_ELIGIBLE_AGE_MS).find(otherClient => {\r\n if (this.clientId !== otherClient.clientId) {\r\n const otherClientHasBetterNetworkState = !this.networkEnabled && otherClient.networkEnabled;\r\n const otherClientHasBetterVisibility = !this.inForeground && otherClient.inForeground;\r\n const otherClientHasSameNetworkState = this.networkEnabled === otherClient.networkEnabled;\r\n if (otherClientHasBetterNetworkState ||\r\n (otherClientHasBetterVisibility &&\r\n otherClientHasSameNetworkState)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n return preferredCandidate === undefined;\r\n });\r\n })\r\n .next(canActAsPrimary => {\r\n if (this.isPrimary !== canActAsPrimary) {\r\n logDebug(LOG_TAG$c, `Client ${canActAsPrimary ? 'is' : 'is not'} eligible for a primary lease.`);\r\n }\r\n return canActAsPrimary;\r\n });\r\n }\r\n async shutdown() {\r\n // The shutdown() operations are idempotent and can be called even when\r\n // start() aborted (e.g. because it couldn't acquire the persistence lease).\r\n this._started = false;\r\n this.markClientZombied();\r\n if (this.clientMetadataRefresher) {\r\n this.clientMetadataRefresher.cancel();\r\n this.clientMetadataRefresher = null;\r\n }\r\n this.detachVisibilityHandler();\r\n this.detachWindowUnloadHook();\r\n // Use `SimpleDb.runTransaction` directly to avoid failing if another tab\r\n // has obtained the primary lease.\r\n await this.simpleDb.runTransaction('shutdown', 'readwrite', [DbPrimaryClientStore, DbClientMetadataStore], simpleDbTxn => {\r\n const persistenceTransaction = new IndexedDbTransaction(simpleDbTxn, ListenSequence.INVALID);\r\n return this.releasePrimaryLeaseIfHeld(persistenceTransaction).next(() => this.removeClientMetadata(persistenceTransaction));\r\n });\r\n this.simpleDb.close();\r\n // Remove the entry marking the client as zombied from LocalStorage since\r\n // we successfully deleted its metadata from IndexedDb.\r\n this.removeClientZombiedEntry();\r\n }\r\n /**\r\n * Returns clients that are not zombied and have an updateTime within the\r\n * provided threshold.\r\n */\r\n filterActiveClients(clients, activityThresholdMs) {\r\n return clients.filter(client => this.isWithinAge(client.updateTimeMs, activityThresholdMs) &&\r\n !this.isClientZombied(client.clientId));\r\n }\r\n /**\r\n * Returns the IDs of the clients that are currently active. If multi-tab\r\n * is not supported, returns an array that only contains the local client's\r\n * ID.\r\n *\r\n * PORTING NOTE: This is only used for Web multi-tab.\r\n */\r\n getActiveClients() {\r\n return this.runTransaction('getActiveClients', 'readonly', txn => {\r\n return clientMetadataStore(txn)\r\n .loadAll()\r\n .next(clients => this.filterActiveClients(clients, MAX_CLIENT_AGE_MS).map(clientMetadata => clientMetadata.clientId));\r\n });\r\n }\r\n get started() {\r\n return this._started;\r\n }\r\n getMutationQueue(user, indexManager) {\r\n return IndexedDbMutationQueue.forUser(user, this.serializer, indexManager, this.referenceDelegate);\r\n }\r\n getTargetCache() {\r\n return this.targetCache;\r\n }\r\n getRemoteDocumentCache() {\r\n return this.remoteDocumentCache;\r\n }\r\n getIndexManager(user) {\r\n return new IndexedDbIndexManager(user, this.serializer.remoteSerializer.databaseId);\r\n }\r\n getDocumentOverlayCache(user) {\r\n return IndexedDbDocumentOverlayCache.forUser(this.serializer, user);\r\n }\r\n getBundleCache() {\r\n return this.bundleCache;\r\n }\r\n runTransaction(action, mode, transactionOperation) {\r\n logDebug(LOG_TAG$c, 'Starting transaction:', action);\r\n const simpleDbMode = mode === 'readonly' ? 'readonly' : 'readwrite';\r\n const objectStores = getObjectStores(this.schemaVersion);\r\n let persistenceTransaction;\r\n // Do all transactions as readwrite against all object stores, since we\r\n // are the only reader/writer.\r\n return this.simpleDb\r\n .runTransaction(action, simpleDbMode, objectStores, simpleDbTxn => {\r\n persistenceTransaction = new IndexedDbTransaction(simpleDbTxn, this.listenSequence\r\n ? this.listenSequence.next()\r\n : ListenSequence.INVALID);\r\n if (mode === 'readwrite-primary') {\r\n // While we merely verify that we have (or can acquire) the lease\r\n // immediately, we wait to extend the primary lease until after\r\n // executing transactionOperation(). This ensures that even if the\r\n // transactionOperation takes a long time, we'll use a recent\r\n // leaseTimestampMs in the extended (or newly acquired) lease.\r\n return this.verifyPrimaryLease(persistenceTransaction)\r\n .next(holdsPrimaryLease => {\r\n if (holdsPrimaryLease) {\r\n return /* holdsPrimaryLease= */ true;\r\n }\r\n return this.canActAsPrimary(persistenceTransaction);\r\n })\r\n .next(holdsPrimaryLease => {\r\n if (!holdsPrimaryLease) {\r\n logError(`Failed to obtain primary lease for action '${action}'.`);\r\n this.isPrimary = false;\r\n this.queue.enqueueRetryable(() => this.primaryStateListener(false));\r\n throw new FirestoreError(Code.FAILED_PRECONDITION, PRIMARY_LEASE_LOST_ERROR_MSG);\r\n }\r\n return transactionOperation(persistenceTransaction);\r\n })\r\n .next(result => {\r\n return this.acquireOrExtendPrimaryLease(persistenceTransaction).next(() => result);\r\n });\r\n }\r\n else {\r\n return this.verifyAllowTabSynchronization(persistenceTransaction).next(() => transactionOperation(persistenceTransaction));\r\n }\r\n })\r\n .then(result => {\r\n persistenceTransaction.raiseOnCommittedEvent();\r\n return result;\r\n });\r\n }\r\n /**\r\n * Verifies that the current tab is the primary leaseholder or alternatively\r\n * that the leaseholder has opted into multi-tab synchronization.\r\n */\r\n // TODO(b/114226234): Remove this check when `synchronizeTabs` can no longer\r\n // be turned off.\r\n verifyAllowTabSynchronization(txn) {\r\n const store = primaryClientStore(txn);\r\n return store.get(DbPrimaryClientKey).next(currentPrimary => {\r\n const currentLeaseIsValid = currentPrimary !== null &&\r\n this.isWithinAge(currentPrimary.leaseTimestampMs, MAX_PRIMARY_ELIGIBLE_AGE_MS) &&\r\n !this.isClientZombied(currentPrimary.ownerId);\r\n if (currentLeaseIsValid && !this.isLocalClient(currentPrimary)) {\r\n if (!this.forceOwningTab &&\r\n (!this.allowTabSynchronization ||\r\n !currentPrimary.allowTabSynchronization)) {\r\n throw new FirestoreError(Code.FAILED_PRECONDITION, PRIMARY_LEASE_EXCLUSIVE_ERROR_MSG);\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * Obtains or extends the new primary lease for the local client. This\r\n * method does not verify that the client is eligible for this lease.\r\n */\r\n acquireOrExtendPrimaryLease(txn) {\r\n const newPrimary = {\r\n ownerId: this.clientId,\r\n allowTabSynchronization: this.allowTabSynchronization,\r\n leaseTimestampMs: Date.now()\r\n };\r\n return primaryClientStore(txn).put(DbPrimaryClientKey, newPrimary);\r\n }\r\n static isAvailable() {\r\n return SimpleDb.isAvailable();\r\n }\r\n /** Checks the primary lease and removes it if we are the current primary. */\r\n releasePrimaryLeaseIfHeld(txn) {\r\n const store = primaryClientStore(txn);\r\n return store.get(DbPrimaryClientKey).next(primaryClient => {\r\n if (this.isLocalClient(primaryClient)) {\r\n logDebug(LOG_TAG$c, 'Releasing primary lease.');\r\n return store.delete(DbPrimaryClientKey);\r\n }\r\n else {\r\n return PersistencePromise.resolve();\r\n }\r\n });\r\n }\r\n /** Verifies that `updateTimeMs` is within `maxAgeMs`. */\r\n isWithinAge(updateTimeMs, maxAgeMs) {\r\n const now = Date.now();\r\n const minAcceptable = now - maxAgeMs;\r\n const maxAcceptable = now;\r\n if (updateTimeMs < minAcceptable) {\r\n return false;\r\n }\r\n else if (updateTimeMs > maxAcceptable) {\r\n logError(`Detected an update time that is in the future: ${updateTimeMs} > ${maxAcceptable}`);\r\n return false;\r\n }\r\n return true;\r\n }\r\n attachVisibilityHandler() {\r\n if (this.document !== null &&\r\n typeof this.document.addEventListener === 'function') {\r\n this.documentVisibilityHandler = () => {\r\n this.queue.enqueueAndForget(() => {\r\n this.inForeground = this.document.visibilityState === 'visible';\r\n return this.updateClientMetadataAndTryBecomePrimary();\r\n });\r\n };\r\n this.document.addEventListener('visibilitychange', this.documentVisibilityHandler);\r\n this.inForeground = this.document.visibilityState === 'visible';\r\n }\r\n }\r\n detachVisibilityHandler() {\r\n if (this.documentVisibilityHandler) {\r\n this.document.removeEventListener('visibilitychange', this.documentVisibilityHandler);\r\n this.documentVisibilityHandler = null;\r\n }\r\n }\r\n /**\r\n * Attaches a window.unload handler that will synchronously write our\r\n * clientId to a \"zombie client id\" location in LocalStorage. This can be used\r\n * by tabs trying to acquire the primary lease to determine that the lease\r\n * is no longer valid even if the timestamp is recent. This is particularly\r\n * important for the refresh case (so the tab correctly re-acquires the\r\n * primary lease). LocalStorage is used for this rather than IndexedDb because\r\n * it is a synchronous API and so can be used reliably from an unload\r\n * handler.\r\n */\r\n attachWindowUnloadHook() {\r\n var _a;\r\n if (typeof ((_a = this.window) === null || _a === void 0 ? void 0 : _a.addEventListener) === 'function') {\r\n this.windowUnloadHandler = () => {\r\n // Note: In theory, this should be scheduled on the AsyncQueue since it\r\n // accesses internal state. We execute this code directly during shutdown\r\n // to make sure it gets a chance to run.\r\n this.markClientZombied();\r\n if (isSafari() && navigator.appVersion.match(/Version\\/1[45]/)) {\r\n // On Safari 14 and 15, we do not run any cleanup actions as it might\r\n // trigger a bug that prevents Safari from re-opening IndexedDB during\r\n // the next page load.\r\n // See https://bugs.webkit.org/show_bug.cgi?id=226547\r\n this.queue.enterRestrictedMode(/* purgeExistingTasks= */ true);\r\n }\r\n this.queue.enqueueAndForget(() => {\r\n // Attempt graceful shutdown (including releasing our primary lease),\r\n // but there's no guarantee it will complete.\r\n return this.shutdown();\r\n });\r\n };\r\n this.window.addEventListener('pagehide', this.windowUnloadHandler);\r\n }\r\n }\r\n detachWindowUnloadHook() {\r\n if (this.windowUnloadHandler) {\r\n this.window.removeEventListener('pagehide', this.windowUnloadHandler);\r\n this.windowUnloadHandler = null;\r\n }\r\n }\r\n /**\r\n * Returns whether a client is \"zombied\" based on its LocalStorage entry.\r\n * Clients become zombied when their tab closes without running all of the\r\n * cleanup logic in `shutdown()`.\r\n */\r\n isClientZombied(clientId) {\r\n var _a;\r\n try {\r\n const isZombied = ((_a = this.webStorage) === null || _a === void 0 ? void 0 : _a.getItem(this.zombiedClientLocalStorageKey(clientId))) !== null;\r\n logDebug(LOG_TAG$c, `Client '${clientId}' ${isZombied ? 'is' : 'is not'} zombied in LocalStorage`);\r\n return isZombied;\r\n }\r\n catch (e) {\r\n // Gracefully handle if LocalStorage isn't working.\r\n logError(LOG_TAG$c, 'Failed to get zombied client id.', e);\r\n return false;\r\n }\r\n }\r\n /**\r\n * Record client as zombied (a client that had its tab closed). Zombied\r\n * clients are ignored during primary tab selection.\r\n */\r\n markClientZombied() {\r\n if (!this.webStorage) {\r\n return;\r\n }\r\n try {\r\n this.webStorage.setItem(this.zombiedClientLocalStorageKey(this.clientId), String(Date.now()));\r\n }\r\n catch (e) {\r\n // Gracefully handle if LocalStorage isn't available / working.\r\n logError('Failed to set zombie client id.', e);\r\n }\r\n }\r\n /** Removes the zombied client entry if it exists. */\r\n removeClientZombiedEntry() {\r\n if (!this.webStorage) {\r\n return;\r\n }\r\n try {\r\n this.webStorage.removeItem(this.zombiedClientLocalStorageKey(this.clientId));\r\n }\r\n catch (e) {\r\n // Ignore\r\n }\r\n }\r\n zombiedClientLocalStorageKey(clientId) {\r\n return `${ZOMBIED_CLIENTS_KEY_PREFIX}_${this.persistenceKey}_${clientId}`;\r\n }\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the primary client object store.\r\n */\r\nfunction primaryClientStore(txn) {\r\n return getStore(txn, DbPrimaryClientStore);\r\n}\r\n/**\r\n * Helper to get a typed SimpleDbStore for the client metadata object store.\r\n */\r\nfunction clientMetadataStore(txn) {\r\n return getStore(txn, DbClientMetadataStore);\r\n}\r\n/**\r\n * Generates a string used as a prefix when storing data in IndexedDB and\r\n * LocalStorage.\r\n */\r\nfunction indexedDbStoragePrefix(databaseId, persistenceKey) {\r\n // Use two different prefix formats:\r\n //\r\n // * firestore / persistenceKey / projectID . databaseID / ...\r\n // * firestore / persistenceKey / projectID / ...\r\n //\r\n // projectIDs are DNS-compatible names and cannot contain dots\r\n // so there's no danger of collisions.\r\n let database = databaseId.projectId;\r\n if (!databaseId.isDefaultDatabase) {\r\n database += '.' + databaseId.database;\r\n }\r\n return 'firestore/' + persistenceKey + '/' + database + '/';\r\n}\r\nasync function indexedDbClearPersistence(persistenceKey) {\r\n if (!SimpleDb.isAvailable()) {\r\n return Promise.resolve();\r\n }\r\n const dbName = persistenceKey + MAIN_DATABASE;\r\n await SimpleDb.delete(dbName);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Compares two array for equality using comparator. The method computes the\r\n * intersection and invokes `onAdd` for every element that is in `after` but not\r\n * `before`. `onRemove` is invoked for every element in `before` but missing\r\n * from `after`.\r\n *\r\n * The method creates a copy of both `before` and `after` and runs in O(n log\r\n * n), where n is the size of the two lists.\r\n *\r\n * @param before - The elements that exist in the original array.\r\n * @param after - The elements to diff against the original array.\r\n * @param comparator - The comparator for the elements in before and after.\r\n * @param onAdd - A function to invoke for every element that is part of `\r\n * after` but not `before`.\r\n * @param onRemove - A function to invoke for every element that is part of\r\n * `before` but not `after`.\r\n */\r\nfunction diffArrays(before, after, comparator, onAdd, onRemove) {\r\n before = [...before];\r\n after = [...after];\r\n before.sort(comparator);\r\n after.sort(comparator);\r\n const bLen = before.length;\r\n const aLen = after.length;\r\n let a = 0;\r\n let b = 0;\r\n while (a < aLen && b < bLen) {\r\n const cmp = comparator(before[b], after[a]);\r\n if (cmp < 0) {\r\n // The element was removed if the next element in our ordered\r\n // walkthrough is only in `before`.\r\n onRemove(before[b++]);\r\n }\r\n else if (cmp > 0) {\r\n // The element was added if the next element in our ordered walkthrough\r\n // is only in `after`.\r\n onAdd(after[a++]);\r\n }\r\n else {\r\n a++;\r\n b++;\r\n }\r\n }\r\n while (a < aLen) {\r\n onAdd(after[a++]);\r\n }\r\n while (b < bLen) {\r\n onRemove(before[b++]);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$b = 'LocalStore';\r\n/**\r\n * The maximum time to leave a resume token buffered without writing it out.\r\n * This value is arbitrary: it's long enough to avoid several writes\r\n * (possibly indefinitely if updates come more frequently than this) but\r\n * short enough that restarting after crashing will still have a pretty\r\n * recent resume token.\r\n */\r\nconst RESUME_TOKEN_MAX_AGE_MICROS = 5 * 60 * 1e6;\r\n/**\r\n * Implements `LocalStore` interface.\r\n *\r\n * Note: some field defined in this class might have public access level, but\r\n * the class is not exported so they are only accessible from this module.\r\n * This is useful to implement optional features (like bundles) in free\r\n * functions, such that they are tree-shakeable.\r\n */\r\nclass LocalStoreImpl {\r\n constructor(\r\n /** Manages our in-memory or durable persistence. */\r\n persistence, queryEngine, initialUser, serializer) {\r\n this.persistence = persistence;\r\n this.queryEngine = queryEngine;\r\n this.serializer = serializer;\r\n /**\r\n * Maps a targetID to data about its target.\r\n *\r\n * PORTING NOTE: We are using an immutable data structure on Web to make re-runs\r\n * of `applyRemoteEvent()` idempotent.\r\n */\r\n this.targetDataByTarget = new SortedMap(primitiveComparator);\r\n /** Maps a target to its targetID. */\r\n // TODO(wuandy): Evaluate if TargetId can be part of Target.\r\n this.targetIdByTarget = new ObjectMap(t => canonifyTarget(t), targetEquals);\r\n /**\r\n * A per collection group index of the last read time processed by\r\n * `getNewDocumentChanges()`.\r\n *\r\n * PORTING NOTE: This is only used for multi-tab synchronization.\r\n */\r\n this.collectionGroupReadTime = new Map();\r\n this.remoteDocuments = persistence.getRemoteDocumentCache();\r\n this.targetCache = persistence.getTargetCache();\r\n this.bundleCache = persistence.getBundleCache();\r\n this.initializeUserComponents(initialUser);\r\n }\r\n initializeUserComponents(user) {\r\n // TODO(indexing): Add spec tests that test these components change after a\r\n // user change\r\n this.documentOverlayCache = this.persistence.getDocumentOverlayCache(user);\r\n this.indexManager = this.persistence.getIndexManager(user);\r\n this.mutationQueue = this.persistence.getMutationQueue(user, this.indexManager);\r\n this.localDocuments = new LocalDocumentsView(this.remoteDocuments, this.mutationQueue, this.documentOverlayCache, this.indexManager);\r\n this.remoteDocuments.setIndexManager(this.indexManager);\r\n this.queryEngine.initialize(this.localDocuments, this.indexManager);\r\n }\r\n collectGarbage(garbageCollector) {\r\n return this.persistence.runTransaction('Collect garbage', 'readwrite-primary', txn => garbageCollector.collect(txn, this.targetDataByTarget));\r\n }\r\n}\r\nfunction newLocalStore(\r\n/** Manages our in-memory or durable persistence. */\r\npersistence, queryEngine, initialUser, serializer) {\r\n return new LocalStoreImpl(persistence, queryEngine, initialUser, serializer);\r\n}\r\n/**\r\n * Tells the LocalStore that the currently authenticated user has changed.\r\n *\r\n * In response the local store switches the mutation queue to the new user and\r\n * returns any resulting document changes.\r\n */\r\n// PORTING NOTE: Android and iOS only return the documents affected by the\r\n// change.\r\nasync function localStoreHandleUserChange(localStore, user) {\r\n const localStoreImpl = debugCast(localStore);\r\n const result = await localStoreImpl.persistence.runTransaction('Handle user change', 'readonly', txn => {\r\n // Swap out the mutation queue, grabbing the pending mutation batches\r\n // before and after.\r\n let oldBatches;\r\n return localStoreImpl.mutationQueue\r\n .getAllMutationBatches(txn)\r\n .next(promisedOldBatches => {\r\n oldBatches = promisedOldBatches;\r\n localStoreImpl.initializeUserComponents(user);\r\n return localStoreImpl.mutationQueue.getAllMutationBatches(txn);\r\n })\r\n .next(newBatches => {\r\n const removedBatchIds = [];\r\n const addedBatchIds = [];\r\n // Union the old/new changed keys.\r\n let changedKeys = documentKeySet();\r\n for (const batch of oldBatches) {\r\n removedBatchIds.push(batch.batchId);\r\n for (const mutation of batch.mutations) {\r\n changedKeys = changedKeys.add(mutation.key);\r\n }\r\n }\r\n for (const batch of newBatches) {\r\n addedBatchIds.push(batch.batchId);\r\n for (const mutation of batch.mutations) {\r\n changedKeys = changedKeys.add(mutation.key);\r\n }\r\n }\r\n // Return the set of all (potentially) changed documents and the list\r\n // of mutation batch IDs that were affected by change.\r\n return localStoreImpl.localDocuments\r\n .getDocuments(txn, changedKeys)\r\n .next(affectedDocuments => {\r\n return {\r\n affectedDocuments,\r\n removedBatchIds,\r\n addedBatchIds\r\n };\r\n });\r\n });\r\n });\r\n return result;\r\n}\r\n/* Accepts locally generated Mutations and commit them to storage. */\r\nfunction localStoreWriteLocally(localStore, mutations) {\r\n const localStoreImpl = debugCast(localStore);\r\n const localWriteTime = Timestamp.now();\r\n const keys = mutations.reduce((keys, m) => keys.add(m.key), documentKeySet());\r\n let overlayedDocuments;\r\n let mutationBatch;\r\n return localStoreImpl.persistence\r\n .runTransaction('Locally write mutations', 'readwrite', txn => {\r\n // Figure out which keys do not have a remote version in the cache, this\r\n // is needed to create the right overlay mutation: if no remote version\r\n // presents, we do not need to create overlays as patch mutations.\r\n // TODO(Overlay): Is there a better way to determine this? Using the\r\n // document version does not work because local mutations set them back\r\n // to 0.\r\n let remoteDocs = mutableDocumentMap();\r\n let docsWithoutRemoteVersion = documentKeySet();\r\n return localStoreImpl.remoteDocuments\r\n .getEntries(txn, keys)\r\n .next(docs => {\r\n remoteDocs = docs;\r\n remoteDocs.forEach((key, doc) => {\r\n if (!doc.isValidDocument()) {\r\n docsWithoutRemoteVersion = docsWithoutRemoteVersion.add(key);\r\n }\r\n });\r\n })\r\n .next(() => {\r\n // Load and apply all existing mutations. This lets us compute the\r\n // current base state for all non-idempotent transforms before applying\r\n // any additional user-provided writes.\r\n return localStoreImpl.localDocuments.getOverlayedDocuments(txn, remoteDocs);\r\n })\r\n .next((docs) => {\r\n overlayedDocuments = docs;\r\n // For non-idempotent mutations (such as `FieldValue.increment()`),\r\n // we record the base state in a separate patch mutation. This is\r\n // later used to guarantee consistent values and prevents flicker\r\n // even if the backend sends us an update that already includes our\r\n // transform.\r\n const baseMutations = [];\r\n for (const mutation of mutations) {\r\n const baseValue = mutationExtractBaseValue(mutation, overlayedDocuments.get(mutation.key).overlayedDocument);\r\n if (baseValue != null) {\r\n // NOTE: The base state should only be applied if there's some\r\n // existing document to override, so use a Precondition of\r\n // exists=true\r\n baseMutations.push(new PatchMutation(mutation.key, baseValue, extractFieldMask(baseValue.value.mapValue), Precondition.exists(true)));\r\n }\r\n }\r\n return localStoreImpl.mutationQueue.addMutationBatch(txn, localWriteTime, baseMutations, mutations);\r\n })\r\n .next(batch => {\r\n mutationBatch = batch;\r\n const overlays = batch.applyToLocalDocumentSet(overlayedDocuments, docsWithoutRemoteVersion);\r\n return localStoreImpl.documentOverlayCache.saveOverlays(txn, batch.batchId, overlays);\r\n });\r\n })\r\n .then(() => ({\r\n batchId: mutationBatch.batchId,\r\n changes: convertOverlayedDocumentMapToDocumentMap(overlayedDocuments)\r\n }));\r\n}\r\n/**\r\n * Acknowledges the given batch.\r\n *\r\n * On the happy path when a batch is acknowledged, the local store will\r\n *\r\n * + remove the batch from the mutation queue;\r\n * + apply the changes to the remote document cache;\r\n * + recalculate the latency compensated view implied by those changes (there\r\n * may be mutations in the queue that affect the documents but haven't been\r\n * acknowledged yet); and\r\n * + give the changed documents back the sync engine\r\n *\r\n * @returns The resulting (modified) documents.\r\n */\r\nfunction localStoreAcknowledgeBatch(localStore, batchResult) {\r\n const localStoreImpl = debugCast(localStore);\r\n return localStoreImpl.persistence.runTransaction('Acknowledge batch', 'readwrite-primary', txn => {\r\n const affected = batchResult.batch.keys();\r\n const documentBuffer = localStoreImpl.remoteDocuments.newChangeBuffer({\r\n trackRemovals: true // Make sure document removals show up in `getNewDocumentChanges()`\r\n });\r\n return applyWriteToRemoteDocuments(localStoreImpl, txn, batchResult, documentBuffer)\r\n .next(() => documentBuffer.apply(txn))\r\n .next(() => localStoreImpl.mutationQueue.performConsistencyCheck(txn))\r\n .next(() => localStoreImpl.documentOverlayCache.removeOverlaysForBatchId(txn, affected, batchResult.batch.batchId))\r\n .next(() => localStoreImpl.localDocuments.recalculateAndSaveOverlaysForDocumentKeys(txn, getKeysWithTransformResults(batchResult)))\r\n .next(() => localStoreImpl.localDocuments.getDocuments(txn, affected));\r\n });\r\n}\r\nfunction getKeysWithTransformResults(batchResult) {\r\n let result = documentKeySet();\r\n for (let i = 0; i < batchResult.mutationResults.length; ++i) {\r\n const mutationResult = batchResult.mutationResults[i];\r\n if (mutationResult.transformResults.length > 0) {\r\n result = result.add(batchResult.batch.mutations[i].key);\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * Removes mutations from the MutationQueue for the specified batch;\r\n * LocalDocuments will be recalculated.\r\n *\r\n * @returns The resulting modified documents.\r\n */\r\nfunction localStoreRejectBatch(localStore, batchId) {\r\n const localStoreImpl = debugCast(localStore);\r\n return localStoreImpl.persistence.runTransaction('Reject batch', 'readwrite-primary', txn => {\r\n let affectedKeys;\r\n return localStoreImpl.mutationQueue\r\n .lookupMutationBatch(txn, batchId)\r\n .next((batch) => {\r\n hardAssert(batch !== null);\r\n affectedKeys = batch.keys();\r\n return localStoreImpl.mutationQueue.removeMutationBatch(txn, batch);\r\n })\r\n .next(() => localStoreImpl.mutationQueue.performConsistencyCheck(txn))\r\n .next(() => localStoreImpl.documentOverlayCache.removeOverlaysForBatchId(txn, affectedKeys, batchId))\r\n .next(() => localStoreImpl.localDocuments.recalculateAndSaveOverlaysForDocumentKeys(txn, affectedKeys))\r\n .next(() => localStoreImpl.localDocuments.getDocuments(txn, affectedKeys));\r\n });\r\n}\r\n/**\r\n * Returns the largest (latest) batch id in mutation queue that is pending\r\n * server response.\r\n *\r\n * Returns `BATCHID_UNKNOWN` if the queue is empty.\r\n */\r\nfunction localStoreGetHighestUnacknowledgedBatchId(localStore) {\r\n const localStoreImpl = debugCast(localStore);\r\n return localStoreImpl.persistence.runTransaction('Get highest unacknowledged batch id', 'readonly', txn => localStoreImpl.mutationQueue.getHighestUnacknowledgedBatchId(txn));\r\n}\r\n/**\r\n * Returns the last consistent snapshot processed (used by the RemoteStore to\r\n * determine whether to buffer incoming snapshots from the backend).\r\n */\r\nfunction localStoreGetLastRemoteSnapshotVersion(localStore) {\r\n const localStoreImpl = debugCast(localStore);\r\n return localStoreImpl.persistence.runTransaction('Get last remote snapshot version', 'readonly', txn => localStoreImpl.targetCache.getLastRemoteSnapshotVersion(txn));\r\n}\r\n/**\r\n * Updates the \"ground-state\" (remote) documents. We assume that the remote\r\n * event reflects any write batches that have been acknowledged or rejected\r\n * (i.e. we do not re-apply local mutations to updates from this event).\r\n *\r\n * LocalDocuments are re-calculated if there are remaining mutations in the\r\n * queue.\r\n */\r\nfunction localStoreApplyRemoteEventToLocalCache(localStore, remoteEvent) {\r\n const localStoreImpl = debugCast(localStore);\r\n const remoteVersion = remoteEvent.snapshotVersion;\r\n let newTargetDataByTargetMap = localStoreImpl.targetDataByTarget;\r\n return localStoreImpl.persistence\r\n .runTransaction('Apply remote event', 'readwrite-primary', txn => {\r\n const documentBuffer = localStoreImpl.remoteDocuments.newChangeBuffer({\r\n trackRemovals: true // Make sure document removals show up in `getNewDocumentChanges()`\r\n });\r\n // Reset newTargetDataByTargetMap in case this transaction gets re-run.\r\n newTargetDataByTargetMap = localStoreImpl.targetDataByTarget;\r\n const promises = [];\r\n remoteEvent.targetChanges.forEach((change, targetId) => {\r\n const oldTargetData = newTargetDataByTargetMap.get(targetId);\r\n if (!oldTargetData) {\r\n return;\r\n }\r\n // Only update the remote keys if the target is still active. This\r\n // ensures that we can persist the updated target data along with\r\n // the updated assignment.\r\n promises.push(localStoreImpl.targetCache\r\n .removeMatchingKeys(txn, change.removedDocuments, targetId)\r\n .next(() => {\r\n return localStoreImpl.targetCache.addMatchingKeys(txn, change.addedDocuments, targetId);\r\n }));\r\n let newTargetData = oldTargetData.withSequenceNumber(txn.currentSequenceNumber);\r\n if (remoteEvent.targetMismatches.has(targetId)) {\r\n newTargetData = newTargetData\r\n .withResumeToken(ByteString.EMPTY_BYTE_STRING, SnapshotVersion.min())\r\n .withLastLimboFreeSnapshotVersion(SnapshotVersion.min());\r\n }\r\n else if (change.resumeToken.approximateByteSize() > 0) {\r\n newTargetData = newTargetData.withResumeToken(change.resumeToken, remoteVersion);\r\n }\r\n newTargetDataByTargetMap = newTargetDataByTargetMap.insert(targetId, newTargetData);\r\n // Update the target data if there are target changes (or if\r\n // sufficient time has passed since the last update).\r\n if (shouldPersistTargetData(oldTargetData, newTargetData, change)) {\r\n promises.push(localStoreImpl.targetCache.updateTargetData(txn, newTargetData));\r\n }\r\n });\r\n let changedDocs = mutableDocumentMap();\r\n let existenceChangedKeys = documentKeySet();\r\n remoteEvent.documentUpdates.forEach(key => {\r\n if (remoteEvent.resolvedLimboDocuments.has(key)) {\r\n promises.push(localStoreImpl.persistence.referenceDelegate.updateLimboDocument(txn, key));\r\n }\r\n });\r\n // Each loop iteration only affects its \"own\" doc, so it's safe to get all\r\n // the remote documents in advance in a single call.\r\n promises.push(populateDocumentChangeBuffer(txn, documentBuffer, remoteEvent.documentUpdates).next(result => {\r\n changedDocs = result.changedDocuments;\r\n existenceChangedKeys = result.existenceChangedKeys;\r\n }));\r\n // HACK: The only reason we allow a null snapshot version is so that we\r\n // can synthesize remote events when we get permission denied errors while\r\n // trying to resolve the state of a locally cached document that is in\r\n // limbo.\r\n if (!remoteVersion.isEqual(SnapshotVersion.min())) {\r\n const updateRemoteVersion = localStoreImpl.targetCache\r\n .getLastRemoteSnapshotVersion(txn)\r\n .next(lastRemoteSnapshotVersion => {\r\n return localStoreImpl.targetCache.setTargetsMetadata(txn, txn.currentSequenceNumber, remoteVersion);\r\n });\r\n promises.push(updateRemoteVersion);\r\n }\r\n return PersistencePromise.waitFor(promises)\r\n .next(() => documentBuffer.apply(txn))\r\n .next(() => localStoreImpl.localDocuments.getLocalViewOfDocuments(txn, changedDocs, existenceChangedKeys))\r\n .next(() => changedDocs);\r\n })\r\n .then(changedDocs => {\r\n localStoreImpl.targetDataByTarget = newTargetDataByTargetMap;\r\n return changedDocs;\r\n });\r\n}\r\n/**\r\n * Populates document change buffer with documents from backend or a bundle.\r\n * Returns the document changes resulting from applying those documents, and\r\n * also a set of documents whose existence state are changed as a result.\r\n *\r\n * @param txn - Transaction to use to read existing documents from storage.\r\n * @param documentBuffer - Document buffer to collect the resulted changes to be\r\n * applied to storage.\r\n * @param documents - Documents to be applied.\r\n */\r\nfunction populateDocumentChangeBuffer(txn, documentBuffer, documents) {\r\n let updatedKeys = documentKeySet();\r\n let existenceChangedKeys = documentKeySet();\r\n documents.forEach(k => (updatedKeys = updatedKeys.add(k)));\r\n return documentBuffer.getEntries(txn, updatedKeys).next(existingDocs => {\r\n let changedDocuments = mutableDocumentMap();\r\n documents.forEach((key, doc) => {\r\n const existingDoc = existingDocs.get(key);\r\n // Check if see if there is a existence state change for this document.\r\n if (doc.isFoundDocument() !== existingDoc.isFoundDocument()) {\r\n existenceChangedKeys = existenceChangedKeys.add(key);\r\n }\r\n // Note: The order of the steps below is important, since we want\r\n // to ensure that rejected limbo resolutions (which fabricate\r\n // NoDocuments with SnapshotVersion.min()) never add documents to\r\n // cache.\r\n if (doc.isNoDocument() && doc.version.isEqual(SnapshotVersion.min())) {\r\n // NoDocuments with SnapshotVersion.min() are used in manufactured\r\n // events. We remove these documents from cache since we lost\r\n // access.\r\n documentBuffer.removeEntry(key, doc.readTime);\r\n changedDocuments = changedDocuments.insert(key, doc);\r\n }\r\n else if (!existingDoc.isValidDocument() ||\r\n doc.version.compareTo(existingDoc.version) > 0 ||\r\n (doc.version.compareTo(existingDoc.version) === 0 &&\r\n existingDoc.hasPendingWrites)) {\r\n documentBuffer.addEntry(doc);\r\n changedDocuments = changedDocuments.insert(key, doc);\r\n }\r\n else {\r\n logDebug(LOG_TAG$b, 'Ignoring outdated watch update for ', key, '. Current version:', existingDoc.version, ' Watch version:', doc.version);\r\n }\r\n });\r\n return { changedDocuments, existenceChangedKeys };\r\n });\r\n}\r\n/**\r\n * Returns true if the newTargetData should be persisted during an update of\r\n * an active target. TargetData should always be persisted when a target is\r\n * being released and should not call this function.\r\n *\r\n * While the target is active, TargetData updates can be omitted when nothing\r\n * about the target has changed except metadata like the resume token or\r\n * snapshot version. Occasionally it's worth the extra write to prevent these\r\n * values from getting too stale after a crash, but this doesn't have to be\r\n * too frequent.\r\n */\r\nfunction shouldPersistTargetData(oldTargetData, newTargetData, change) {\r\n // Always persist target data if we don't already have a resume token.\r\n if (oldTargetData.resumeToken.approximateByteSize() === 0) {\r\n return true;\r\n }\r\n // Don't allow resume token changes to be buffered indefinitely. This\r\n // allows us to be reasonably up-to-date after a crash and avoids needing\r\n // to loop over all active queries on shutdown. Especially in the browser\r\n // we may not get time to do anything interesting while the current tab is\r\n // closing.\r\n const timeDelta = newTargetData.snapshotVersion.toMicroseconds() -\r\n oldTargetData.snapshotVersion.toMicroseconds();\r\n if (timeDelta >= RESUME_TOKEN_MAX_AGE_MICROS) {\r\n return true;\r\n }\r\n // Otherwise if the only thing that has changed about a target is its resume\r\n // token it's not worth persisting. Note that the RemoteStore keeps an\r\n // in-memory view of the currently active targets which includes the current\r\n // resume token, so stream failure or user changes will still use an\r\n // up-to-date resume token regardless of what we do here.\r\n const changes = change.addedDocuments.size +\r\n change.modifiedDocuments.size +\r\n change.removedDocuments.size;\r\n return changes > 0;\r\n}\r\n/**\r\n * Notifies local store of the changed views to locally pin documents.\r\n */\r\nasync function localStoreNotifyLocalViewChanges(localStore, viewChanges) {\r\n const localStoreImpl = debugCast(localStore);\r\n try {\r\n await localStoreImpl.persistence.runTransaction('notifyLocalViewChanges', 'readwrite', txn => {\r\n return PersistencePromise.forEach(viewChanges, (viewChange) => {\r\n return PersistencePromise.forEach(viewChange.addedKeys, (key) => localStoreImpl.persistence.referenceDelegate.addReference(txn, viewChange.targetId, key)).next(() => PersistencePromise.forEach(viewChange.removedKeys, (key) => localStoreImpl.persistence.referenceDelegate.removeReference(txn, viewChange.targetId, key)));\r\n });\r\n });\r\n }\r\n catch (e) {\r\n if (isIndexedDbTransactionError(e)) {\r\n // If `notifyLocalViewChanges` fails, we did not advance the sequence\r\n // number for the documents that were included in this transaction.\r\n // This might trigger them to be deleted earlier than they otherwise\r\n // would have, but it should not invalidate the integrity of the data.\r\n logDebug(LOG_TAG$b, 'Failed to update sequence numbers: ' + e);\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n for (const viewChange of viewChanges) {\r\n const targetId = viewChange.targetId;\r\n if (!viewChange.fromCache) {\r\n const targetData = localStoreImpl.targetDataByTarget.get(targetId);\r\n // Advance the last limbo free snapshot version\r\n const lastLimboFreeSnapshotVersion = targetData.snapshotVersion;\r\n const updatedTargetData = targetData.withLastLimboFreeSnapshotVersion(lastLimboFreeSnapshotVersion);\r\n localStoreImpl.targetDataByTarget =\r\n localStoreImpl.targetDataByTarget.insert(targetId, updatedTargetData);\r\n }\r\n }\r\n}\r\n/**\r\n * Gets the mutation batch after the passed in batchId in the mutation queue\r\n * or null if empty.\r\n * @param afterBatchId - If provided, the batch to search after.\r\n * @returns The next mutation or null if there wasn't one.\r\n */\r\nfunction localStoreGetNextMutationBatch(localStore, afterBatchId) {\r\n const localStoreImpl = debugCast(localStore);\r\n return localStoreImpl.persistence.runTransaction('Get next mutation batch', 'readonly', txn => {\r\n if (afterBatchId === undefined) {\r\n afterBatchId = BATCHID_UNKNOWN;\r\n }\r\n return localStoreImpl.mutationQueue.getNextMutationBatchAfterBatchId(txn, afterBatchId);\r\n });\r\n}\r\n/**\r\n * Reads the current value of a Document with a given key or null if not\r\n * found - used for testing.\r\n */\r\nfunction localStoreReadDocument(localStore, key) {\r\n const localStoreImpl = debugCast(localStore);\r\n return localStoreImpl.persistence.runTransaction('read document', 'readonly', txn => localStoreImpl.localDocuments.getDocument(txn, key));\r\n}\r\n/**\r\n * Assigns the given target an internal ID so that its results can be pinned so\r\n * they don't get GC'd. A target must be allocated in the local store before\r\n * the store can be used to manage its view.\r\n *\r\n * Allocating an already allocated `Target` will return the existing `TargetData`\r\n * for that `Target`.\r\n */\r\nfunction localStoreAllocateTarget(localStore, target) {\r\n const localStoreImpl = debugCast(localStore);\r\n return localStoreImpl.persistence\r\n .runTransaction('Allocate target', 'readwrite', txn => {\r\n let targetData;\r\n return localStoreImpl.targetCache\r\n .getTargetData(txn, target)\r\n .next((cached) => {\r\n if (cached) {\r\n // This target has been listened to previously, so reuse the\r\n // previous targetID.\r\n // TODO(mcg): freshen last accessed date?\r\n targetData = cached;\r\n return PersistencePromise.resolve(targetData);\r\n }\r\n else {\r\n return localStoreImpl.targetCache\r\n .allocateTargetId(txn)\r\n .next(targetId => {\r\n targetData = new TargetData(target, targetId, 0 /* TargetPurpose.Listen */, txn.currentSequenceNumber);\r\n return localStoreImpl.targetCache\r\n .addTargetData(txn, targetData)\r\n .next(() => targetData);\r\n });\r\n }\r\n });\r\n })\r\n .then(targetData => {\r\n // If Multi-Tab is enabled, the existing target data may be newer than\r\n // the in-memory data\r\n const cachedTargetData = localStoreImpl.targetDataByTarget.get(targetData.targetId);\r\n if (cachedTargetData === null ||\r\n targetData.snapshotVersion.compareTo(cachedTargetData.snapshotVersion) >\r\n 0) {\r\n localStoreImpl.targetDataByTarget =\r\n localStoreImpl.targetDataByTarget.insert(targetData.targetId, targetData);\r\n localStoreImpl.targetIdByTarget.set(target, targetData.targetId);\r\n }\r\n return targetData;\r\n });\r\n}\r\n/**\r\n * Returns the TargetData as seen by the LocalStore, including updates that may\r\n * have not yet been persisted to the TargetCache.\r\n */\r\n// Visible for testing.\r\nfunction localStoreGetTargetData(localStore, transaction, target) {\r\n const localStoreImpl = debugCast(localStore);\r\n const targetId = localStoreImpl.targetIdByTarget.get(target);\r\n if (targetId !== undefined) {\r\n return PersistencePromise.resolve(localStoreImpl.targetDataByTarget.get(targetId));\r\n }\r\n else {\r\n return localStoreImpl.targetCache.getTargetData(transaction, target);\r\n }\r\n}\r\n/**\r\n * Unpins all the documents associated with the given target. If\r\n * `keepPersistedTargetData` is set to false and Eager GC enabled, the method\r\n * directly removes the associated target data from the target cache.\r\n *\r\n * Releasing a non-existing `Target` is a no-op.\r\n */\r\n// PORTING NOTE: `keepPersistedTargetData` is multi-tab only.\r\nasync function localStoreReleaseTarget(localStore, targetId, keepPersistedTargetData) {\r\n const localStoreImpl = debugCast(localStore);\r\n const targetData = localStoreImpl.targetDataByTarget.get(targetId);\r\n const mode = keepPersistedTargetData ? 'readwrite' : 'readwrite-primary';\r\n try {\r\n if (!keepPersistedTargetData) {\r\n await localStoreImpl.persistence.runTransaction('Release target', mode, txn => {\r\n return localStoreImpl.persistence.referenceDelegate.removeTarget(txn, targetData);\r\n });\r\n }\r\n }\r\n catch (e) {\r\n if (isIndexedDbTransactionError(e)) {\r\n // All `releaseTarget` does is record the final metadata state for the\r\n // target, but we've been recording this periodically during target\r\n // activity. If we lose this write this could cause a very slight\r\n // difference in the order of target deletion during GC, but we\r\n // don't define exact LRU semantics so this is acceptable.\r\n logDebug(LOG_TAG$b, `Failed to update sequence numbers for target ${targetId}: ${e}`);\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n localStoreImpl.targetDataByTarget =\r\n localStoreImpl.targetDataByTarget.remove(targetId);\r\n localStoreImpl.targetIdByTarget.delete(targetData.target);\r\n}\r\n/**\r\n * Runs the specified query against the local store and returns the results,\r\n * potentially taking advantage of query data from previous executions (such\r\n * as the set of remote keys).\r\n *\r\n * @param usePreviousResults - Whether results from previous executions can\r\n * be used to optimize this query execution.\r\n */\r\nfunction localStoreExecuteQuery(localStore, query, usePreviousResults) {\r\n const localStoreImpl = debugCast(localStore);\r\n let lastLimboFreeSnapshotVersion = SnapshotVersion.min();\r\n let remoteKeys = documentKeySet();\r\n return localStoreImpl.persistence.runTransaction('Execute query', 'readonly', txn => {\r\n return localStoreGetTargetData(localStoreImpl, txn, queryToTarget(query))\r\n .next(targetData => {\r\n if (targetData) {\r\n lastLimboFreeSnapshotVersion =\r\n targetData.lastLimboFreeSnapshotVersion;\r\n return localStoreImpl.targetCache\r\n .getMatchingKeysForTargetId(txn, targetData.targetId)\r\n .next(result => {\r\n remoteKeys = result;\r\n });\r\n }\r\n })\r\n .next(() => localStoreImpl.queryEngine.getDocumentsMatchingQuery(txn, query, usePreviousResults\r\n ? lastLimboFreeSnapshotVersion\r\n : SnapshotVersion.min(), usePreviousResults ? remoteKeys : documentKeySet()))\r\n .next(documents => {\r\n setMaxReadTime(localStoreImpl, queryCollectionGroup(query), documents);\r\n return { documents, remoteKeys };\r\n });\r\n });\r\n}\r\nfunction applyWriteToRemoteDocuments(localStoreImpl, txn, batchResult, documentBuffer) {\r\n const batch = batchResult.batch;\r\n const docKeys = batch.keys();\r\n let promiseChain = PersistencePromise.resolve();\r\n docKeys.forEach(docKey => {\r\n promiseChain = promiseChain\r\n .next(() => documentBuffer.getEntry(txn, docKey))\r\n .next(doc => {\r\n const ackVersion = batchResult.docVersions.get(docKey);\r\n hardAssert(ackVersion !== null);\r\n if (doc.version.compareTo(ackVersion) < 0) {\r\n batch.applyToRemoteDocument(doc, batchResult);\r\n if (doc.isValidDocument()) {\r\n // We use the commitVersion as the readTime rather than the\r\n // document's updateTime since the updateTime is not advanced\r\n // for updates that do not modify the underlying document.\r\n doc.setReadTime(batchResult.commitVersion);\r\n documentBuffer.addEntry(doc);\r\n }\r\n }\r\n });\r\n });\r\n return promiseChain.next(() => localStoreImpl.mutationQueue.removeMutationBatch(txn, batch));\r\n}\r\n/** Returns the local view of the documents affected by a mutation batch. */\r\n// PORTING NOTE: Multi-Tab only.\r\nfunction localStoreLookupMutationDocuments(localStore, batchId) {\r\n const localStoreImpl = debugCast(localStore);\r\n const mutationQueueImpl = debugCast(localStoreImpl.mutationQueue);\r\n return localStoreImpl.persistence.runTransaction('Lookup mutation documents', 'readonly', txn => {\r\n return mutationQueueImpl.lookupMutationKeys(txn, batchId).next(keys => {\r\n if (keys) {\r\n return localStoreImpl.localDocuments.getDocuments(txn, keys);\r\n }\r\n else {\r\n return PersistencePromise.resolve(null);\r\n }\r\n });\r\n });\r\n}\r\n// PORTING NOTE: Multi-Tab only.\r\nfunction localStoreRemoveCachedMutationBatchMetadata(localStore, batchId) {\r\n const mutationQueueImpl = debugCast(debugCast(localStore, LocalStoreImpl).mutationQueue);\r\n mutationQueueImpl.removeCachedMutationKeys(batchId);\r\n}\r\n// PORTING NOTE: Multi-Tab only.\r\nfunction localStoreGetActiveClients(localStore) {\r\n const persistenceImpl = debugCast(debugCast(localStore, LocalStoreImpl).persistence);\r\n return persistenceImpl.getActiveClients();\r\n}\r\n// PORTING NOTE: Multi-Tab only.\r\nfunction localStoreGetCachedTarget(localStore, targetId) {\r\n const localStoreImpl = debugCast(localStore);\r\n const targetCacheImpl = debugCast(localStoreImpl.targetCache);\r\n const cachedTargetData = localStoreImpl.targetDataByTarget.get(targetId);\r\n if (cachedTargetData) {\r\n return Promise.resolve(cachedTargetData.target);\r\n }\r\n else {\r\n return localStoreImpl.persistence.runTransaction('Get target data', 'readonly', txn => {\r\n return targetCacheImpl\r\n .getTargetDataForTarget(txn, targetId)\r\n .next(targetData => (targetData ? targetData.target : null));\r\n });\r\n }\r\n}\r\n/**\r\n * Returns the set of documents that have been updated since the last call.\r\n * If this is the first call, returns the set of changes since client\r\n * initialization. Further invocations will return document that have changed\r\n * since the prior call.\r\n */\r\n// PORTING NOTE: Multi-Tab only.\r\nfunction localStoreGetNewDocumentChanges(localStore, collectionGroup) {\r\n const localStoreImpl = debugCast(localStore);\r\n // Get the current maximum read time for the collection. This should always\r\n // exist, but to reduce the chance for regressions we default to\r\n // SnapshotVersion.Min()\r\n // TODO(indexing): Consider removing the default value.\r\n const readTime = localStoreImpl.collectionGroupReadTime.get(collectionGroup) ||\r\n SnapshotVersion.min();\r\n return localStoreImpl.persistence\r\n .runTransaction('Get new document changes', 'readonly', txn => localStoreImpl.remoteDocuments.getAllFromCollectionGroup(txn, collectionGroup, newIndexOffsetSuccessorFromReadTime(readTime, INITIAL_LARGEST_BATCH_ID), \r\n /* limit= */ Number.MAX_SAFE_INTEGER))\r\n .then(changedDocs => {\r\n setMaxReadTime(localStoreImpl, collectionGroup, changedDocs);\r\n return changedDocs;\r\n });\r\n}\r\n/** Sets the collection group's maximum read time from the given documents. */\r\n// PORTING NOTE: Multi-Tab only.\r\nfunction setMaxReadTime(localStoreImpl, collectionGroup, changedDocs) {\r\n let readTime = localStoreImpl.collectionGroupReadTime.get(collectionGroup) ||\r\n SnapshotVersion.min();\r\n changedDocs.forEach((_, doc) => {\r\n if (doc.readTime.compareTo(readTime) > 0) {\r\n readTime = doc.readTime;\r\n }\r\n });\r\n localStoreImpl.collectionGroupReadTime.set(collectionGroup, readTime);\r\n}\r\n/**\r\n * Creates a new target using the given bundle name, which will be used to\r\n * hold the keys of all documents from the bundle in query-document mappings.\r\n * This ensures that the loaded documents do not get garbage collected\r\n * right away.\r\n */\r\nfunction umbrellaTarget(bundleName) {\r\n // It is OK that the path used for the query is not valid, because this will\r\n // not be read and queried.\r\n return queryToTarget(newQueryForPath(ResourcePath.fromString(`__bundle__/docs/${bundleName}`)));\r\n}\r\n/**\r\n * Applies the documents from a bundle to the \"ground-state\" (remote)\r\n * documents.\r\n *\r\n * LocalDocuments are re-calculated if there are remaining mutations in the\r\n * queue.\r\n */\r\nasync function localStoreApplyBundledDocuments(localStore, bundleConverter, documents, bundleName) {\r\n const localStoreImpl = debugCast(localStore);\r\n let documentKeys = documentKeySet();\r\n let documentMap = mutableDocumentMap();\r\n for (const bundleDoc of documents) {\r\n const documentKey = bundleConverter.toDocumentKey(bundleDoc.metadata.name);\r\n if (bundleDoc.document) {\r\n documentKeys = documentKeys.add(documentKey);\r\n }\r\n const doc = bundleConverter.toMutableDocument(bundleDoc);\r\n doc.setReadTime(bundleConverter.toSnapshotVersion(bundleDoc.metadata.readTime));\r\n documentMap = documentMap.insert(documentKey, doc);\r\n }\r\n const documentBuffer = localStoreImpl.remoteDocuments.newChangeBuffer({\r\n trackRemovals: true // Make sure document removals show up in `getNewDocumentChanges()`\r\n });\r\n // Allocates a target to hold all document keys from the bundle, such that\r\n // they will not get garbage collected right away.\r\n const umbrellaTargetData = await localStoreAllocateTarget(localStoreImpl, umbrellaTarget(bundleName));\r\n return localStoreImpl.persistence.runTransaction('Apply bundle documents', 'readwrite', txn => {\r\n return populateDocumentChangeBuffer(txn, documentBuffer, documentMap)\r\n .next(documentChangeResult => {\r\n documentBuffer.apply(txn);\r\n return documentChangeResult;\r\n })\r\n .next(documentChangeResult => {\r\n return localStoreImpl.targetCache\r\n .removeMatchingKeysForTargetId(txn, umbrellaTargetData.targetId)\r\n .next(() => localStoreImpl.targetCache.addMatchingKeys(txn, documentKeys, umbrellaTargetData.targetId))\r\n .next(() => localStoreImpl.localDocuments.getLocalViewOfDocuments(txn, documentChangeResult.changedDocuments, documentChangeResult.existenceChangedKeys))\r\n .next(() => documentChangeResult.changedDocuments);\r\n });\r\n });\r\n}\r\n/**\r\n * Returns a promise of a boolean to indicate if the given bundle has already\r\n * been loaded and the create time is newer than the current loading bundle.\r\n */\r\nfunction localStoreHasNewerBundle(localStore, bundleMetadata) {\r\n const localStoreImpl = debugCast(localStore);\r\n const currentReadTime = fromVersion(bundleMetadata.createTime);\r\n return localStoreImpl.persistence\r\n .runTransaction('hasNewerBundle', 'readonly', transaction => {\r\n return localStoreImpl.bundleCache.getBundleMetadata(transaction, bundleMetadata.id);\r\n })\r\n .then(cached => {\r\n return !!cached && cached.createTime.compareTo(currentReadTime) >= 0;\r\n });\r\n}\r\n/**\r\n * Saves the given `BundleMetadata` to local persistence.\r\n */\r\nfunction localStoreSaveBundle(localStore, bundleMetadata) {\r\n const localStoreImpl = debugCast(localStore);\r\n return localStoreImpl.persistence.runTransaction('Save bundle', 'readwrite', transaction => {\r\n return localStoreImpl.bundleCache.saveBundleMetadata(transaction, bundleMetadata);\r\n });\r\n}\r\n/**\r\n * Returns a promise of a `NamedQuery` associated with given query name. Promise\r\n * resolves to undefined if no persisted data can be found.\r\n */\r\nfunction localStoreGetNamedQuery(localStore, queryName) {\r\n const localStoreImpl = debugCast(localStore);\r\n return localStoreImpl.persistence.runTransaction('Get named query', 'readonly', transaction => localStoreImpl.bundleCache.getNamedQuery(transaction, queryName));\r\n}\r\n/**\r\n * Saves the given `NamedQuery` to local persistence.\r\n */\r\nasync function localStoreSaveNamedQuery(localStore, query, documents = documentKeySet()) {\r\n // Allocate a target for the named query such that it can be resumed\r\n // from associated read time if users use it to listen.\r\n // NOTE: this also means if no corresponding target exists, the new target\r\n // will remain active and will not get collected, unless users happen to\r\n // unlisten the query somehow.\r\n const allocated = await localStoreAllocateTarget(localStore, queryToTarget(fromBundledQuery(query.bundledQuery)));\r\n const localStoreImpl = debugCast(localStore);\r\n return localStoreImpl.persistence.runTransaction('Save named query', 'readwrite', transaction => {\r\n const readTime = fromVersion(query.readTime);\r\n // Simply save the query itself if it is older than what the SDK already\r\n // has.\r\n if (allocated.snapshotVersion.compareTo(readTime) >= 0) {\r\n return localStoreImpl.bundleCache.saveNamedQuery(transaction, query);\r\n }\r\n // Update existing target data because the query from the bundle is newer.\r\n const newTargetData = allocated.withResumeToken(ByteString.EMPTY_BYTE_STRING, readTime);\r\n localStoreImpl.targetDataByTarget =\r\n localStoreImpl.targetDataByTarget.insert(newTargetData.targetId, newTargetData);\r\n return localStoreImpl.targetCache\r\n .updateTargetData(transaction, newTargetData)\r\n .next(() => localStoreImpl.targetCache.removeMatchingKeysForTargetId(transaction, allocated.targetId))\r\n .next(() => localStoreImpl.targetCache.addMatchingKeys(transaction, documents, allocated.targetId))\r\n .next(() => localStoreImpl.bundleCache.saveNamedQuery(transaction, query));\r\n });\r\n}\r\nasync function localStoreConfigureFieldIndexes(localStore, newFieldIndexes) {\r\n const localStoreImpl = debugCast(localStore);\r\n const indexManager = localStoreImpl.indexManager;\r\n const promises = [];\r\n return localStoreImpl.persistence.runTransaction('Configure indexes', 'readwrite', transaction => indexManager\r\n .getFieldIndexes(transaction)\r\n .next(oldFieldIndexes => diffArrays(oldFieldIndexes, newFieldIndexes, fieldIndexSemanticComparator, fieldIndex => {\r\n promises.push(indexManager.addFieldIndex(transaction, fieldIndex));\r\n }, fieldIndex => {\r\n promises.push(indexManager.deleteFieldIndex(transaction, fieldIndex));\r\n }))\r\n .next(() => PersistencePromise.waitFor(promises)));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The Firestore query engine.\r\n *\r\n * Firestore queries can be executed in three modes. The Query Engine determines\r\n * what mode to use based on what data is persisted. The mode only determines\r\n * the runtime complexity of the query - the result set is equivalent across all\r\n * implementations.\r\n *\r\n * The Query engine will use indexed-based execution if a user has configured\r\n * any index that can be used to execute query (via `setIndexConfiguration()`).\r\n * Otherwise, the engine will try to optimize the query by re-using a previously\r\n * persisted query result. If that is not possible, the query will be executed\r\n * via a full collection scan.\r\n *\r\n * Index-based execution is the default when available. The query engine\r\n * supports partial indexed execution and merges the result from the index\r\n * lookup with documents that have not yet been indexed. The index evaluation\r\n * matches the backend's format and as such, the SDK can use indexing for all\r\n * queries that the backend supports.\r\n *\r\n * If no index exists, the query engine tries to take advantage of the target\r\n * document mapping in the TargetCache. These mappings exists for all queries\r\n * that have been synced with the backend at least once and allow the query\r\n * engine to only read documents that previously matched a query plus any\r\n * documents that were edited after the query was last listened to.\r\n *\r\n * There are some cases when this optimization is not guaranteed to produce\r\n * the same results as full collection scans. In these cases, query\r\n * processing falls back to full scans. These cases are:\r\n *\r\n * - Limit queries where a document that matched the query previously no longer\r\n * matches the query.\r\n *\r\n * - Limit queries where a document edit may cause the document to sort below\r\n * another document that is in the local cache.\r\n *\r\n * - Queries that have never been CURRENT or free of limbo documents.\r\n */\r\nclass QueryEngine {\r\n constructor() {\r\n this.initialized = false;\r\n }\r\n /** Sets the document view to query against. */\r\n initialize(localDocuments, indexManager) {\r\n this.localDocumentsView = localDocuments;\r\n this.indexManager = indexManager;\r\n this.initialized = true;\r\n }\r\n /** Returns all local documents matching the specified query. */\r\n getDocumentsMatchingQuery(transaction, query, lastLimboFreeSnapshotVersion, remoteKeys) {\r\n return this.performQueryUsingIndex(transaction, query)\r\n .next(result => result\r\n ? result\r\n : this.performQueryUsingRemoteKeys(transaction, query, remoteKeys, lastLimboFreeSnapshotVersion))\r\n .next(result => result ? result : this.executeFullCollectionScan(transaction, query));\r\n }\r\n /**\r\n * Performs an indexed query that evaluates the query based on a collection's\r\n * persisted index values. Returns `null` if an index is not available.\r\n */\r\n performQueryUsingIndex(transaction, query) {\r\n if (queryMatchesAllDocuments(query)) {\r\n // Queries that match all documents don't benefit from using\r\n // key-based lookups. It is more efficient to scan all documents in a\r\n // collection, rather than to perform individual lookups.\r\n return PersistencePromise.resolve(null);\r\n }\r\n let target = queryToTarget(query);\r\n return this.indexManager\r\n .getIndexType(transaction, target)\r\n .next(indexType => {\r\n if (indexType === 0 /* IndexType.NONE */) {\r\n // The target cannot be served from any index.\r\n return null;\r\n }\r\n if (query.limit !== null && indexType === 1 /* IndexType.PARTIAL */) {\r\n // We cannot apply a limit for targets that are served using a partial\r\n // index. If a partial index will be used to serve the target, the\r\n // query may return a superset of documents that match the target\r\n // (e.g. if the index doesn't include all the target's filters), or\r\n // may return the correct set of documents in the wrong order (e.g. if\r\n // the index doesn't include a segment for one of the orderBys).\r\n // Therefore, a limit should not be applied in such cases.\r\n query = queryWithLimit(query, null, \"F\" /* LimitType.First */);\r\n target = queryToTarget(query);\r\n }\r\n return this.indexManager\r\n .getDocumentsMatchingTarget(transaction, target)\r\n .next(keys => {\r\n const sortedKeys = documentKeySet(...keys);\r\n return this.localDocumentsView\r\n .getDocuments(transaction, sortedKeys)\r\n .next(indexedDocuments => {\r\n return this.indexManager\r\n .getMinOffset(transaction, target)\r\n .next(offset => {\r\n const previousResults = this.applyQuery(query, indexedDocuments);\r\n if (this.needsRefill(query, previousResults, sortedKeys, offset.readTime)) {\r\n // A limit query whose boundaries change due to local\r\n // edits can be re-run against the cache by excluding the\r\n // limit. This ensures that all documents that match the\r\n // query's filters are included in the result set. The SDK\r\n // can then apply the limit once all local edits are\r\n // incorporated.\r\n return this.performQueryUsingIndex(transaction, queryWithLimit(query, null, \"F\" /* LimitType.First */));\r\n }\r\n return this.appendRemainingResults(transaction, previousResults, query, offset);\r\n });\r\n });\r\n });\r\n });\r\n }\r\n /**\r\n * Performs a query based on the target's persisted query mapping. Returns\r\n * `null` if the mapping is not available or cannot be used.\r\n */\r\n performQueryUsingRemoteKeys(transaction, query, remoteKeys, lastLimboFreeSnapshotVersion) {\r\n if (queryMatchesAllDocuments(query)) {\r\n // Queries that match all documents don't benefit from using\r\n // key-based lookups. It is more efficient to scan all documents in a\r\n // collection, rather than to perform individual lookups.\r\n return this.executeFullCollectionScan(transaction, query);\r\n }\r\n // Queries that have never seen a snapshot without limbo free documents\r\n // should also be run as a full collection scan.\r\n if (lastLimboFreeSnapshotVersion.isEqual(SnapshotVersion.min())) {\r\n return this.executeFullCollectionScan(transaction, query);\r\n }\r\n return this.localDocumentsView.getDocuments(transaction, remoteKeys).next(documents => {\r\n const previousResults = this.applyQuery(query, documents);\r\n if (this.needsRefill(query, previousResults, remoteKeys, lastLimboFreeSnapshotVersion)) {\r\n return this.executeFullCollectionScan(transaction, query);\r\n }\r\n if (getLogLevel() <= LogLevel.DEBUG) {\r\n logDebug('QueryEngine', 'Re-using previous result from %s to execute query: %s', lastLimboFreeSnapshotVersion.toString(), stringifyQuery(query));\r\n }\r\n // Retrieve all results for documents that were updated since the last\r\n // limbo-document free remote snapshot.\r\n return this.appendRemainingResults(transaction, previousResults, query, newIndexOffsetSuccessorFromReadTime(lastLimboFreeSnapshotVersion, INITIAL_LARGEST_BATCH_ID));\r\n });\r\n }\r\n /** Applies the query filter and sorting to the provided documents. */\r\n applyQuery(query, documents) {\r\n // Sort the documents and re-apply the query filter since previously\r\n // matching documents do not necessarily still match the query.\r\n let queryResults = new SortedSet(newQueryComparator(query));\r\n documents.forEach((_, maybeDoc) => {\r\n if (queryMatches(query, maybeDoc)) {\r\n queryResults = queryResults.add(maybeDoc);\r\n }\r\n });\r\n return queryResults;\r\n }\r\n /**\r\n * Determines if a limit query needs to be refilled from cache, making it\r\n * ineligible for index-free execution.\r\n *\r\n * @param query - The query.\r\n * @param sortedPreviousResults - The documents that matched the query when it\r\n * was last synchronized, sorted by the query's comparator.\r\n * @param remoteKeys - The document keys that matched the query at the last\r\n * snapshot.\r\n * @param limboFreeSnapshotVersion - The version of the snapshot when the\r\n * query was last synchronized.\r\n */\r\n needsRefill(query, sortedPreviousResults, remoteKeys, limboFreeSnapshotVersion) {\r\n if (query.limit === null) {\r\n // Queries without limits do not need to be refilled.\r\n return false;\r\n }\r\n if (remoteKeys.size !== sortedPreviousResults.size) {\r\n // The query needs to be refilled if a previously matching document no\r\n // longer matches.\r\n return true;\r\n }\r\n // Limit queries are not eligible for index-free query execution if there is\r\n // a potential that an older document from cache now sorts before a document\r\n // that was previously part of the limit. This, however, can only happen if\r\n // the document at the edge of the limit goes out of limit.\r\n // If a document that is not the limit boundary sorts differently,\r\n // the boundary of the limit itself did not change and documents from cache\r\n // will continue to be \"rejected\" by this boundary. Therefore, we can ignore\r\n // any modifications that don't affect the last document.\r\n const docAtLimitEdge = query.limitType === \"F\" /* LimitType.First */\r\n ? sortedPreviousResults.last()\r\n : sortedPreviousResults.first();\r\n if (!docAtLimitEdge) {\r\n // We don't need to refill the query if there were already no documents.\r\n return false;\r\n }\r\n return (docAtLimitEdge.hasPendingWrites ||\r\n docAtLimitEdge.version.compareTo(limboFreeSnapshotVersion) > 0);\r\n }\r\n executeFullCollectionScan(transaction, query) {\r\n if (getLogLevel() <= LogLevel.DEBUG) {\r\n logDebug('QueryEngine', 'Using full collection scan to execute query:', stringifyQuery(query));\r\n }\r\n return this.localDocumentsView.getDocumentsMatchingQuery(transaction, query, IndexOffset.min());\r\n }\r\n /**\r\n * Combines the results from an indexed execution with the remaining documents\r\n * that have not yet been indexed.\r\n */\r\n appendRemainingResults(transaction, indexedResults, query, offset) {\r\n // Retrieve all results for documents that were updated since the offset.\r\n return this.localDocumentsView\r\n .getDocumentsMatchingQuery(transaction, query, offset)\r\n .next(remainingResults => {\r\n // Merge with existing results\r\n indexedResults.forEach(d => {\r\n remainingResults = remainingResults.insert(d.key, d);\r\n });\r\n return remainingResults;\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// The format of the LocalStorage key that stores the client state is:\r\n// firestore_clients__\r\nconst CLIENT_STATE_KEY_PREFIX = 'firestore_clients';\r\n/** Assembles the key for a client state in WebStorage */\r\nfunction createWebStorageClientStateKey(persistenceKey, clientId) {\r\n return `${CLIENT_STATE_KEY_PREFIX}_${persistenceKey}_${clientId}`;\r\n}\r\n// The format of the WebStorage key that stores the mutation state is:\r\n// firestore_mutations__\r\n// (for unauthenticated users)\r\n// or: firestore_mutations___\r\n//\r\n// 'user_uid' is last to avoid needing to escape '_' characters that it might\r\n// contain.\r\nconst MUTATION_BATCH_KEY_PREFIX = 'firestore_mutations';\r\n/** Assembles the key for a mutation batch in WebStorage */\r\nfunction createWebStorageMutationBatchKey(persistenceKey, user, batchId) {\r\n let mutationKey = `${MUTATION_BATCH_KEY_PREFIX}_${persistenceKey}_${batchId}`;\r\n if (user.isAuthenticated()) {\r\n mutationKey += `_${user.uid}`;\r\n }\r\n return mutationKey;\r\n}\r\n// The format of the WebStorage key that stores a query target's metadata is:\r\n// firestore_targets__\r\nconst QUERY_TARGET_KEY_PREFIX = 'firestore_targets';\r\n/** Assembles the key for a query state in WebStorage */\r\nfunction createWebStorageQueryTargetMetadataKey(persistenceKey, targetId) {\r\n return `${QUERY_TARGET_KEY_PREFIX}_${persistenceKey}_${targetId}`;\r\n}\r\n// The WebStorage prefix that stores the primary tab's online state. The\r\n// format of the key is:\r\n// firestore_online_state_\r\nconst ONLINE_STATE_KEY_PREFIX = 'firestore_online_state';\r\n/** Assembles the key for the online state of the primary tab. */\r\nfunction createWebStorageOnlineStateKey(persistenceKey) {\r\n return `${ONLINE_STATE_KEY_PREFIX}_${persistenceKey}`;\r\n}\r\n// The WebStorage prefix that plays as a event to indicate the remote documents\r\n// might have changed due to some secondary tabs loading a bundle.\r\n// format of the key is:\r\n// firestore_bundle_loaded_v2_\r\n// The version ending with \"v2\" stores the list of modified collection groups.\r\nconst BUNDLE_LOADED_KEY_PREFIX = 'firestore_bundle_loaded_v2';\r\nfunction createBundleLoadedKey(persistenceKey) {\r\n return `${BUNDLE_LOADED_KEY_PREFIX}_${persistenceKey}`;\r\n}\r\n// The WebStorage key prefix for the key that stores the last sequence number allocated. The key\r\n// looks like 'firestore_sequence_number_'.\r\nconst SEQUENCE_NUMBER_KEY_PREFIX = 'firestore_sequence_number';\r\n/** Assembles the key for the current sequence number. */\r\nfunction createWebStorageSequenceNumberKey(persistenceKey) {\r\n return `${SEQUENCE_NUMBER_KEY_PREFIX}_${persistenceKey}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2018 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$a = 'SharedClientState';\r\n/**\r\n * Holds the state of a mutation batch, including its user ID, batch ID and\r\n * whether the batch is 'pending', 'acknowledged' or 'rejected'.\r\n */\r\n// Visible for testing\r\nclass MutationMetadata {\r\n constructor(user, batchId, state, error) {\r\n this.user = user;\r\n this.batchId = batchId;\r\n this.state = state;\r\n this.error = error;\r\n }\r\n /**\r\n * Parses a MutationMetadata from its JSON representation in WebStorage.\r\n * Logs a warning and returns null if the format of the data is not valid.\r\n */\r\n static fromWebStorageEntry(user, batchId, value) {\r\n const mutationBatch = JSON.parse(value);\r\n let validData = typeof mutationBatch === 'object' &&\r\n ['pending', 'acknowledged', 'rejected'].indexOf(mutationBatch.state) !==\r\n -1 &&\r\n (mutationBatch.error === undefined ||\r\n typeof mutationBatch.error === 'object');\r\n let firestoreError = undefined;\r\n if (validData && mutationBatch.error) {\r\n validData =\r\n typeof mutationBatch.error.message === 'string' &&\r\n typeof mutationBatch.error.code === 'string';\r\n if (validData) {\r\n firestoreError = new FirestoreError(mutationBatch.error.code, mutationBatch.error.message);\r\n }\r\n }\r\n if (validData) {\r\n return new MutationMetadata(user, batchId, mutationBatch.state, firestoreError);\r\n }\r\n else {\r\n logError(LOG_TAG$a, `Failed to parse mutation state for ID '${batchId}': ${value}`);\r\n return null;\r\n }\r\n }\r\n toWebStorageJSON() {\r\n const batchMetadata = {\r\n state: this.state,\r\n updateTimeMs: Date.now() // Modify the existing value to trigger update.\r\n };\r\n if (this.error) {\r\n batchMetadata.error = {\r\n code: this.error.code,\r\n message: this.error.message\r\n };\r\n }\r\n return JSON.stringify(batchMetadata);\r\n }\r\n}\r\n/**\r\n * Holds the state of a query target, including its target ID and whether the\r\n * target is 'not-current', 'current' or 'rejected'.\r\n */\r\n// Visible for testing\r\nclass QueryTargetMetadata {\r\n constructor(targetId, state, error) {\r\n this.targetId = targetId;\r\n this.state = state;\r\n this.error = error;\r\n }\r\n /**\r\n * Parses a QueryTargetMetadata from its JSON representation in WebStorage.\r\n * Logs a warning and returns null if the format of the data is not valid.\r\n */\r\n static fromWebStorageEntry(targetId, value) {\r\n const targetState = JSON.parse(value);\r\n let validData = typeof targetState === 'object' &&\r\n ['not-current', 'current', 'rejected'].indexOf(targetState.state) !==\r\n -1 &&\r\n (targetState.error === undefined ||\r\n typeof targetState.error === 'object');\r\n let firestoreError = undefined;\r\n if (validData && targetState.error) {\r\n validData =\r\n typeof targetState.error.message === 'string' &&\r\n typeof targetState.error.code === 'string';\r\n if (validData) {\r\n firestoreError = new FirestoreError(targetState.error.code, targetState.error.message);\r\n }\r\n }\r\n if (validData) {\r\n return new QueryTargetMetadata(targetId, targetState.state, firestoreError);\r\n }\r\n else {\r\n logError(LOG_TAG$a, `Failed to parse target state for ID '${targetId}': ${value}`);\r\n return null;\r\n }\r\n }\r\n toWebStorageJSON() {\r\n const targetState = {\r\n state: this.state,\r\n updateTimeMs: Date.now() // Modify the existing value to trigger update.\r\n };\r\n if (this.error) {\r\n targetState.error = {\r\n code: this.error.code,\r\n message: this.error.message\r\n };\r\n }\r\n return JSON.stringify(targetState);\r\n }\r\n}\r\n/**\r\n * This class represents the immutable ClientState for a client read from\r\n * WebStorage, containing the list of active query targets.\r\n */\r\nclass RemoteClientState {\r\n constructor(clientId, activeTargetIds) {\r\n this.clientId = clientId;\r\n this.activeTargetIds = activeTargetIds;\r\n }\r\n /**\r\n * Parses a RemoteClientState from the JSON representation in WebStorage.\r\n * Logs a warning and returns null if the format of the data is not valid.\r\n */\r\n static fromWebStorageEntry(clientId, value) {\r\n const clientState = JSON.parse(value);\r\n let validData = typeof clientState === 'object' &&\r\n clientState.activeTargetIds instanceof Array;\r\n let activeTargetIdsSet = targetIdSet();\r\n for (let i = 0; validData && i < clientState.activeTargetIds.length; ++i) {\r\n validData = isSafeInteger(clientState.activeTargetIds[i]);\r\n activeTargetIdsSet = activeTargetIdsSet.add(clientState.activeTargetIds[i]);\r\n }\r\n if (validData) {\r\n return new RemoteClientState(clientId, activeTargetIdsSet);\r\n }\r\n else {\r\n logError(LOG_TAG$a, `Failed to parse client data for instance '${clientId}': ${value}`);\r\n return null;\r\n }\r\n }\r\n}\r\n/**\r\n * This class represents the online state for all clients participating in\r\n * multi-tab. The online state is only written to by the primary client, and\r\n * used in secondary clients to update their query views.\r\n */\r\nclass SharedOnlineState {\r\n constructor(clientId, onlineState) {\r\n this.clientId = clientId;\r\n this.onlineState = onlineState;\r\n }\r\n /**\r\n * Parses a SharedOnlineState from its JSON representation in WebStorage.\r\n * Logs a warning and returns null if the format of the data is not valid.\r\n */\r\n static fromWebStorageEntry(value) {\r\n const onlineState = JSON.parse(value);\r\n const validData = typeof onlineState === 'object' &&\r\n ['Unknown', 'Online', 'Offline'].indexOf(onlineState.onlineState) !==\r\n -1 &&\r\n typeof onlineState.clientId === 'string';\r\n if (validData) {\r\n return new SharedOnlineState(onlineState.clientId, onlineState.onlineState);\r\n }\r\n else {\r\n logError(LOG_TAG$a, `Failed to parse online state: ${value}`);\r\n return null;\r\n }\r\n }\r\n}\r\n/**\r\n * Metadata state of the local client. Unlike `RemoteClientState`, this class is\r\n * mutable and keeps track of all pending mutations, which allows us to\r\n * update the range of pending mutation batch IDs as new mutations are added or\r\n * removed.\r\n *\r\n * The data in `LocalClientState` is not read from WebStorage and instead\r\n * updated via its instance methods. The updated state can be serialized via\r\n * `toWebStorageJSON()`.\r\n */\r\n// Visible for testing.\r\nclass LocalClientState {\r\n constructor() {\r\n this.activeTargetIds = targetIdSet();\r\n }\r\n addQueryTarget(targetId) {\r\n this.activeTargetIds = this.activeTargetIds.add(targetId);\r\n }\r\n removeQueryTarget(targetId) {\r\n this.activeTargetIds = this.activeTargetIds.delete(targetId);\r\n }\r\n /**\r\n * Converts this entry into a JSON-encoded format we can use for WebStorage.\r\n * Does not encode `clientId` as it is part of the key in WebStorage.\r\n */\r\n toWebStorageJSON() {\r\n const data = {\r\n activeTargetIds: this.activeTargetIds.toArray(),\r\n updateTimeMs: Date.now() // Modify the existing value to trigger update.\r\n };\r\n return JSON.stringify(data);\r\n }\r\n}\r\n/**\r\n * `WebStorageSharedClientState` uses WebStorage (window.localStorage) as the\r\n * backing store for the SharedClientState. It keeps track of all active\r\n * clients and supports modifications of the local client's data.\r\n */\r\nclass WebStorageSharedClientState {\r\n constructor(window, queue, persistenceKey, localClientId, initialUser) {\r\n this.window = window;\r\n this.queue = queue;\r\n this.persistenceKey = persistenceKey;\r\n this.localClientId = localClientId;\r\n this.syncEngine = null;\r\n this.onlineStateHandler = null;\r\n this.sequenceNumberHandler = null;\r\n this.storageListener = this.handleWebStorageEvent.bind(this);\r\n this.activeClients = new SortedMap(primitiveComparator);\r\n this.started = false;\r\n /**\r\n * Captures WebStorage events that occur before `start()` is called. These\r\n * events are replayed once `WebStorageSharedClientState` is started.\r\n */\r\n this.earlyEvents = [];\r\n // Escape the special characters mentioned here:\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\r\n const escapedPersistenceKey = persistenceKey.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n this.storage = this.window.localStorage;\r\n this.currentUser = initialUser;\r\n this.localClientStorageKey = createWebStorageClientStateKey(this.persistenceKey, this.localClientId);\r\n this.sequenceNumberKey = createWebStorageSequenceNumberKey(this.persistenceKey);\r\n this.activeClients = this.activeClients.insert(this.localClientId, new LocalClientState());\r\n this.clientStateKeyRe = new RegExp(`^${CLIENT_STATE_KEY_PREFIX}_${escapedPersistenceKey}_([^_]*)$`);\r\n this.mutationBatchKeyRe = new RegExp(`^${MUTATION_BATCH_KEY_PREFIX}_${escapedPersistenceKey}_(\\\\d+)(?:_(.*))?$`);\r\n this.queryTargetKeyRe = new RegExp(`^${QUERY_TARGET_KEY_PREFIX}_${escapedPersistenceKey}_(\\\\d+)$`);\r\n this.onlineStateKey = createWebStorageOnlineStateKey(this.persistenceKey);\r\n this.bundleLoadedKey = createBundleLoadedKey(this.persistenceKey);\r\n // Rather than adding the storage observer during start(), we add the\r\n // storage observer during initialization. This ensures that we collect\r\n // events before other components populate their initial state (during their\r\n // respective start() calls). Otherwise, we might for example miss a\r\n // mutation that is added after LocalStore's start() processed the existing\r\n // mutations but before we observe WebStorage events.\r\n this.window.addEventListener('storage', this.storageListener);\r\n }\r\n /** Returns 'true' if WebStorage is available in the current environment. */\r\n static isAvailable(window) {\r\n return !!(window && window.localStorage);\r\n }\r\n async start() {\r\n // Retrieve the list of existing clients to backfill the data in\r\n // SharedClientState.\r\n const existingClients = await this.syncEngine.getActiveClients();\r\n for (const clientId of existingClients) {\r\n if (clientId === this.localClientId) {\r\n continue;\r\n }\r\n const storageItem = this.getItem(createWebStorageClientStateKey(this.persistenceKey, clientId));\r\n if (storageItem) {\r\n const clientState = RemoteClientState.fromWebStorageEntry(clientId, storageItem);\r\n if (clientState) {\r\n this.activeClients = this.activeClients.insert(clientState.clientId, clientState);\r\n }\r\n }\r\n }\r\n this.persistClientState();\r\n // Check if there is an existing online state and call the callback handler\r\n // if applicable.\r\n const onlineStateJSON = this.storage.getItem(this.onlineStateKey);\r\n if (onlineStateJSON) {\r\n const onlineState = this.fromWebStorageOnlineState(onlineStateJSON);\r\n if (onlineState) {\r\n this.handleOnlineStateEvent(onlineState);\r\n }\r\n }\r\n for (const event of this.earlyEvents) {\r\n this.handleWebStorageEvent(event);\r\n }\r\n this.earlyEvents = [];\r\n // Register a window unload hook to remove the client metadata entry from\r\n // WebStorage even if `shutdown()` was not called.\r\n this.window.addEventListener('pagehide', () => this.shutdown());\r\n this.started = true;\r\n }\r\n writeSequenceNumber(sequenceNumber) {\r\n this.setItem(this.sequenceNumberKey, JSON.stringify(sequenceNumber));\r\n }\r\n getAllActiveQueryTargets() {\r\n return this.extractActiveQueryTargets(this.activeClients);\r\n }\r\n isActiveQueryTarget(targetId) {\r\n let found = false;\r\n this.activeClients.forEach((key, value) => {\r\n if (value.activeTargetIds.has(targetId)) {\r\n found = true;\r\n }\r\n });\r\n return found;\r\n }\r\n addPendingMutation(batchId) {\r\n this.persistMutationState(batchId, 'pending');\r\n }\r\n updateMutationState(batchId, state, error) {\r\n this.persistMutationState(batchId, state, error);\r\n // Once a final mutation result is observed by other clients, they no longer\r\n // access the mutation's metadata entry. Since WebStorage replays events\r\n // in order, it is safe to delete the entry right after updating it.\r\n this.removeMutationState(batchId);\r\n }\r\n addLocalQueryTarget(targetId) {\r\n let queryState = 'not-current';\r\n // Lookup an existing query state if the target ID was already registered\r\n // by another tab\r\n if (this.isActiveQueryTarget(targetId)) {\r\n const storageItem = this.storage.getItem(createWebStorageQueryTargetMetadataKey(this.persistenceKey, targetId));\r\n if (storageItem) {\r\n const metadata = QueryTargetMetadata.fromWebStorageEntry(targetId, storageItem);\r\n if (metadata) {\r\n queryState = metadata.state;\r\n }\r\n }\r\n }\r\n this.localClientState.addQueryTarget(targetId);\r\n this.persistClientState();\r\n return queryState;\r\n }\r\n removeLocalQueryTarget(targetId) {\r\n this.localClientState.removeQueryTarget(targetId);\r\n this.persistClientState();\r\n }\r\n isLocalQueryTarget(targetId) {\r\n return this.localClientState.activeTargetIds.has(targetId);\r\n }\r\n clearQueryState(targetId) {\r\n this.removeItem(createWebStorageQueryTargetMetadataKey(this.persistenceKey, targetId));\r\n }\r\n updateQueryState(targetId, state, error) {\r\n this.persistQueryTargetState(targetId, state, error);\r\n }\r\n handleUserChange(user, removedBatchIds, addedBatchIds) {\r\n removedBatchIds.forEach(batchId => {\r\n this.removeMutationState(batchId);\r\n });\r\n this.currentUser = user;\r\n addedBatchIds.forEach(batchId => {\r\n this.addPendingMutation(batchId);\r\n });\r\n }\r\n setOnlineState(onlineState) {\r\n this.persistOnlineState(onlineState);\r\n }\r\n notifyBundleLoaded(collectionGroups) {\r\n this.persistBundleLoadedState(collectionGroups);\r\n }\r\n shutdown() {\r\n if (this.started) {\r\n this.window.removeEventListener('storage', this.storageListener);\r\n this.removeItem(this.localClientStorageKey);\r\n this.started = false;\r\n }\r\n }\r\n getItem(key) {\r\n const value = this.storage.getItem(key);\r\n logDebug(LOG_TAG$a, 'READ', key, value);\r\n return value;\r\n }\r\n setItem(key, value) {\r\n logDebug(LOG_TAG$a, 'SET', key, value);\r\n this.storage.setItem(key, value);\r\n }\r\n removeItem(key) {\r\n logDebug(LOG_TAG$a, 'REMOVE', key);\r\n this.storage.removeItem(key);\r\n }\r\n handleWebStorageEvent(event) {\r\n // Note: The function is typed to take Event to be interface-compatible with\r\n // `Window.addEventListener`.\r\n const storageEvent = event;\r\n if (storageEvent.storageArea === this.storage) {\r\n logDebug(LOG_TAG$a, 'EVENT', storageEvent.key, storageEvent.newValue);\r\n if (storageEvent.key === this.localClientStorageKey) {\r\n logError('Received WebStorage notification for local change. Another client might have ' +\r\n 'garbage-collected our state');\r\n return;\r\n }\r\n this.queue.enqueueRetryable(async () => {\r\n if (!this.started) {\r\n this.earlyEvents.push(storageEvent);\r\n return;\r\n }\r\n if (storageEvent.key === null) {\r\n return;\r\n }\r\n if (this.clientStateKeyRe.test(storageEvent.key)) {\r\n if (storageEvent.newValue != null) {\r\n const clientState = this.fromWebStorageClientState(storageEvent.key, storageEvent.newValue);\r\n if (clientState) {\r\n return this.handleClientStateEvent(clientState.clientId, clientState);\r\n }\r\n }\r\n else {\r\n const clientId = this.fromWebStorageClientStateKey(storageEvent.key);\r\n return this.handleClientStateEvent(clientId, null);\r\n }\r\n }\r\n else if (this.mutationBatchKeyRe.test(storageEvent.key)) {\r\n if (storageEvent.newValue !== null) {\r\n const mutationMetadata = this.fromWebStorageMutationMetadata(storageEvent.key, storageEvent.newValue);\r\n if (mutationMetadata) {\r\n return this.handleMutationBatchEvent(mutationMetadata);\r\n }\r\n }\r\n }\r\n else if (this.queryTargetKeyRe.test(storageEvent.key)) {\r\n if (storageEvent.newValue !== null) {\r\n const queryTargetMetadata = this.fromWebStorageQueryTargetMetadata(storageEvent.key, storageEvent.newValue);\r\n if (queryTargetMetadata) {\r\n return this.handleQueryTargetEvent(queryTargetMetadata);\r\n }\r\n }\r\n }\r\n else if (storageEvent.key === this.onlineStateKey) {\r\n if (storageEvent.newValue !== null) {\r\n const onlineState = this.fromWebStorageOnlineState(storageEvent.newValue);\r\n if (onlineState) {\r\n return this.handleOnlineStateEvent(onlineState);\r\n }\r\n }\r\n }\r\n else if (storageEvent.key === this.sequenceNumberKey) {\r\n const sequenceNumber = fromWebStorageSequenceNumber(storageEvent.newValue);\r\n if (sequenceNumber !== ListenSequence.INVALID) {\r\n this.sequenceNumberHandler(sequenceNumber);\r\n }\r\n }\r\n else if (storageEvent.key === this.bundleLoadedKey) {\r\n const collectionGroups = this.fromWebStoreBundleLoadedState(storageEvent.newValue);\r\n await Promise.all(collectionGroups.map(cg => this.syncEngine.synchronizeWithChangedDocuments(cg)));\r\n }\r\n });\r\n }\r\n }\r\n get localClientState() {\r\n return this.activeClients.get(this.localClientId);\r\n }\r\n persistClientState() {\r\n this.setItem(this.localClientStorageKey, this.localClientState.toWebStorageJSON());\r\n }\r\n persistMutationState(batchId, state, error) {\r\n const mutationState = new MutationMetadata(this.currentUser, batchId, state, error);\r\n const mutationKey = createWebStorageMutationBatchKey(this.persistenceKey, this.currentUser, batchId);\r\n this.setItem(mutationKey, mutationState.toWebStorageJSON());\r\n }\r\n removeMutationState(batchId) {\r\n const mutationKey = createWebStorageMutationBatchKey(this.persistenceKey, this.currentUser, batchId);\r\n this.removeItem(mutationKey);\r\n }\r\n persistOnlineState(onlineState) {\r\n const entry = {\r\n clientId: this.localClientId,\r\n onlineState\r\n };\r\n this.storage.setItem(this.onlineStateKey, JSON.stringify(entry));\r\n }\r\n persistQueryTargetState(targetId, state, error) {\r\n const targetKey = createWebStorageQueryTargetMetadataKey(this.persistenceKey, targetId);\r\n const targetMetadata = new QueryTargetMetadata(targetId, state, error);\r\n this.setItem(targetKey, targetMetadata.toWebStorageJSON());\r\n }\r\n persistBundleLoadedState(collectionGroups) {\r\n const json = JSON.stringify(Array.from(collectionGroups));\r\n this.setItem(this.bundleLoadedKey, json);\r\n }\r\n /**\r\n * Parses a client state key in WebStorage. Returns null if the key does not\r\n * match the expected key format.\r\n */\r\n fromWebStorageClientStateKey(key) {\r\n const match = this.clientStateKeyRe.exec(key);\r\n return match ? match[1] : null;\r\n }\r\n /**\r\n * Parses a client state in WebStorage. Returns 'null' if the value could not\r\n * be parsed.\r\n */\r\n fromWebStorageClientState(key, value) {\r\n const clientId = this.fromWebStorageClientStateKey(key);\r\n return RemoteClientState.fromWebStorageEntry(clientId, value);\r\n }\r\n /**\r\n * Parses a mutation batch state in WebStorage. Returns 'null' if the value\r\n * could not be parsed.\r\n */\r\n fromWebStorageMutationMetadata(key, value) {\r\n const match = this.mutationBatchKeyRe.exec(key);\r\n const batchId = Number(match[1]);\r\n const userId = match[2] !== undefined ? match[2] : null;\r\n return MutationMetadata.fromWebStorageEntry(new User(userId), batchId, value);\r\n }\r\n /**\r\n * Parses a query target state from WebStorage. Returns 'null' if the value\r\n * could not be parsed.\r\n */\r\n fromWebStorageQueryTargetMetadata(key, value) {\r\n const match = this.queryTargetKeyRe.exec(key);\r\n const targetId = Number(match[1]);\r\n return QueryTargetMetadata.fromWebStorageEntry(targetId, value);\r\n }\r\n /**\r\n * Parses an online state from WebStorage. Returns 'null' if the value\r\n * could not be parsed.\r\n */\r\n fromWebStorageOnlineState(value) {\r\n return SharedOnlineState.fromWebStorageEntry(value);\r\n }\r\n fromWebStoreBundleLoadedState(value) {\r\n return JSON.parse(value);\r\n }\r\n async handleMutationBatchEvent(mutationBatch) {\r\n if (mutationBatch.user.uid !== this.currentUser.uid) {\r\n logDebug(LOG_TAG$a, `Ignoring mutation for non-active user ${mutationBatch.user.uid}`);\r\n return;\r\n }\r\n return this.syncEngine.applyBatchState(mutationBatch.batchId, mutationBatch.state, mutationBatch.error);\r\n }\r\n handleQueryTargetEvent(targetMetadata) {\r\n return this.syncEngine.applyTargetState(targetMetadata.targetId, targetMetadata.state, targetMetadata.error);\r\n }\r\n handleClientStateEvent(clientId, clientState) {\r\n const updatedClients = clientState\r\n ? this.activeClients.insert(clientId, clientState)\r\n : this.activeClients.remove(clientId);\r\n const existingTargets = this.extractActiveQueryTargets(this.activeClients);\r\n const newTargets = this.extractActiveQueryTargets(updatedClients);\r\n const addedTargets = [];\r\n const removedTargets = [];\r\n newTargets.forEach(targetId => {\r\n if (!existingTargets.has(targetId)) {\r\n addedTargets.push(targetId);\r\n }\r\n });\r\n existingTargets.forEach(targetId => {\r\n if (!newTargets.has(targetId)) {\r\n removedTargets.push(targetId);\r\n }\r\n });\r\n return this.syncEngine.applyActiveTargetsChange(addedTargets, removedTargets).then(() => {\r\n this.activeClients = updatedClients;\r\n });\r\n }\r\n handleOnlineStateEvent(onlineState) {\r\n // We check whether the client that wrote this online state is still active\r\n // by comparing its client ID to the list of clients kept active in\r\n // IndexedDb. If a client does not update their IndexedDb client state\r\n // within 5 seconds, it is considered inactive and we don't emit an online\r\n // state event.\r\n if (this.activeClients.get(onlineState.clientId)) {\r\n this.onlineStateHandler(onlineState.onlineState);\r\n }\r\n }\r\n extractActiveQueryTargets(clients) {\r\n let activeTargets = targetIdSet();\r\n clients.forEach((kev, value) => {\r\n activeTargets = activeTargets.unionWith(value.activeTargetIds);\r\n });\r\n return activeTargets;\r\n }\r\n}\r\nfunction fromWebStorageSequenceNumber(seqString) {\r\n let sequenceNumber = ListenSequence.INVALID;\r\n if (seqString != null) {\r\n try {\r\n const parsed = JSON.parse(seqString);\r\n hardAssert(typeof parsed === 'number');\r\n sequenceNumber = parsed;\r\n }\r\n catch (e) {\r\n logError(LOG_TAG$a, 'Failed to read sequence number from WebStorage', e);\r\n }\r\n }\r\n return sequenceNumber;\r\n}\r\n/**\r\n * `MemorySharedClientState` is a simple implementation of SharedClientState for\r\n * clients using memory persistence. The state in this class remains fully\r\n * isolated and no synchronization is performed.\r\n */\r\nclass MemorySharedClientState {\r\n constructor() {\r\n this.localState = new LocalClientState();\r\n this.queryState = {};\r\n this.onlineStateHandler = null;\r\n this.sequenceNumberHandler = null;\r\n }\r\n addPendingMutation(batchId) {\r\n // No op.\r\n }\r\n updateMutationState(batchId, state, error) {\r\n // No op.\r\n }\r\n addLocalQueryTarget(targetId) {\r\n this.localState.addQueryTarget(targetId);\r\n return this.queryState[targetId] || 'not-current';\r\n }\r\n updateQueryState(targetId, state, error) {\r\n this.queryState[targetId] = state;\r\n }\r\n removeLocalQueryTarget(targetId) {\r\n this.localState.removeQueryTarget(targetId);\r\n }\r\n isLocalQueryTarget(targetId) {\r\n return this.localState.activeTargetIds.has(targetId);\r\n }\r\n clearQueryState(targetId) {\r\n delete this.queryState[targetId];\r\n }\r\n getAllActiveQueryTargets() {\r\n return this.localState.activeTargetIds;\r\n }\r\n isActiveQueryTarget(targetId) {\r\n return this.localState.activeTargetIds.has(targetId);\r\n }\r\n start() {\r\n this.localState = new LocalClientState();\r\n return Promise.resolve();\r\n }\r\n handleUserChange(user, removedBatchIds, addedBatchIds) {\r\n // No op.\r\n }\r\n setOnlineState(onlineState) {\r\n // No op.\r\n }\r\n shutdown() { }\r\n writeSequenceNumber(sequenceNumber) { }\r\n notifyBundleLoaded(collectionGroups) {\r\n // No op.\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass NoopConnectivityMonitor {\r\n addCallback(callback) {\r\n // No-op.\r\n }\r\n shutdown() {\r\n // No-op.\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provides a simple helper class that implements the Stream interface to\r\n * bridge to other implementations that are streams but do not implement the\r\n * interface. The stream callbacks are invoked with the callOn... methods.\r\n */\r\nclass StreamBridge {\r\n constructor(args) {\r\n this.sendFn = args.sendFn;\r\n this.closeFn = args.closeFn;\r\n }\r\n onOpen(callback) {\r\n this.wrappedOnOpen = callback;\r\n }\r\n onClose(callback) {\r\n this.wrappedOnClose = callback;\r\n }\r\n onMessage(callback) {\r\n this.wrappedOnMessage = callback;\r\n }\r\n close() {\r\n this.closeFn();\r\n }\r\n send(msg) {\r\n this.sendFn(msg);\r\n }\r\n callOnOpen() {\r\n this.wrappedOnOpen();\r\n }\r\n callOnClose(err) {\r\n this.wrappedOnClose(err);\r\n }\r\n callOnMessage(msg) {\r\n this.wrappedOnMessage(msg);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/*\r\n * Utilities for dealing with node.js-style APIs. See nodePromise for more\r\n * details.\r\n */\r\n/**\r\n * Creates a node-style callback that resolves or rejects a new Promise. The\r\n * callback is passed to the given action which can then use the callback as\r\n * a parameter to a node-style function.\r\n *\r\n * The intent is to directly bridge a node-style function (which takes a\r\n * callback) into a Promise without manually converting between the node-style\r\n * callback and the promise at each call.\r\n *\r\n * In effect it allows you to convert:\r\n *\r\n * @example\r\n * new Promise((resolve: (value?: fs.Stats) => void,\r\n * reject: (error?: any) => void) => {\r\n * fs.stat(path, (error?: any, stat?: fs.Stats) => {\r\n * if (error) {\r\n * reject(error);\r\n * } else {\r\n * resolve(stat);\r\n * }\r\n * });\r\n * });\r\n *\r\n * Into\r\n * @example\r\n * nodePromise((callback: NodeCallback) => {\r\n * fs.stat(path, callback);\r\n * });\r\n *\r\n * @param action - a function that takes a node-style callback as an argument\r\n * and then uses that callback to invoke some node-style API.\r\n * @returns a new Promise which will be rejected if the callback is given the\r\n * first Error parameter or will resolve to the value given otherwise.\r\n */\r\nfunction nodePromise(action) {\r\n return new Promise((resolve, reject) => {\r\n action((error, value) => {\r\n if (error) {\r\n reject(error);\r\n }\r\n else {\r\n resolve(value);\r\n }\r\n });\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// TODO: Fetch runtime version from grpc-js/package.json instead\r\n// when there's a cleaner way to dynamic require JSON in both Node ESM and CJS\r\nconst grpcVersion = '1.7.3';\r\nconst LOG_TAG$9 = 'Connection';\r\nconst X_GOOG_API_CLIENT_VALUE = `gl-node/${process.versions.node} fire/${SDK_VERSION} grpc/${grpcVersion}`;\r\nfunction createMetadata(databasePath, authToken, appCheckToken, appId) {\r\n hardAssert(authToken === null || authToken.type === 'OAuth');\r\n const metadata = new grpc.Metadata();\r\n if (authToken) {\r\n authToken.headers.forEach((value, key) => metadata.set(key, value));\r\n }\r\n if (appCheckToken) {\r\n appCheckToken.headers.forEach((value, key) => metadata.set(key, value));\r\n }\r\n if (appId) {\r\n metadata.set('X-Firebase-GMPID', appId);\r\n }\r\n metadata.set('X-Goog-Api-Client', X_GOOG_API_CLIENT_VALUE);\r\n // These headers are used to improve routing and project isolation by the\r\n // backend.\r\n // TODO(b/199767712): We are keeping 'Google-Cloud-Resource-Prefix' until Emulators can be\r\n // released with cl/428820046. Currently blocked because Emulators are now built with Java\r\n // 11 from Google3.\r\n metadata.set('Google-Cloud-Resource-Prefix', databasePath);\r\n metadata.set('x-goog-request-params', databasePath);\r\n return metadata;\r\n}\r\n/**\r\n * A Connection implemented by GRPC-Node.\r\n */\r\nclass GrpcConnection {\r\n constructor(protos, databaseInfo) {\r\n this.databaseInfo = databaseInfo;\r\n // We cache stubs for the most-recently-used token.\r\n this.cachedStub = null;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.firestore = protos['google']['firestore']['v1'];\r\n this.databasePath = `projects/${databaseInfo.databaseId.projectId}/databases/${databaseInfo.databaseId.database}`;\r\n }\r\n get shouldResourcePathBeIncludedInRequest() {\r\n // Both `invokeRPC()` and `invokeStreamingRPC()` ignore their `path` arguments, and expect\r\n // the \"path\" to be part of the given `request`.\r\n return true;\r\n }\r\n ensureActiveStub() {\r\n if (!this.cachedStub) {\r\n logDebug(LOG_TAG$9, 'Creating Firestore stub.');\r\n const credentials = this.databaseInfo.ssl\r\n ? grpc.credentials.createSsl()\r\n : grpc.credentials.createInsecure();\r\n this.cachedStub = new this.firestore.Firestore(this.databaseInfo.host, credentials);\r\n }\r\n return this.cachedStub;\r\n }\r\n invokeRPC(rpcName, path, request, authToken, appCheckToken) {\r\n const stub = this.ensureActiveStub();\r\n const metadata = createMetadata(this.databasePath, authToken, appCheckToken, this.databaseInfo.appId);\r\n const jsonRequest = Object.assign({ database: this.databasePath }, request);\r\n return nodePromise((callback) => {\r\n logDebug(LOG_TAG$9, `RPC '${rpcName}' invoked with request:`, request);\r\n return stub[rpcName](jsonRequest, metadata, (grpcError, value) => {\r\n if (grpcError) {\r\n logDebug(LOG_TAG$9, `RPC '${rpcName}' failed with error:`, grpcError);\r\n callback(new FirestoreError(mapCodeFromRpcCode(grpcError.code), grpcError.message));\r\n }\r\n else {\r\n logDebug(LOG_TAG$9, `RPC '${rpcName}' completed with response:`, value);\r\n callback(undefined, value);\r\n }\r\n });\r\n });\r\n }\r\n invokeStreamingRPC(rpcName, path, request, authToken, appCheckToken, expectedResponseCount) {\r\n const results = [];\r\n const responseDeferred = new Deferred();\r\n logDebug(LOG_TAG$9, `RPC '${rpcName}' invoked (streaming) with request:`, request);\r\n const stub = this.ensureActiveStub();\r\n const metadata = createMetadata(this.databasePath, authToken, appCheckToken, this.databaseInfo.appId);\r\n const jsonRequest = Object.assign(Object.assign({}, request), { database: this.databasePath });\r\n const stream = stub[rpcName](jsonRequest, metadata);\r\n let callbackFired = false;\r\n stream.on('data', (response) => {\r\n logDebug(LOG_TAG$9, `RPC ${rpcName} received result:`, response);\r\n results.push(response);\r\n if (expectedResponseCount !== undefined &&\r\n results.length === expectedResponseCount) {\r\n callbackFired = true;\r\n responseDeferred.resolve(results);\r\n }\r\n });\r\n stream.on('end', () => {\r\n logDebug(LOG_TAG$9, `RPC '${rpcName}' completed.`);\r\n if (!callbackFired) {\r\n callbackFired = true;\r\n responseDeferred.resolve(results);\r\n }\r\n });\r\n stream.on('error', (grpcError) => {\r\n logDebug(LOG_TAG$9, `RPC '${rpcName}' failed with error:`, grpcError);\r\n const code = mapCodeFromRpcCode(grpcError.code);\r\n responseDeferred.reject(new FirestoreError(code, grpcError.message));\r\n });\r\n return responseDeferred.promise;\r\n }\r\n // TODO(mikelehen): This \"method\" is a monster. Should be refactored.\r\n openStream(rpcName, authToken, appCheckToken) {\r\n const stub = this.ensureActiveStub();\r\n const metadata = createMetadata(this.databasePath, authToken, appCheckToken, this.databaseInfo.appId);\r\n const grpcStream = stub[rpcName](metadata);\r\n let closed = false;\r\n const close = (err) => {\r\n if (!closed) {\r\n closed = true;\r\n stream.callOnClose(err);\r\n grpcStream.end();\r\n }\r\n };\r\n const stream = new StreamBridge({\r\n sendFn: (msg) => {\r\n if (!closed) {\r\n logDebug(LOG_TAG$9, 'GRPC stream sending:', msg);\r\n try {\r\n grpcStream.write(msg);\r\n }\r\n catch (e) {\r\n // This probably means we didn't conform to the proto. Make sure to\r\n // log the message we sent.\r\n logError('Failure sending:', msg);\r\n logError('Error:', e);\r\n throw e;\r\n }\r\n }\r\n else {\r\n logDebug(LOG_TAG$9, 'Not sending because gRPC stream is closed:', msg);\r\n }\r\n },\r\n closeFn: () => {\r\n logDebug(LOG_TAG$9, 'GRPC stream closed locally via close().');\r\n close();\r\n }\r\n });\r\n grpcStream.on('data', (msg) => {\r\n if (!closed) {\r\n logDebug(LOG_TAG$9, 'GRPC stream received:', msg);\r\n stream.callOnMessage(msg);\r\n }\r\n });\r\n grpcStream.on('end', () => {\r\n logDebug(LOG_TAG$9, 'GRPC stream ended.');\r\n close();\r\n });\r\n grpcStream.on('error', (grpcError) => {\r\n if (!closed) {\r\n logWarn(LOG_TAG$9, 'GRPC stream error. Code:', grpcError.code, 'Message:', grpcError.message);\r\n const code = mapCodeFromRpcCode(grpcError.code);\r\n close(new FirestoreError(code, grpcError.message));\r\n }\r\n });\r\n logDebug(LOG_TAG$9, 'Opening GRPC stream');\r\n // TODO(dimond): Since grpc has no explicit open status (or does it?) we\r\n // simulate an onOpen in the next loop after the stream had it's listeners\r\n // registered\r\n setTimeout(() => {\r\n stream.callOnOpen();\r\n }, 0);\r\n return stream;\r\n }\r\n}\n\nconst nested = {\n\tgoogle: {\n\t\tnested: {\n\t\t\tprotobuf: {\n\t\t\t\toptions: {\n\t\t\t\t\tcsharp_namespace: \"Google.Protobuf.WellKnownTypes\",\n\t\t\t\t\tgo_package: \"github.com/golang/protobuf/ptypes/wrappers\",\n\t\t\t\t\tjava_package: \"com.google.protobuf\",\n\t\t\t\t\tjava_outer_classname: \"WrappersProto\",\n\t\t\t\t\tjava_multiple_files: true,\n\t\t\t\t\tobjc_class_prefix: \"GPB\",\n\t\t\t\t\tcc_enable_arenas: true,\n\t\t\t\t\toptimize_for: \"SPEED\"\n\t\t\t\t},\n\t\t\t\tnested: {\n\t\t\t\t\tTimestamp: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tseconds: {\n\t\t\t\t\t\t\t\ttype: \"int64\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnanos: {\n\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tFileDescriptorSet: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tfile: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"FileDescriptorProto\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tFileDescriptorProto: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"package\": {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdependency: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpublicDependency: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\tid: 10,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tpacked: false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tweakDependency: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\tid: 11,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tpacked: false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmessageType: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"DescriptorProto\",\n\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tenumType: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"EnumDescriptorProto\",\n\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tservice: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"ServiceDescriptorProto\",\n\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"FieldDescriptorProto\",\n\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\ttype: \"FileOptions\",\n\t\t\t\t\t\t\t\tid: 8\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsourceCodeInfo: {\n\t\t\t\t\t\t\t\ttype: \"SourceCodeInfo\",\n\t\t\t\t\t\t\t\tid: 9\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsyntax: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 12\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tDescriptorProto: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfield: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"FieldDescriptorProto\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"FieldDescriptorProto\",\n\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnestedType: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"DescriptorProto\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tenumType: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"EnumDescriptorProto\",\n\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\textensionRange: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"ExtensionRange\",\n\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toneofDecl: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"OneofDescriptorProto\",\n\t\t\t\t\t\t\t\tid: 8\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\ttype: \"MessageOptions\",\n\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\treservedRange: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"ReservedRange\",\n\t\t\t\t\t\t\t\tid: 9\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\treservedName: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 10\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\tExtensionRange: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tReservedRange: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tFieldDescriptorProto: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnumber: {\n\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tlabel: {\n\t\t\t\t\t\t\t\ttype: \"Label\",\n\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttype: {\n\t\t\t\t\t\t\t\ttype: \"Type\",\n\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttypeName: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\textendee: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdefaultValue: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toneofIndex: {\n\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\tid: 9\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tjsonName: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 10\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\ttype: \"FieldOptions\",\n\t\t\t\t\t\t\t\tid: 8\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\tType: {\n\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\tTYPE_DOUBLE: 1,\n\t\t\t\t\t\t\t\t\tTYPE_FLOAT: 2,\n\t\t\t\t\t\t\t\t\tTYPE_INT64: 3,\n\t\t\t\t\t\t\t\t\tTYPE_UINT64: 4,\n\t\t\t\t\t\t\t\t\tTYPE_INT32: 5,\n\t\t\t\t\t\t\t\t\tTYPE_FIXED64: 6,\n\t\t\t\t\t\t\t\t\tTYPE_FIXED32: 7,\n\t\t\t\t\t\t\t\t\tTYPE_BOOL: 8,\n\t\t\t\t\t\t\t\t\tTYPE_STRING: 9,\n\t\t\t\t\t\t\t\t\tTYPE_GROUP: 10,\n\t\t\t\t\t\t\t\t\tTYPE_MESSAGE: 11,\n\t\t\t\t\t\t\t\t\tTYPE_BYTES: 12,\n\t\t\t\t\t\t\t\t\tTYPE_UINT32: 13,\n\t\t\t\t\t\t\t\t\tTYPE_ENUM: 14,\n\t\t\t\t\t\t\t\t\tTYPE_SFIXED32: 15,\n\t\t\t\t\t\t\t\t\tTYPE_SFIXED64: 16,\n\t\t\t\t\t\t\t\t\tTYPE_SINT32: 17,\n\t\t\t\t\t\t\t\t\tTYPE_SINT64: 18\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tLabel: {\n\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\tLABEL_OPTIONAL: 1,\n\t\t\t\t\t\t\t\t\tLABEL_REQUIRED: 2,\n\t\t\t\t\t\t\t\t\tLABEL_REPEATED: 3\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tOneofDescriptorProto: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\ttype: \"OneofOptions\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tEnumDescriptorProto: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"EnumValueDescriptorProto\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\ttype: \"EnumOptions\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tEnumValueDescriptorProto: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnumber: {\n\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\ttype: \"EnumValueOptions\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tServiceDescriptorProto: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmethod: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"MethodDescriptorProto\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\ttype: \"ServiceOptions\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tMethodDescriptorProto: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tinputType: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toutputType: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\ttype: \"MethodOptions\",\n\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tclientStreaming: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tserverStreaming: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tFileOptions: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tjavaPackage: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tjavaOuterClassname: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 8\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tjavaMultipleFiles: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 10\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tjavaGenerateEqualsAndHash: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 20,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tdeprecated: true\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tjavaStringCheckUtf8: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 27\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\toptimizeFor: {\n\t\t\t\t\t\t\t\ttype: \"OptimizeMode\",\n\t\t\t\t\t\t\t\tid: 9,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\"default\": \"SPEED\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgoPackage: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 11\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tccGenericServices: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 16\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tjavaGenericServices: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 17\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpyGenericServices: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 18\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdeprecated: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 23\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tccEnableArenas: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 31\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tobjcClassPrefix: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 36\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcsharpNamespace: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 37\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tuninterpretedOption: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"UninterpretedOption\",\n\t\t\t\t\t\t\t\tid: 999\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\textensions: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t1000,\n\t\t\t\t\t\t\t\t536870911\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t],\n\t\t\t\t\t\treserved: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t38,\n\t\t\t\t\t\t\t\t38\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t],\n\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\tOptimizeMode: {\n\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\tSPEED: 1,\n\t\t\t\t\t\t\t\t\tCODE_SIZE: 2,\n\t\t\t\t\t\t\t\t\tLITE_RUNTIME: 3\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tMessageOptions: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tmessageSetWireFormat: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnoStandardDescriptorAccessor: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdeprecated: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmapEntry: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tuninterpretedOption: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"UninterpretedOption\",\n\t\t\t\t\t\t\t\tid: 999\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\textensions: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t1000,\n\t\t\t\t\t\t\t\t536870911\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t],\n\t\t\t\t\t\treserved: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t8,\n\t\t\t\t\t\t\t\t8\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tFieldOptions: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tctype: {\n\t\t\t\t\t\t\t\ttype: \"CType\",\n\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\"default\": \"STRING\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpacked: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tjstype: {\n\t\t\t\t\t\t\t\ttype: \"JSType\",\n\t\t\t\t\t\t\t\tid: 6,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\"default\": \"JS_NORMAL\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tlazy: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdeprecated: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tweak: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 10\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tuninterpretedOption: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"UninterpretedOption\",\n\t\t\t\t\t\t\t\tid: 999\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\textensions: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t1000,\n\t\t\t\t\t\t\t\t536870911\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t],\n\t\t\t\t\t\treserved: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t4,\n\t\t\t\t\t\t\t\t4\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t],\n\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\tCType: {\n\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\tSTRING: 0,\n\t\t\t\t\t\t\t\t\tCORD: 1,\n\t\t\t\t\t\t\t\t\tSTRING_PIECE: 2\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJSType: {\n\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\tJS_NORMAL: 0,\n\t\t\t\t\t\t\t\t\tJS_STRING: 1,\n\t\t\t\t\t\t\t\t\tJS_NUMBER: 2\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tOneofOptions: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tuninterpretedOption: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"UninterpretedOption\",\n\t\t\t\t\t\t\t\tid: 999\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\textensions: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t1000,\n\t\t\t\t\t\t\t\t536870911\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tEnumOptions: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tallowAlias: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdeprecated: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tuninterpretedOption: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"UninterpretedOption\",\n\t\t\t\t\t\t\t\tid: 999\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\textensions: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t1000,\n\t\t\t\t\t\t\t\t536870911\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tEnumValueOptions: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tdeprecated: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tuninterpretedOption: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"UninterpretedOption\",\n\t\t\t\t\t\t\t\tid: 999\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\textensions: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t1000,\n\t\t\t\t\t\t\t\t536870911\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tServiceOptions: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tdeprecated: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 33\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tuninterpretedOption: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"UninterpretedOption\",\n\t\t\t\t\t\t\t\tid: 999\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\textensions: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t1000,\n\t\t\t\t\t\t\t\t536870911\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tMethodOptions: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tdeprecated: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 33\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tuninterpretedOption: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"UninterpretedOption\",\n\t\t\t\t\t\t\t\tid: 999\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\textensions: [\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t1000,\n\t\t\t\t\t\t\t\t536870911\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tUninterpretedOption: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"NamePart\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tidentifierValue: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpositiveIntValue: {\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnegativeIntValue: {\n\t\t\t\t\t\t\t\ttype: \"int64\",\n\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdoubleValue: {\n\t\t\t\t\t\t\t\ttype: \"double\",\n\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstringValue: {\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\taggregateValue: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 8\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\tNamePart: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tnamePart: {\n\t\t\t\t\t\t\t\t\t\trule: \"required\",\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tisExtension: {\n\t\t\t\t\t\t\t\t\t\trule: \"required\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tSourceCodeInfo: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tlocation: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"Location\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\tLocation: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tpath: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tspan: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tleadingComments: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttrailingComments: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tleadingDetachedComments: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tGeneratedCodeInfo: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tannotation: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"Annotation\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\tAnnotation: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tpath: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tsourceFile: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tbegin: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tStruct: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\tkeyType: \"string\",\n\t\t\t\t\t\t\t\ttype: \"Value\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tValue: {\n\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\tkind: {\n\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\"nullValue\",\n\t\t\t\t\t\t\t\t\t\"numberValue\",\n\t\t\t\t\t\t\t\t\t\"stringValue\",\n\t\t\t\t\t\t\t\t\t\"boolValue\",\n\t\t\t\t\t\t\t\t\t\"structValue\",\n\t\t\t\t\t\t\t\t\t\"listValue\"\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tnullValue: {\n\t\t\t\t\t\t\t\ttype: \"NullValue\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnumberValue: {\n\t\t\t\t\t\t\t\ttype: \"double\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstringValue: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tboolValue: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstructValue: {\n\t\t\t\t\t\t\t\ttype: \"Struct\",\n\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tlistValue: {\n\t\t\t\t\t\t\t\ttype: \"ListValue\",\n\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tNullValue: {\n\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\tNULL_VALUE: 0\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tListValue: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"Value\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tEmpty: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tDoubleValue: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: \"double\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tFloatValue: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: \"float\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tInt64Value: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: \"int64\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tUInt64Value: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tInt32Value: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tUInt32Value: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: \"uint32\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tBoolValue: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tStringValue: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tBytesValue: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tAny: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\ttypeUrl: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tfirestore: {\n\t\t\t\tnested: {\n\t\t\t\t\tv1: {\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tcsharp_namespace: \"Google.Cloud.Firestore.V1\",\n\t\t\t\t\t\t\tgo_package: \"google.golang.org/genproto/googleapis/firestore/v1;firestore\",\n\t\t\t\t\t\t\tjava_multiple_files: true,\n\t\t\t\t\t\t\tjava_outer_classname: \"WriteProto\",\n\t\t\t\t\t\t\tjava_package: \"com.google.firestore.v1\",\n\t\t\t\t\t\t\tobjc_class_prefix: \"GCFS\",\n\t\t\t\t\t\t\tphp_namespace: \"Google\\\\Cloud\\\\Firestore\\\\V1\",\n\t\t\t\t\t\t\truby_package: \"Google::Cloud::Firestore::V1\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\tAggregationResult: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\taggregateFields: {\n\t\t\t\t\t\t\t\t\t\tkeyType: \"string\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Value\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDocumentMask: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tfieldPaths: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tPrecondition: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\tconditionType: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"exists\",\n\t\t\t\t\t\t\t\t\t\t\t\"updateTime\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\texists: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tupdateTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tTransactionOptions: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\tmode: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"readOnly\",\n\t\t\t\t\t\t\t\t\t\t\t\"readWrite\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\treadOnly: {\n\t\t\t\t\t\t\t\t\t\ttype: \"ReadOnly\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadWrite: {\n\t\t\t\t\t\t\t\t\t\ttype: \"ReadWrite\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\t\t\tReadWrite: {\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\tretryTransaction: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tReadOnly: {\n\t\t\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\t\t\tconsistencySelector: {\n\t\t\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"readTime\"\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDocument: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\tkeyType: \"string\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Value\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcreateTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tupdateTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tValue: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\tvalueType: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"nullValue\",\n\t\t\t\t\t\t\t\t\t\t\t\"booleanValue\",\n\t\t\t\t\t\t\t\t\t\t\t\"integerValue\",\n\t\t\t\t\t\t\t\t\t\t\t\"doubleValue\",\n\t\t\t\t\t\t\t\t\t\t\t\"timestampValue\",\n\t\t\t\t\t\t\t\t\t\t\t\"stringValue\",\n\t\t\t\t\t\t\t\t\t\t\t\"bytesValue\",\n\t\t\t\t\t\t\t\t\t\t\t\"referenceValue\",\n\t\t\t\t\t\t\t\t\t\t\t\"geoPointValue\",\n\t\t\t\t\t\t\t\t\t\t\t\"arrayValue\",\n\t\t\t\t\t\t\t\t\t\t\t\"mapValue\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tnullValue: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.NullValue\",\n\t\t\t\t\t\t\t\t\t\tid: 11\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tbooleanValue: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tintegerValue: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int64\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdoubleValue: {\n\t\t\t\t\t\t\t\t\t\ttype: \"double\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttimestampValue: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 10\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tstringValue: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 17\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tbytesValue: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 18\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treferenceValue: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tgeoPointValue: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.type.LatLng\",\n\t\t\t\t\t\t\t\t\t\tid: 8\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tarrayValue: {\n\t\t\t\t\t\t\t\t\t\ttype: \"ArrayValue\",\n\t\t\t\t\t\t\t\t\t\tid: 9\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tmapValue: {\n\t\t\t\t\t\t\t\t\t\ttype: \"MapValue\",\n\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tArrayValue: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Value\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tMapValue: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\tkeyType: \"string\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Value\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tFirestore: {\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\"(google.api.default_host)\": \"firestore.googleapis.com\",\n\t\t\t\t\t\t\t\t\t\"(google.api.oauth_scopes)\": \"https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/datastore\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmethods: {\n\t\t\t\t\t\t\t\t\tGetDocument: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"GetDocumentRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"Document\",\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).get\": \"/v1/{name=projects/*/databases/*/documents/*/**}\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tget: \"/v1/{name=projects/*/databases/*/documents/*/**}\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tListDocuments: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"ListDocumentsRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"ListDocumentsResponse\",\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).get\": \"/v1/{parent=projects/*/databases/*/documents/*/**}/{collection_id}\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tget: \"/v1/{parent=projects/*/databases/*/documents/*/**}/{collection_id}\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tUpdateDocument: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"UpdateDocumentRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"Document\",\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).patch\": \"/v1/{document.name=projects/*/databases/*/documents/*/**}\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"document\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.method_signature)\": \"document,update_mask\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpatch: \"/v1/{document.name=projects/*/databases/*/documents/*/**}\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"document\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.method_signature)\": \"document,update_mask\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tDeleteDocument: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"DeleteDocumentRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"google.protobuf.Empty\",\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).delete\": \"/v1/{name=projects/*/databases/*/documents/*/**}\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.method_signature)\": \"name\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"delete\": \"/v1/{name=projects/*/databases/*/documents/*/**}\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.method_signature)\": \"name\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBatchGetDocuments: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"BatchGetDocumentsRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"BatchGetDocumentsResponse\",\n\t\t\t\t\t\t\t\t\t\tresponseStream: true,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).post\": \"/v1/{database=projects/*/databases/*}/documents:batchGet\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"*\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{database=projects/*/databases/*}/documents:batchGet\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBeginTransaction: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"BeginTransactionRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"BeginTransactionResponse\",\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).post\": \"/v1/{database=projects/*/databases/*}/documents:beginTransaction\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"*\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.method_signature)\": \"database\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{database=projects/*/databases/*}/documents:beginTransaction\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.method_signature)\": \"database\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tCommit: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"CommitRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"CommitResponse\",\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).post\": \"/v1/{database=projects/*/databases/*}/documents:commit\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"*\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.method_signature)\": \"database,writes\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{database=projects/*/databases/*}/documents:commit\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.method_signature)\": \"database,writes\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tRollback: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"RollbackRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"google.protobuf.Empty\",\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).post\": \"/v1/{database=projects/*/databases/*}/documents:rollback\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"*\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.method_signature)\": \"database,transaction\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{database=projects/*/databases/*}/documents:rollback\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.method_signature)\": \"database,transaction\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tRunQuery: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"RunQueryRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"RunQueryResponse\",\n\t\t\t\t\t\t\t\t\t\tresponseStream: true,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).post\": \"/v1/{parent=projects/*/databases/*/documents}:runQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"*\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).additional_bindings.post\": \"/v1/{parent=projects/*/databases/*/documents/*/**}:runQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).additional_bindings.body\": \"*\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{parent=projects/*/databases/*/documents}:runQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tadditional_bindings: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{parent=projects/*/databases/*/documents/*/**}:runQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tRunAggregationQuery: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"RunAggregationQueryRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"RunAggregationQueryResponse\",\n\t\t\t\t\t\t\t\t\t\tresponseStream: true,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).post\": \"/v1/{parent=projects/*/databases/*/documents}:runAggregationQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"*\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).additional_bindings.post\": \"/v1/{parent=projects/*/databases/*/documents/*/**}:runAggregationQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).additional_bindings.body\": \"*\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{parent=projects/*/databases/*/documents}:runAggregationQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tadditional_bindings: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{parent=projects/*/databases/*/documents/*/**}:runAggregationQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tPartitionQuery: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"PartitionQueryRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"PartitionQueryResponse\",\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).post\": \"/v1/{parent=projects/*/databases/*/documents}:partitionQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"*\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).additional_bindings.post\": \"/v1/{parent=projects/*/databases/*/documents/*/**}:partitionQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).additional_bindings.body\": \"*\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{parent=projects/*/databases/*/documents}:partitionQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tadditional_bindings: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{parent=projects/*/databases/*/documents/*/**}:partitionQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tWrite: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"WriteRequest\",\n\t\t\t\t\t\t\t\t\t\trequestStream: true,\n\t\t\t\t\t\t\t\t\t\tresponseType: \"WriteResponse\",\n\t\t\t\t\t\t\t\t\t\tresponseStream: true,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).post\": \"/v1/{database=projects/*/databases/*}/documents:write\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"*\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{database=projects/*/databases/*}/documents:write\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tListen: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"ListenRequest\",\n\t\t\t\t\t\t\t\t\t\trequestStream: true,\n\t\t\t\t\t\t\t\t\t\tresponseType: \"ListenResponse\",\n\t\t\t\t\t\t\t\t\t\tresponseStream: true,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).post\": \"/v1/{database=projects/*/databases/*}/documents:listen\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"*\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{database=projects/*/databases/*}/documents:listen\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tListCollectionIds: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"ListCollectionIdsRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"ListCollectionIdsResponse\",\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).post\": \"/v1/{parent=projects/*/databases/*/documents}:listCollectionIds\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"*\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).additional_bindings.post\": \"/v1/{parent=projects/*/databases/*/documents/*/**}:listCollectionIds\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).additional_bindings.body\": \"*\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.method_signature)\": \"parent\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{parent=projects/*/databases/*/documents}:listCollectionIds\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tadditional_bindings: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{parent=projects/*/databases/*/documents/*/**}:listCollectionIds\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.method_signature)\": \"parent\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tBatchWrite: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"BatchWriteRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"BatchWriteResponse\",\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).post\": \"/v1/{database=projects/*/databases/*}/documents:batchWrite\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"*\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{database=projects/*/databases/*}/documents:batchWrite\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"*\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tCreateDocument: {\n\t\t\t\t\t\t\t\t\t\trequestType: \"CreateDocumentRequest\",\n\t\t\t\t\t\t\t\t\t\tresponseType: \"Document\",\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).post\": \"/v1/{parent=projects/*/databases/*/documents/**}/{collection_id}\",\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http).body\": \"document\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tparsedOptions: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"(google.api.http)\": {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpost: \"/v1/{parent=projects/*/databases/*/documents/**}/{collection_id}\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tbody: \"document\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tGetDocumentRequest: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\tconsistencySelector: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"transaction\",\n\t\t\t\t\t\t\t\t\t\t\t\"readTime\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tmask: {\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentMask\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tListDocumentsRequest: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\tconsistencySelector: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"transaction\",\n\t\t\t\t\t\t\t\t\t\t\t\"readTime\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tparent: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcollectionId: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 2,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tpageSize: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tpageToken: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\torderBy: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tmask: {\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentMask\",\n\t\t\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 8\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 10\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tshowMissing: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\t\t\tid: 12\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tListDocumentsResponse: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdocuments: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Document\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tnextPageToken: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tCreateDocumentRequest: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tparent: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcollectionId: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 2,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdocumentId: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Document\",\n\t\t\t\t\t\t\t\t\t\tid: 4,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tmask: {\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentMask\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tUpdateDocumentRequest: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Document\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tupdateMask: {\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentMask\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tmask: {\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentMask\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcurrentDocument: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Precondition\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDeleteDocumentRequest: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tname: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcurrentDocument: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Precondition\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBatchGetDocumentsRequest: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\tconsistencySelector: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"transaction\",\n\t\t\t\t\t\t\t\t\t\t\t\"newTransaction\",\n\t\t\t\t\t\t\t\t\t\t\t\"readTime\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdatabase: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdocuments: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tmask: {\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentMask\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tnewTransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"TransactionOptions\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBatchGetDocumentsResponse: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"found\",\n\t\t\t\t\t\t\t\t\t\t\t\"missing\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tfound: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Document\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tmissing: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBeginTransactionRequest: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdatabase: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\ttype: \"TransactionOptions\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBeginTransactionResponse: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\ttransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tCommitRequest: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdatabase: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\twrites: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Write\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tCommitResponse: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\twriteResults: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"WriteResult\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcommitTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRollbackRequest: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdatabase: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 2,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRunQueryRequest: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\tqueryType: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"structuredQuery\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tconsistencySelector: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"transaction\",\n\t\t\t\t\t\t\t\t\t\t\t\"newTransaction\",\n\t\t\t\t\t\t\t\t\t\t\t\"readTime\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tparent: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tstructuredQuery: {\n\t\t\t\t\t\t\t\t\t\ttype: \"StructuredQuery\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tnewTransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"TransactionOptions\",\n\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRunQueryResponse: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\ttransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Document\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tskippedResults: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRunAggregationQueryRequest: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\tqueryType: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"structuredAggregationQuery\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tconsistencySelector: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"transaction\",\n\t\t\t\t\t\t\t\t\t\t\t\"newTransaction\",\n\t\t\t\t\t\t\t\t\t\t\t\"readTime\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tparent: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tstructuredAggregationQuery: {\n\t\t\t\t\t\t\t\t\t\ttype: \"StructuredAggregationQuery\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tnewTransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"TransactionOptions\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRunAggregationQueryResponse: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\t\t\t\ttype: \"AggregationResult\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttransaction: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tPartitionQueryRequest: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\tqueryType: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"structuredQuery\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tparent: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tstructuredQuery: {\n\t\t\t\t\t\t\t\t\t\ttype: \"StructuredQuery\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tpartitionCount: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int64\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tpageToken: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tpageSize: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tPartitionQueryResponse: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tpartitions: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Cursor\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tnextPageToken: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tWriteRequest: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdatabase: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tstreamId: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\twrites: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Write\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tstreamToken: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tlabels: {\n\t\t\t\t\t\t\t\t\t\tkeyType: \"string\",\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tWriteResponse: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tstreamId: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tstreamToken: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\twriteResults: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"WriteResult\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcommitTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tListenRequest: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\ttargetChange: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"addTarget\",\n\t\t\t\t\t\t\t\t\t\t\t\"removeTarget\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdatabase: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\taddTarget: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Target\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tremoveTarget: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tlabels: {\n\t\t\t\t\t\t\t\t\t\tkeyType: \"string\",\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tListenResponse: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\tresponseType: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"targetChange\",\n\t\t\t\t\t\t\t\t\t\t\t\"documentChange\",\n\t\t\t\t\t\t\t\t\t\t\t\"documentDelete\",\n\t\t\t\t\t\t\t\t\t\t\t\"documentRemove\",\n\t\t\t\t\t\t\t\t\t\t\t\"filter\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\ttargetChange: {\n\t\t\t\t\t\t\t\t\t\ttype: \"TargetChange\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdocumentChange: {\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentChange\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdocumentDelete: {\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentDelete\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdocumentRemove: {\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentRemove\",\n\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\ttype: \"ExistenceFilter\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tTarget: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\ttargetType: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"query\",\n\t\t\t\t\t\t\t\t\t\t\t\"documents\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tresumeType: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"resumeToken\",\n\t\t\t\t\t\t\t\t\t\t\t\"readTime\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\t\t\t\ttype: \"QueryTarget\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdocuments: {\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentsTarget\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tresumeToken: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 11\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttargetId: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tonce: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\t\t\tDocumentsTarget: {\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\tdocuments: {\n\t\t\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tQueryTarget: {\n\t\t\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\t\t\tqueryType: {\n\t\t\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"structuredQuery\"\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\tparent: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tstructuredQuery: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"StructuredQuery\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tTargetChange: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\ttargetChangeType: {\n\t\t\t\t\t\t\t\t\t\ttype: \"TargetChangeType\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttargetIds: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcause: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.rpc.Status\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tresumeToken: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\t\t\tTargetChangeType: {\n\t\t\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\t\t\tNO_CHANGE: 0,\n\t\t\t\t\t\t\t\t\t\t\tADD: 1,\n\t\t\t\t\t\t\t\t\t\t\tREMOVE: 2,\n\t\t\t\t\t\t\t\t\t\t\tCURRENT: 3,\n\t\t\t\t\t\t\t\t\t\t\tRESET: 4\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tListCollectionIdsRequest: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tparent: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tpageSize: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tpageToken: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tListCollectionIdsResponse: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tcollectionIds: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tnextPageToken: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBatchWriteRequest: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdatabase: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\t\t\"(google.api.field_behavior)\": \"REQUIRED\"\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\twrites: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Write\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tlabels: {\n\t\t\t\t\t\t\t\t\t\tkeyType: \"string\",\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tBatchWriteResponse: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\twriteResults: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"WriteResult\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tstatus: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"google.rpc.Status\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tStructuredQuery: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tselect: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Projection\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tfrom: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"CollectionSelector\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\twhere: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Filter\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\torderBy: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Order\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tstartAt: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Cursor\",\n\t\t\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tendAt: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Cursor\",\n\t\t\t\t\t\t\t\t\t\tid: 8\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\toffset: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tlimit: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Int32Value\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\t\t\tCollectionSelector: {\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\tcollectionId: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tallDescendants: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tFilter: {\n\t\t\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\t\t\tfilterType: {\n\t\t\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"compositeFilter\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"fieldFilter\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"unaryFilter\"\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\tcompositeFilter: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"CompositeFilter\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tfieldFilter: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"FieldFilter\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tunaryFilter: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"UnaryFilter\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tCompositeFilter: {\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\top: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Operator\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tfilters: {\n\t\t\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Filter\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\t\t\t\t\tOperator: {\n\t\t\t\t\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tOPERATOR_UNSPECIFIED: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tAND: 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\tOR: 2\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tFieldFilter: {\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\tfield: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"FieldReference\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\top: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Operator\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Value\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\t\t\t\t\tOperator: {\n\t\t\t\t\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tOPERATOR_UNSPECIFIED: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tLESS_THAN: 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\tLESS_THAN_OR_EQUAL: 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\tGREATER_THAN: 3,\n\t\t\t\t\t\t\t\t\t\t\t\t\tGREATER_THAN_OR_EQUAL: 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\tEQUAL: 5,\n\t\t\t\t\t\t\t\t\t\t\t\t\tNOT_EQUAL: 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\tARRAY_CONTAINS: 7,\n\t\t\t\t\t\t\t\t\t\t\t\t\tIN: 8,\n\t\t\t\t\t\t\t\t\t\t\t\t\tARRAY_CONTAINS_ANY: 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\tNOT_IN: 10\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tUnaryFilter: {\n\t\t\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\t\t\toperandType: {\n\t\t\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"field\"\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\top: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Operator\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tfield: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"FieldReference\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\t\t\t\t\tOperator: {\n\t\t\t\t\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tOPERATOR_UNSPECIFIED: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tIS_NAN: 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\tIS_NULL: 3,\n\t\t\t\t\t\t\t\t\t\t\t\t\tIS_NOT_NAN: 4,\n\t\t\t\t\t\t\t\t\t\t\t\t\tIS_NOT_NULL: 5\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tOrder: {\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\tfield: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"FieldReference\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tdirection: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Direction\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tFieldReference: {\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\tfieldPath: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tProjection: {\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"FieldReference\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tDirection: {\n\t\t\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\t\t\tDIRECTION_UNSPECIFIED: 0,\n\t\t\t\t\t\t\t\t\t\t\tASCENDING: 1,\n\t\t\t\t\t\t\t\t\t\t\tDESCENDING: 2\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tStructuredAggregationQuery: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\tqueryType: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"structuredQuery\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tstructuredQuery: {\n\t\t\t\t\t\t\t\t\t\ttype: \"StructuredQuery\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\taggregations: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Aggregation\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\t\t\tAggregation: {\n\t\t\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\t\t\toperator: {\n\t\t\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"count\"\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\tcount: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Count\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\talias: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\t\t\t\t\tCount: {\n\t\t\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tupTo: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Int64Value\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tCursor: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Value\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tbefore: {\n\t\t\t\t\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tWrite: {\n\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\toperation: {\n\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\"update\",\n\t\t\t\t\t\t\t\t\t\t\t\"delete\",\n\t\t\t\t\t\t\t\t\t\t\t\"verify\",\n\t\t\t\t\t\t\t\t\t\t\t\"transform\"\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tupdate: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Document\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"delete\": {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tverify: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttransform: {\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentTransform\",\n\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tupdateMask: {\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentMask\",\n\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tupdateTransforms: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"DocumentTransform.FieldTransform\",\n\t\t\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcurrentDocument: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Precondition\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDocumentTransform: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tfieldTransforms: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"FieldTransform\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\t\t\tFieldTransform: {\n\t\t\t\t\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\t\t\t\t\ttransformType: {\n\t\t\t\t\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"setToServerValue\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"increment\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"maximum\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"minimum\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"appendMissingElements\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"removeAllFromArray\"\n\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\t\t\tfieldPath: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tsetToServerValue: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"ServerValue\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tincrement: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Value\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tmaximum: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Value\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tminimum: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Value\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tappendMissingElements: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"ArrayValue\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tremoveAllFromArray: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"ArrayValue\",\n\t\t\t\t\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tnested: {\n\t\t\t\t\t\t\t\t\t\t\tServerValue: {\n\t\t\t\t\t\t\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tSERVER_VALUE_UNSPECIFIED: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tREQUEST_TIME: 1\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tWriteResult: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tupdateTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttransformResults: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"Value\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDocumentChange: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\ttype: \"Document\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttargetIds: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tremovedTargetIds: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDocumentDelete: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tremovedTargetIds: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDocumentRemove: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tremovedTargetIds: {\n\t\t\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\treadTime: {\n\t\t\t\t\t\t\t\t\t\ttype: \"google.protobuf.Timestamp\",\n\t\t\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tExistenceFilter: {\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\ttargetId: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcount: {\n\t\t\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tapi: {\n\t\t\t\toptions: {\n\t\t\t\t\tgo_package: \"google.golang.org/genproto/googleapis/api/annotations;annotations\",\n\t\t\t\t\tjava_multiple_files: true,\n\t\t\t\t\tjava_outer_classname: \"HttpProto\",\n\t\t\t\t\tjava_package: \"com.google.api\",\n\t\t\t\t\tobjc_class_prefix: \"GAPI\",\n\t\t\t\t\tcc_enable_arenas: true\n\t\t\t\t},\n\t\t\t\tnested: {\n\t\t\t\t\thttp: {\n\t\t\t\t\t\ttype: \"HttpRule\",\n\t\t\t\t\t\tid: 72295728,\n\t\t\t\t\t\textend: \"google.protobuf.MethodOptions\"\n\t\t\t\t\t},\n\t\t\t\t\tHttp: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\trules: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"HttpRule\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tHttpRule: {\n\t\t\t\t\t\toneofs: {\n\t\t\t\t\t\t\tpattern: {\n\t\t\t\t\t\t\t\toneof: [\n\t\t\t\t\t\t\t\t\t\"get\",\n\t\t\t\t\t\t\t\t\t\"put\",\n\t\t\t\t\t\t\t\t\t\"post\",\n\t\t\t\t\t\t\t\t\t\"delete\",\n\t\t\t\t\t\t\t\t\t\"patch\",\n\t\t\t\t\t\t\t\t\t\"custom\"\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tget: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tput: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpost: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 4\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"delete\": {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 5\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpatch: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 6\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcustom: {\n\t\t\t\t\t\t\t\ttype: \"CustomHttpPattern\",\n\t\t\t\t\t\t\t\tid: 8\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tselector: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 7\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tadditionalBindings: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"HttpRule\",\n\t\t\t\t\t\t\t\tid: 11\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tCustomHttpPattern: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tkind: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpath: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tmethodSignature: {\n\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tid: 1051,\n\t\t\t\t\t\textend: \"google.protobuf.MethodOptions\"\n\t\t\t\t\t},\n\t\t\t\t\tdefaultHost: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tid: 1049,\n\t\t\t\t\t\textend: \"google.protobuf.ServiceOptions\"\n\t\t\t\t\t},\n\t\t\t\t\toauthScopes: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tid: 1050,\n\t\t\t\t\t\textend: \"google.protobuf.ServiceOptions\"\n\t\t\t\t\t},\n\t\t\t\t\tfieldBehavior: {\n\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\ttype: \"google.api.FieldBehavior\",\n\t\t\t\t\t\tid: 1052,\n\t\t\t\t\t\textend: \"google.protobuf.FieldOptions\"\n\t\t\t\t\t},\n\t\t\t\t\tFieldBehavior: {\n\t\t\t\t\t\tvalues: {\n\t\t\t\t\t\t\tFIELD_BEHAVIOR_UNSPECIFIED: 0,\n\t\t\t\t\t\t\tOPTIONAL: 1,\n\t\t\t\t\t\t\tREQUIRED: 2,\n\t\t\t\t\t\t\tOUTPUT_ONLY: 3,\n\t\t\t\t\t\t\tINPUT_ONLY: 4,\n\t\t\t\t\t\t\tIMMUTABLE: 5,\n\t\t\t\t\t\t\tUNORDERED_LIST: 6,\n\t\t\t\t\t\t\tNON_EMPTY_DEFAULT: 7\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttype: {\n\t\t\t\toptions: {\n\t\t\t\t\tcc_enable_arenas: true,\n\t\t\t\t\tgo_package: \"google.golang.org/genproto/googleapis/type/latlng;latlng\",\n\t\t\t\t\tjava_multiple_files: true,\n\t\t\t\t\tjava_outer_classname: \"LatLngProto\",\n\t\t\t\t\tjava_package: \"com.google.type\",\n\t\t\t\t\tobjc_class_prefix: \"GTP\"\n\t\t\t\t},\n\t\t\t\tnested: {\n\t\t\t\t\tLatLng: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tlatitude: {\n\t\t\t\t\t\t\t\ttype: \"double\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tlongitude: {\n\t\t\t\t\t\t\t\ttype: \"double\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\trpc: {\n\t\t\t\toptions: {\n\t\t\t\t\tcc_enable_arenas: true,\n\t\t\t\t\tgo_package: \"google.golang.org/genproto/googleapis/rpc/status;status\",\n\t\t\t\t\tjava_multiple_files: true,\n\t\t\t\t\tjava_outer_classname: \"StatusProto\",\n\t\t\t\t\tjava_package: \"com.google.rpc\",\n\t\t\t\t\tobjc_class_prefix: \"RPC\"\n\t\t\t\t},\n\t\t\t\tnested: {\n\t\t\t\t\tStatus: {\n\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\tcode: {\n\t\t\t\t\t\t\t\ttype: \"int32\",\n\t\t\t\t\t\t\t\tid: 1\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmessage: {\n\t\t\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\t\t\tid: 2\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\t\trule: \"repeated\",\n\t\t\t\t\t\t\t\ttype: \"google.protobuf.Any\",\n\t\t\t\t\t\t\t\tid: 3\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\nvar protos = {\n\tnested: nested\n};\n\nvar protos$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n nested: nested,\n 'default': protos\n});\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Used by tests so we can match @grpc/proto-loader behavior. */\r\nconst protoLoaderOptions = {\r\n longs: String,\r\n enums: String,\r\n defaults: true,\r\n oneofs: false\r\n};\r\n/**\r\n * Loads the protocol buffer definitions for Firestore.\r\n *\r\n * @returns The GrpcObject representing our protos.\r\n */\r\nfunction loadProtos() {\r\n const packageDefinition = protoLoader.fromJSON(protos$1, protoLoaderOptions);\r\n return grpc.loadPackageDefinition(packageDefinition);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Loads the GRPC stack */\r\nfunction newConnection(databaseInfo) {\r\n const protos = loadProtos();\r\n return new GrpcConnection(protos, databaseInfo);\r\n}\r\n/** Return the Platform-specific connectivity monitor. */\r\nfunction newConnectivityMonitor() {\r\n return new NoopConnectivityMonitor();\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** The Platform's 'window' implementation or null if not available. */\r\nfunction getWindow() {\r\n if (process.env.USE_MOCK_PERSISTENCE === 'YES') {\r\n // eslint-disable-next-line no-restricted-globals\r\n return window;\r\n }\r\n return null;\r\n}\r\n/** The Platform's 'document' implementation or null if not available. */\r\nfunction getDocument() {\r\n return null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newSerializer(databaseId) {\r\n return new JsonProtoSerializer(databaseId, /* useProto3Json= */ false);\r\n}\r\n/**\r\n * An instance of the Platform's 'TextEncoder' implementation.\r\n */\r\nfunction newTextEncoder() {\r\n return new TextEncoder();\r\n}\r\n/**\r\n * An instance of the Platform's 'TextDecoder' implementation.\r\n */\r\nfunction newTextDecoder() {\r\n return new TextDecoder('utf-8');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$8 = 'ExponentialBackoff';\r\n/**\r\n * Initial backoff time in milliseconds after an error.\r\n * Set to 1s according to https://cloud.google.com/apis/design/errors.\r\n */\r\nconst DEFAULT_BACKOFF_INITIAL_DELAY_MS = 1000;\r\nconst DEFAULT_BACKOFF_FACTOR = 1.5;\r\n/** Maximum backoff time in milliseconds */\r\nconst DEFAULT_BACKOFF_MAX_DELAY_MS = 60 * 1000;\r\n/**\r\n * A helper for running delayed tasks following an exponential backoff curve\r\n * between attempts.\r\n *\r\n * Each delay is made up of a \"base\" delay which follows the exponential\r\n * backoff curve, and a +/- 50% \"jitter\" that is calculated and added to the\r\n * base delay. This prevents clients from accidentally synchronizing their\r\n * delays causing spikes of load to the backend.\r\n */\r\nclass ExponentialBackoff {\r\n constructor(\r\n /**\r\n * The AsyncQueue to run backoff operations on.\r\n */\r\n queue, \r\n /**\r\n * The ID to use when scheduling backoff operations on the AsyncQueue.\r\n */\r\n timerId, \r\n /**\r\n * The initial delay (used as the base delay on the first retry attempt).\r\n * Note that jitter will still be applied, so the actual delay could be as\r\n * little as 0.5*initialDelayMs.\r\n */\r\n initialDelayMs = DEFAULT_BACKOFF_INITIAL_DELAY_MS, \r\n /**\r\n * The multiplier to use to determine the extended base delay after each\r\n * attempt.\r\n */\r\n backoffFactor = DEFAULT_BACKOFF_FACTOR, \r\n /**\r\n * The maximum base delay after which no further backoff is performed.\r\n * Note that jitter will still be applied, so the actual delay could be as\r\n * much as 1.5*maxDelayMs.\r\n */\r\n maxDelayMs = DEFAULT_BACKOFF_MAX_DELAY_MS) {\r\n this.queue = queue;\r\n this.timerId = timerId;\r\n this.initialDelayMs = initialDelayMs;\r\n this.backoffFactor = backoffFactor;\r\n this.maxDelayMs = maxDelayMs;\r\n this.currentBaseMs = 0;\r\n this.timerPromise = null;\r\n /** The last backoff attempt, as epoch milliseconds. */\r\n this.lastAttemptTime = Date.now();\r\n this.reset();\r\n }\r\n /**\r\n * Resets the backoff delay.\r\n *\r\n * The very next backoffAndWait() will have no delay. If it is called again\r\n * (i.e. due to an error), initialDelayMs (plus jitter) will be used, and\r\n * subsequent ones will increase according to the backoffFactor.\r\n */\r\n reset() {\r\n this.currentBaseMs = 0;\r\n }\r\n /**\r\n * Resets the backoff delay to the maximum delay (e.g. for use after a\r\n * RESOURCE_EXHAUSTED error).\r\n */\r\n resetToMax() {\r\n this.currentBaseMs = this.maxDelayMs;\r\n }\r\n /**\r\n * Returns a promise that resolves after currentDelayMs, and increases the\r\n * delay for any subsequent attempts. If there was a pending backoff operation\r\n * already, it will be canceled.\r\n */\r\n backoffAndRun(op) {\r\n // Cancel any pending backoff operation.\r\n this.cancel();\r\n // First schedule using the current base (which may be 0 and should be\r\n // honored as such).\r\n const desiredDelayWithJitterMs = Math.floor(this.currentBaseMs + this.jitterDelayMs());\r\n // Guard against lastAttemptTime being in the future due to a clock change.\r\n const delaySoFarMs = Math.max(0, Date.now() - this.lastAttemptTime);\r\n // Guard against the backoff delay already being past.\r\n const remainingDelayMs = Math.max(0, desiredDelayWithJitterMs - delaySoFarMs);\r\n if (remainingDelayMs > 0) {\r\n logDebug(LOG_TAG$8, `Backing off for ${remainingDelayMs} ms ` +\r\n `(base delay: ${this.currentBaseMs} ms, ` +\r\n `delay with jitter: ${desiredDelayWithJitterMs} ms, ` +\r\n `last attempt: ${delaySoFarMs} ms ago)`);\r\n }\r\n this.timerPromise = this.queue.enqueueAfterDelay(this.timerId, remainingDelayMs, () => {\r\n this.lastAttemptTime = Date.now();\r\n return op();\r\n });\r\n // Apply backoff factor to determine next delay and ensure it is within\r\n // bounds.\r\n this.currentBaseMs *= this.backoffFactor;\r\n if (this.currentBaseMs < this.initialDelayMs) {\r\n this.currentBaseMs = this.initialDelayMs;\r\n }\r\n if (this.currentBaseMs > this.maxDelayMs) {\r\n this.currentBaseMs = this.maxDelayMs;\r\n }\r\n }\r\n skipBackoff() {\r\n if (this.timerPromise !== null) {\r\n this.timerPromise.skipDelay();\r\n this.timerPromise = null;\r\n }\r\n }\r\n cancel() {\r\n if (this.timerPromise !== null) {\r\n this.timerPromise.cancel();\r\n this.timerPromise = null;\r\n }\r\n }\r\n /** Returns a random value in the range [-currentBaseMs/2, currentBaseMs/2] */\r\n jitterDelayMs() {\r\n return (Math.random() - 0.5) * this.currentBaseMs;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$7 = 'PersistentStream';\r\n/** The time a stream stays open after it is marked idle. */\r\nconst IDLE_TIMEOUT_MS = 60 * 1000;\r\n/** The time a stream stays open until we consider it healthy. */\r\nconst HEALTHY_TIMEOUT_MS = 10 * 1000;\r\n/**\r\n * A PersistentStream is an abstract base class that represents a streaming RPC\r\n * to the Firestore backend. It's built on top of the connections own support\r\n * for streaming RPCs, and adds several critical features for our clients:\r\n *\r\n * - Exponential backoff on failure\r\n * - Authentication via CredentialsProvider\r\n * - Dispatching all callbacks into the shared worker queue\r\n * - Closing idle streams after 60 seconds of inactivity\r\n *\r\n * Subclasses of PersistentStream implement serialization of models to and\r\n * from the JSON representation of the protocol buffers for a specific\r\n * streaming RPC.\r\n *\r\n * ## Starting and Stopping\r\n *\r\n * Streaming RPCs are stateful and need to be start()ed before messages can\r\n * be sent and received. The PersistentStream will call the onOpen() function\r\n * of the listener once the stream is ready to accept requests.\r\n *\r\n * Should a start() fail, PersistentStream will call the registered onClose()\r\n * listener with a FirestoreError indicating what went wrong.\r\n *\r\n * A PersistentStream can be started and stopped repeatedly.\r\n *\r\n * Generic types:\r\n * SendType: The type of the outgoing message of the underlying\r\n * connection stream\r\n * ReceiveType: The type of the incoming message of the underlying\r\n * connection stream\r\n * ListenerType: The type of the listener that will be used for callbacks\r\n */\r\nclass PersistentStream {\r\n constructor(queue, connectionTimerId, idleTimerId, healthTimerId, connection, authCredentialsProvider, appCheckCredentialsProvider, listener) {\r\n this.queue = queue;\r\n this.idleTimerId = idleTimerId;\r\n this.healthTimerId = healthTimerId;\r\n this.connection = connection;\r\n this.authCredentialsProvider = authCredentialsProvider;\r\n this.appCheckCredentialsProvider = appCheckCredentialsProvider;\r\n this.listener = listener;\r\n this.state = 0 /* PersistentStreamState.Initial */;\r\n /**\r\n * A close count that's incremented every time the stream is closed; used by\r\n * getCloseGuardedDispatcher() to invalidate callbacks that happen after\r\n * close.\r\n */\r\n this.closeCount = 0;\r\n this.idleTimer = null;\r\n this.healthCheck = null;\r\n this.stream = null;\r\n this.backoff = new ExponentialBackoff(queue, connectionTimerId);\r\n }\r\n /**\r\n * Returns true if start() has been called and no error has occurred. True\r\n * indicates the stream is open or in the process of opening (which\r\n * encompasses respecting backoff, getting auth tokens, and starting the\r\n * actual RPC). Use isOpen() to determine if the stream is open and ready for\r\n * outbound requests.\r\n */\r\n isStarted() {\r\n return (this.state === 1 /* PersistentStreamState.Starting */ ||\r\n this.state === 5 /* PersistentStreamState.Backoff */ ||\r\n this.isOpen());\r\n }\r\n /**\r\n * Returns true if the underlying RPC is open (the onOpen() listener has been\r\n * called) and the stream is ready for outbound requests.\r\n */\r\n isOpen() {\r\n return (this.state === 2 /* PersistentStreamState.Open */ ||\r\n this.state === 3 /* PersistentStreamState.Healthy */);\r\n }\r\n /**\r\n * Starts the RPC. Only allowed if isStarted() returns false. The stream is\r\n * not immediately ready for use: onOpen() will be invoked when the RPC is\r\n * ready for outbound requests, at which point isOpen() will return true.\r\n *\r\n * When start returns, isStarted() will return true.\r\n */\r\n start() {\r\n if (this.state === 4 /* PersistentStreamState.Error */) {\r\n this.performBackoff();\r\n return;\r\n }\r\n this.auth();\r\n }\r\n /**\r\n * Stops the RPC. This call is idempotent and allowed regardless of the\r\n * current isStarted() state.\r\n *\r\n * When stop returns, isStarted() and isOpen() will both return false.\r\n */\r\n async stop() {\r\n if (this.isStarted()) {\r\n await this.close(0 /* PersistentStreamState.Initial */);\r\n }\r\n }\r\n /**\r\n * After an error the stream will usually back off on the next attempt to\r\n * start it. If the error warrants an immediate restart of the stream, the\r\n * sender can use this to indicate that the receiver should not back off.\r\n *\r\n * Each error will call the onClose() listener. That function can decide to\r\n * inhibit backoff if required.\r\n */\r\n inhibitBackoff() {\r\n this.state = 0 /* PersistentStreamState.Initial */;\r\n this.backoff.reset();\r\n }\r\n /**\r\n * Marks this stream as idle. If no further actions are performed on the\r\n * stream for one minute, the stream will automatically close itself and\r\n * notify the stream's onClose() handler with Status.OK. The stream will then\r\n * be in a !isStarted() state, requiring the caller to start the stream again\r\n * before further use.\r\n *\r\n * Only streams that are in state 'Open' can be marked idle, as all other\r\n * states imply pending network operations.\r\n */\r\n markIdle() {\r\n // Starts the idle time if we are in state 'Open' and are not yet already\r\n // running a timer (in which case the previous idle timeout still applies).\r\n if (this.isOpen() && this.idleTimer === null) {\r\n this.idleTimer = this.queue.enqueueAfterDelay(this.idleTimerId, IDLE_TIMEOUT_MS, () => this.handleIdleCloseTimer());\r\n }\r\n }\r\n /** Sends a message to the underlying stream. */\r\n sendRequest(msg) {\r\n this.cancelIdleCheck();\r\n this.stream.send(msg);\r\n }\r\n /** Called by the idle timer when the stream should close due to inactivity. */\r\n async handleIdleCloseTimer() {\r\n if (this.isOpen()) {\r\n // When timing out an idle stream there's no reason to force the stream into backoff when\r\n // it restarts so set the stream state to Initial instead of Error.\r\n return this.close(0 /* PersistentStreamState.Initial */);\r\n }\r\n }\r\n /** Marks the stream as active again. */\r\n cancelIdleCheck() {\r\n if (this.idleTimer) {\r\n this.idleTimer.cancel();\r\n this.idleTimer = null;\r\n }\r\n }\r\n /** Cancels the health check delayed operation. */\r\n cancelHealthCheck() {\r\n if (this.healthCheck) {\r\n this.healthCheck.cancel();\r\n this.healthCheck = null;\r\n }\r\n }\r\n /**\r\n * Closes the stream and cleans up as necessary:\r\n *\r\n * * closes the underlying GRPC stream;\r\n * * calls the onClose handler with the given 'error';\r\n * * sets internal stream state to 'finalState';\r\n * * adjusts the backoff timer based on the error\r\n *\r\n * A new stream can be opened by calling start().\r\n *\r\n * @param finalState - the intended state of the stream after closing.\r\n * @param error - the error the connection was closed with.\r\n */\r\n async close(finalState, error) {\r\n // Cancel any outstanding timers (they're guaranteed not to execute).\r\n this.cancelIdleCheck();\r\n this.cancelHealthCheck();\r\n this.backoff.cancel();\r\n // Invalidates any stream-related callbacks (e.g. from auth or the\r\n // underlying stream), guaranteeing they won't execute.\r\n this.closeCount++;\r\n if (finalState !== 4 /* PersistentStreamState.Error */) {\r\n // If this is an intentional close ensure we don't delay our next connection attempt.\r\n this.backoff.reset();\r\n }\r\n else if (error && error.code === Code.RESOURCE_EXHAUSTED) {\r\n // Log the error. (Probably either 'quota exceeded' or 'max queue length reached'.)\r\n logError(error.toString());\r\n logError('Using maximum backoff delay to prevent overloading the backend.');\r\n this.backoff.resetToMax();\r\n }\r\n else if (error &&\r\n error.code === Code.UNAUTHENTICATED &&\r\n this.state !== 3 /* PersistentStreamState.Healthy */) {\r\n // \"unauthenticated\" error means the token was rejected. This should rarely\r\n // happen since both Auth and AppCheck ensure a sufficient TTL when we\r\n // request a token. If a user manually resets their system clock this can\r\n // fail, however. In this case, we should get a Code.UNAUTHENTICATED error\r\n // before we received the first message and we need to invalidate the token\r\n // to ensure that we fetch a new token.\r\n this.authCredentialsProvider.invalidateToken();\r\n this.appCheckCredentialsProvider.invalidateToken();\r\n }\r\n // Clean up the underlying stream because we are no longer interested in events.\r\n if (this.stream !== null) {\r\n this.tearDown();\r\n this.stream.close();\r\n this.stream = null;\r\n }\r\n // This state must be assigned before calling onClose() to allow the callback to\r\n // inhibit backoff or otherwise manipulate the state in its non-started state.\r\n this.state = finalState;\r\n // Notify the listener that the stream closed.\r\n await this.listener.onClose(error);\r\n }\r\n /**\r\n * Can be overridden to perform additional cleanup before the stream is closed.\r\n * Calling super.tearDown() is not required.\r\n */\r\n tearDown() { }\r\n auth() {\r\n this.state = 1 /* PersistentStreamState.Starting */;\r\n const dispatchIfNotClosed = this.getCloseGuardedDispatcher(this.closeCount);\r\n // TODO(mikelehen): Just use dispatchIfNotClosed, but see TODO below.\r\n const closeCount = this.closeCount;\r\n Promise.all([\r\n this.authCredentialsProvider.getToken(),\r\n this.appCheckCredentialsProvider.getToken()\r\n ]).then(([authToken, appCheckToken]) => {\r\n // Stream can be stopped while waiting for authentication.\r\n // TODO(mikelehen): We really should just use dispatchIfNotClosed\r\n // and let this dispatch onto the queue, but that opened a spec test can\r\n // of worms that I don't want to deal with in this PR.\r\n if (this.closeCount === closeCount) {\r\n // Normally we'd have to schedule the callback on the AsyncQueue.\r\n // However, the following calls are safe to be called outside the\r\n // AsyncQueue since they don't chain asynchronous calls\r\n this.startStream(authToken, appCheckToken);\r\n }\r\n }, (error) => {\r\n dispatchIfNotClosed(() => {\r\n const rpcError = new FirestoreError(Code.UNKNOWN, 'Fetching auth token failed: ' + error.message);\r\n return this.handleStreamClose(rpcError);\r\n });\r\n });\r\n }\r\n startStream(authToken, appCheckToken) {\r\n const dispatchIfNotClosed = this.getCloseGuardedDispatcher(this.closeCount);\r\n this.stream = this.startRpc(authToken, appCheckToken);\r\n this.stream.onOpen(() => {\r\n dispatchIfNotClosed(() => {\r\n this.state = 2 /* PersistentStreamState.Open */;\r\n this.healthCheck = this.queue.enqueueAfterDelay(this.healthTimerId, HEALTHY_TIMEOUT_MS, () => {\r\n if (this.isOpen()) {\r\n this.state = 3 /* PersistentStreamState.Healthy */;\r\n }\r\n return Promise.resolve();\r\n });\r\n return this.listener.onOpen();\r\n });\r\n });\r\n this.stream.onClose((error) => {\r\n dispatchIfNotClosed(() => {\r\n return this.handleStreamClose(error);\r\n });\r\n });\r\n this.stream.onMessage((msg) => {\r\n dispatchIfNotClosed(() => {\r\n return this.onMessage(msg);\r\n });\r\n });\r\n }\r\n performBackoff() {\r\n this.state = 5 /* PersistentStreamState.Backoff */;\r\n this.backoff.backoffAndRun(async () => {\r\n this.state = 0 /* PersistentStreamState.Initial */;\r\n this.start();\r\n });\r\n }\r\n // Visible for tests\r\n handleStreamClose(error) {\r\n logDebug(LOG_TAG$7, `close with error: ${error}`);\r\n this.stream = null;\r\n // In theory the stream could close cleanly, however, in our current model\r\n // we never expect this to happen because if we stop a stream ourselves,\r\n // this callback will never be called. To prevent cases where we retry\r\n // without a backoff accidentally, we set the stream to error in all cases.\r\n return this.close(4 /* PersistentStreamState.Error */, error);\r\n }\r\n /**\r\n * Returns a \"dispatcher\" function that dispatches operations onto the\r\n * AsyncQueue but only runs them if closeCount remains unchanged. This allows\r\n * us to turn auth / stream callbacks into no-ops if the stream is closed /\r\n * re-opened, etc.\r\n */\r\n getCloseGuardedDispatcher(startCloseCount) {\r\n return (fn) => {\r\n this.queue.enqueueAndForget(() => {\r\n if (this.closeCount === startCloseCount) {\r\n return fn();\r\n }\r\n else {\r\n logDebug(LOG_TAG$7, 'stream callback skipped by getCloseGuardedDispatcher.');\r\n return Promise.resolve();\r\n }\r\n });\r\n };\r\n }\r\n}\r\n/**\r\n * A PersistentStream that implements the Listen RPC.\r\n *\r\n * Once the Listen stream has called the onOpen() listener, any number of\r\n * listen() and unlisten() calls can be made to control what changes will be\r\n * sent from the server for ListenResponses.\r\n */\r\nclass PersistentListenStream extends PersistentStream {\r\n constructor(queue, connection, authCredentials, appCheckCredentials, serializer, listener) {\r\n super(queue, \"listen_stream_connection_backoff\" /* TimerId.ListenStreamConnectionBackoff */, \"listen_stream_idle\" /* TimerId.ListenStreamIdle */, \"health_check_timeout\" /* TimerId.HealthCheckTimeout */, connection, authCredentials, appCheckCredentials, listener);\r\n this.serializer = serializer;\r\n }\r\n startRpc(authToken, appCheckToken) {\r\n return this.connection.openStream('Listen', authToken, appCheckToken);\r\n }\r\n onMessage(watchChangeProto) {\r\n // A successful response means the stream is healthy\r\n this.backoff.reset();\r\n const watchChange = fromWatchChange(this.serializer, watchChangeProto);\r\n const snapshot = versionFromListenResponse(watchChangeProto);\r\n return this.listener.onWatchChange(watchChange, snapshot);\r\n }\r\n /**\r\n * Registers interest in the results of the given target. If the target\r\n * includes a resumeToken it will be included in the request. Results that\r\n * affect the target will be streamed back as WatchChange messages that\r\n * reference the targetId.\r\n */\r\n watch(targetData) {\r\n const request = {};\r\n request.database = getEncodedDatabaseId(this.serializer);\r\n request.addTarget = toTarget(this.serializer, targetData);\r\n const labels = toListenRequestLabels(this.serializer, targetData);\r\n if (labels) {\r\n request.labels = labels;\r\n }\r\n this.sendRequest(request);\r\n }\r\n /**\r\n * Unregisters interest in the results of the target associated with the\r\n * given targetId.\r\n */\r\n unwatch(targetId) {\r\n const request = {};\r\n request.database = getEncodedDatabaseId(this.serializer);\r\n request.removeTarget = targetId;\r\n this.sendRequest(request);\r\n }\r\n}\r\n/**\r\n * A Stream that implements the Write RPC.\r\n *\r\n * The Write RPC requires the caller to maintain special streamToken\r\n * state in between calls, to help the server understand which responses the\r\n * client has processed by the time the next request is made. Every response\r\n * will contain a streamToken; this value must be passed to the next\r\n * request.\r\n *\r\n * After calling start() on this stream, the next request must be a handshake,\r\n * containing whatever streamToken is on hand. Once a response to this\r\n * request is received, all pending mutations may be submitted. When\r\n * submitting multiple batches of mutations at the same time, it's\r\n * okay to use the same streamToken for the calls to writeMutations.\r\n *\r\n * TODO(b/33271235): Use proto types\r\n */\r\nclass PersistentWriteStream extends PersistentStream {\r\n constructor(queue, connection, authCredentials, appCheckCredentials, serializer, listener) {\r\n super(queue, \"write_stream_connection_backoff\" /* TimerId.WriteStreamConnectionBackoff */, \"write_stream_idle\" /* TimerId.WriteStreamIdle */, \"health_check_timeout\" /* TimerId.HealthCheckTimeout */, connection, authCredentials, appCheckCredentials, listener);\r\n this.serializer = serializer;\r\n this.handshakeComplete_ = false;\r\n }\r\n /**\r\n * Tracks whether or not a handshake has been successfully exchanged and\r\n * the stream is ready to accept mutations.\r\n */\r\n get handshakeComplete() {\r\n return this.handshakeComplete_;\r\n }\r\n // Override of PersistentStream.start\r\n start() {\r\n this.handshakeComplete_ = false;\r\n this.lastStreamToken = undefined;\r\n super.start();\r\n }\r\n tearDown() {\r\n if (this.handshakeComplete_) {\r\n this.writeMutations([]);\r\n }\r\n }\r\n startRpc(authToken, appCheckToken) {\r\n return this.connection.openStream('Write', authToken, appCheckToken);\r\n }\r\n onMessage(responseProto) {\r\n // Always capture the last stream token.\r\n hardAssert(!!responseProto.streamToken);\r\n this.lastStreamToken = responseProto.streamToken;\r\n if (!this.handshakeComplete_) {\r\n // The first response is always the handshake response\r\n hardAssert(!responseProto.writeResults || responseProto.writeResults.length === 0);\r\n this.handshakeComplete_ = true;\r\n return this.listener.onHandshakeComplete();\r\n }\r\n else {\r\n // A successful first write response means the stream is healthy,\r\n // Note, that we could consider a successful handshake healthy, however,\r\n // the write itself might be causing an error we want to back off from.\r\n this.backoff.reset();\r\n const results = fromWriteResults(responseProto.writeResults, responseProto.commitTime);\r\n const commitVersion = fromVersion(responseProto.commitTime);\r\n return this.listener.onMutationResult(commitVersion, results);\r\n }\r\n }\r\n /**\r\n * Sends an initial streamToken to the server, performing the handshake\r\n * required to make the StreamingWrite RPC work. Subsequent\r\n * calls should wait until onHandshakeComplete was called.\r\n */\r\n writeHandshake() {\r\n // TODO(dimond): Support stream resumption. We intentionally do not set the\r\n // stream token on the handshake, ignoring any stream token we might have.\r\n const request = {};\r\n request.database = getEncodedDatabaseId(this.serializer);\r\n this.sendRequest(request);\r\n }\r\n /** Sends a group of mutations to the Firestore backend to apply. */\r\n writeMutations(mutations) {\r\n const request = {\r\n streamToken: this.lastStreamToken,\r\n writes: mutations.map(mutation => toMutation(this.serializer, mutation))\r\n };\r\n this.sendRequest(request);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Datastore and its related methods are a wrapper around the external Google\r\n * Cloud Datastore grpc API, which provides an interface that is more convenient\r\n * for the rest of the client SDK architecture to consume.\r\n */\r\nclass Datastore {\r\n}\r\n/**\r\n * An implementation of Datastore that exposes additional state for internal\r\n * consumption.\r\n */\r\nclass DatastoreImpl extends Datastore {\r\n constructor(authCredentials, appCheckCredentials, connection, serializer) {\r\n super();\r\n this.authCredentials = authCredentials;\r\n this.appCheckCredentials = appCheckCredentials;\r\n this.connection = connection;\r\n this.serializer = serializer;\r\n this.terminated = false;\r\n }\r\n verifyInitialized() {\r\n if (this.terminated) {\r\n throw new FirestoreError(Code.FAILED_PRECONDITION, 'The client has already been terminated.');\r\n }\r\n }\r\n /** Invokes the provided RPC with auth and AppCheck tokens. */\r\n invokeRPC(rpcName, path, request) {\r\n this.verifyInitialized();\r\n return Promise.all([\r\n this.authCredentials.getToken(),\r\n this.appCheckCredentials.getToken()\r\n ])\r\n .then(([authToken, appCheckToken]) => {\r\n return this.connection.invokeRPC(rpcName, path, request, authToken, appCheckToken);\r\n })\r\n .catch((error) => {\r\n if (error.name === 'FirebaseError') {\r\n if (error.code === Code.UNAUTHENTICATED) {\r\n this.authCredentials.invalidateToken();\r\n this.appCheckCredentials.invalidateToken();\r\n }\r\n throw error;\r\n }\r\n else {\r\n throw new FirestoreError(Code.UNKNOWN, error.toString());\r\n }\r\n });\r\n }\r\n /** Invokes the provided RPC with streamed results with auth and AppCheck tokens. */\r\n invokeStreamingRPC(rpcName, path, request, expectedResponseCount) {\r\n this.verifyInitialized();\r\n return Promise.all([\r\n this.authCredentials.getToken(),\r\n this.appCheckCredentials.getToken()\r\n ])\r\n .then(([authToken, appCheckToken]) => {\r\n return this.connection.invokeStreamingRPC(rpcName, path, request, authToken, appCheckToken, expectedResponseCount);\r\n })\r\n .catch((error) => {\r\n if (error.name === 'FirebaseError') {\r\n if (error.code === Code.UNAUTHENTICATED) {\r\n this.authCredentials.invalidateToken();\r\n this.appCheckCredentials.invalidateToken();\r\n }\r\n throw error;\r\n }\r\n else {\r\n throw new FirestoreError(Code.UNKNOWN, error.toString());\r\n }\r\n });\r\n }\r\n terminate() {\r\n this.terminated = true;\r\n }\r\n}\r\n// TODO(firestorexp): Make sure there is only one Datastore instance per\r\n// firestore-exp client.\r\nfunction newDatastore(authCredentials, appCheckCredentials, connection, serializer) {\r\n return new DatastoreImpl(authCredentials, appCheckCredentials, connection, serializer);\r\n}\r\nasync function invokeCommitRpc(datastore, mutations) {\r\n const datastoreImpl = debugCast(datastore);\r\n const path = getEncodedDatabaseId(datastoreImpl.serializer) + '/documents';\r\n const request = {\r\n writes: mutations.map(m => toMutation(datastoreImpl.serializer, m))\r\n };\r\n await datastoreImpl.invokeRPC('Commit', path, request);\r\n}\r\nasync function invokeBatchGetDocumentsRpc(datastore, keys) {\r\n const datastoreImpl = debugCast(datastore);\r\n const path = getEncodedDatabaseId(datastoreImpl.serializer) + '/documents';\r\n const request = {\r\n documents: keys.map(k => toName(datastoreImpl.serializer, k))\r\n };\r\n const response = await datastoreImpl.invokeStreamingRPC('BatchGetDocuments', path, request, keys.length);\r\n const docs = new Map();\r\n response.forEach(proto => {\r\n const doc = fromBatchGetDocumentsResponse(datastoreImpl.serializer, proto);\r\n docs.set(doc.key.toString(), doc);\r\n });\r\n const result = [];\r\n keys.forEach(key => {\r\n const doc = docs.get(key.toString());\r\n hardAssert(!!doc);\r\n result.push(doc);\r\n });\r\n return result;\r\n}\r\nasync function invokeRunAggregationQueryRpc(datastore, query) {\r\n const datastoreImpl = debugCast(datastore);\r\n const request = toRunAggregationQueryRequest(datastoreImpl.serializer, queryToTarget(query));\r\n const parent = request.parent;\r\n if (!datastoreImpl.connection.shouldResourcePathBeIncludedInRequest) {\r\n delete request.parent;\r\n }\r\n const response = await datastoreImpl.invokeStreamingRPC('RunAggregationQuery', parent, request, /*expectedResponseCount=*/ 1);\r\n return (response\r\n // Omit RunAggregationQueryResponse that only contain readTimes.\r\n .filter(proto => !!proto.result)\r\n .map(proto => proto.result.aggregateFields));\r\n}\r\nfunction newPersistentWriteStream(datastore, queue, listener) {\r\n const datastoreImpl = debugCast(datastore);\r\n datastoreImpl.verifyInitialized();\r\n return new PersistentWriteStream(queue, datastoreImpl.connection, datastoreImpl.authCredentials, datastoreImpl.appCheckCredentials, datastoreImpl.serializer, listener);\r\n}\r\nfunction newPersistentWatchStream(datastore, queue, listener) {\r\n const datastoreImpl = debugCast(datastore);\r\n datastoreImpl.verifyInitialized();\r\n return new PersistentListenStream(queue, datastoreImpl.connection, datastoreImpl.authCredentials, datastoreImpl.appCheckCredentials, datastoreImpl.serializer, listener);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2018 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$6 = 'OnlineStateTracker';\r\n// To deal with transient failures, we allow multiple stream attempts before\r\n// giving up and transitioning from OnlineState.Unknown to Offline.\r\n// TODO(mikelehen): This used to be set to 2 as a mitigation for b/66228394.\r\n// @jdimond thinks that bug is sufficiently fixed so that we can set this back\r\n// to 1. If that works okay, we could potentially remove this logic entirely.\r\nconst MAX_WATCH_STREAM_FAILURES = 1;\r\n// To deal with stream attempts that don't succeed or fail in a timely manner,\r\n// we have a timeout for OnlineState to reach Online or Offline.\r\n// If the timeout is reached, we transition to Offline rather than waiting\r\n// indefinitely.\r\nconst ONLINE_STATE_TIMEOUT_MS = 10 * 1000;\r\n/**\r\n * A component used by the RemoteStore to track the OnlineState (that is,\r\n * whether or not the client as a whole should be considered to be online or\r\n * offline), implementing the appropriate heuristics.\r\n *\r\n * In particular, when the client is trying to connect to the backend, we\r\n * allow up to MAX_WATCH_STREAM_FAILURES within ONLINE_STATE_TIMEOUT_MS for\r\n * a connection to succeed. If we have too many failures or the timeout elapses,\r\n * then we set the OnlineState to Offline, and the client will behave as if\r\n * it is offline (get()s will return cached data, etc.).\r\n */\r\nclass OnlineStateTracker {\r\n constructor(asyncQueue, onlineStateHandler) {\r\n this.asyncQueue = asyncQueue;\r\n this.onlineStateHandler = onlineStateHandler;\r\n /** The current OnlineState. */\r\n this.state = \"Unknown\" /* OnlineState.Unknown */;\r\n /**\r\n * A count of consecutive failures to open the stream. If it reaches the\r\n * maximum defined by MAX_WATCH_STREAM_FAILURES, we'll set the OnlineState to\r\n * Offline.\r\n */\r\n this.watchStreamFailures = 0;\r\n /**\r\n * A timer that elapses after ONLINE_STATE_TIMEOUT_MS, at which point we\r\n * transition from OnlineState.Unknown to OnlineState.Offline without waiting\r\n * for the stream to actually fail (MAX_WATCH_STREAM_FAILURES times).\r\n */\r\n this.onlineStateTimer = null;\r\n /**\r\n * Whether the client should log a warning message if it fails to connect to\r\n * the backend (initially true, cleared after a successful stream, or if we've\r\n * logged the message already).\r\n */\r\n this.shouldWarnClientIsOffline = true;\r\n }\r\n /**\r\n * Called by RemoteStore when a watch stream is started (including on each\r\n * backoff attempt).\r\n *\r\n * If this is the first attempt, it sets the OnlineState to Unknown and starts\r\n * the onlineStateTimer.\r\n */\r\n handleWatchStreamStart() {\r\n if (this.watchStreamFailures === 0) {\r\n this.setAndBroadcast(\"Unknown\" /* OnlineState.Unknown */);\r\n this.onlineStateTimer = this.asyncQueue.enqueueAfterDelay(\"online_state_timeout\" /* TimerId.OnlineStateTimeout */, ONLINE_STATE_TIMEOUT_MS, () => {\r\n this.onlineStateTimer = null;\r\n this.logClientOfflineWarningIfNecessary(`Backend didn't respond within ${ONLINE_STATE_TIMEOUT_MS / 1000} ` +\r\n `seconds.`);\r\n this.setAndBroadcast(\"Offline\" /* OnlineState.Offline */);\r\n // NOTE: handleWatchStreamFailure() will continue to increment\r\n // watchStreamFailures even though we are already marked Offline,\r\n // but this is non-harmful.\r\n return Promise.resolve();\r\n });\r\n }\r\n }\r\n /**\r\n * Updates our OnlineState as appropriate after the watch stream reports a\r\n * failure. The first failure moves us to the 'Unknown' state. We then may\r\n * allow multiple failures (based on MAX_WATCH_STREAM_FAILURES) before we\r\n * actually transition to the 'Offline' state.\r\n */\r\n handleWatchStreamFailure(error) {\r\n if (this.state === \"Online\" /* OnlineState.Online */) {\r\n this.setAndBroadcast(\"Unknown\" /* OnlineState.Unknown */);\r\n }\r\n else {\r\n this.watchStreamFailures++;\r\n if (this.watchStreamFailures >= MAX_WATCH_STREAM_FAILURES) {\r\n this.clearOnlineStateTimer();\r\n this.logClientOfflineWarningIfNecessary(`Connection failed ${MAX_WATCH_STREAM_FAILURES} ` +\r\n `times. Most recent error: ${error.toString()}`);\r\n this.setAndBroadcast(\"Offline\" /* OnlineState.Offline */);\r\n }\r\n }\r\n }\r\n /**\r\n * Explicitly sets the OnlineState to the specified state.\r\n *\r\n * Note that this resets our timers / failure counters, etc. used by our\r\n * Offline heuristics, so must not be used in place of\r\n * handleWatchStreamStart() and handleWatchStreamFailure().\r\n */\r\n set(newState) {\r\n this.clearOnlineStateTimer();\r\n this.watchStreamFailures = 0;\r\n if (newState === \"Online\" /* OnlineState.Online */) {\r\n // We've connected to watch at least once. Don't warn the developer\r\n // about being offline going forward.\r\n this.shouldWarnClientIsOffline = false;\r\n }\r\n this.setAndBroadcast(newState);\r\n }\r\n setAndBroadcast(newState) {\r\n if (newState !== this.state) {\r\n this.state = newState;\r\n this.onlineStateHandler(newState);\r\n }\r\n }\r\n logClientOfflineWarningIfNecessary(details) {\r\n const message = `Could not reach Cloud Firestore backend. ${details}\\n` +\r\n `This typically indicates that your device does not have a healthy ` +\r\n `Internet connection at the moment. The client will operate in offline ` +\r\n `mode until it is able to successfully connect to the backend.`;\r\n if (this.shouldWarnClientIsOffline) {\r\n logError(message);\r\n this.shouldWarnClientIsOffline = false;\r\n }\r\n else {\r\n logDebug(LOG_TAG$6, message);\r\n }\r\n }\r\n clearOnlineStateTimer() {\r\n if (this.onlineStateTimer !== null) {\r\n this.onlineStateTimer.cancel();\r\n this.onlineStateTimer = null;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$5 = 'RemoteStore';\r\n// TODO(b/35853402): Negotiate this with the stream.\r\nconst MAX_PENDING_WRITES = 10;\r\nclass RemoteStoreImpl {\r\n constructor(\r\n /**\r\n * The local store, used to fill the write pipeline with outbound mutations.\r\n */\r\n localStore, \r\n /** The client-side proxy for interacting with the backend. */\r\n datastore, asyncQueue, onlineStateHandler, connectivityMonitor) {\r\n this.localStore = localStore;\r\n this.datastore = datastore;\r\n this.asyncQueue = asyncQueue;\r\n this.remoteSyncer = {};\r\n /**\r\n * A list of up to MAX_PENDING_WRITES writes that we have fetched from the\r\n * LocalStore via fillWritePipeline() and have or will send to the write\r\n * stream.\r\n *\r\n * Whenever writePipeline.length > 0 the RemoteStore will attempt to start or\r\n * restart the write stream. When the stream is established the writes in the\r\n * pipeline will be sent in order.\r\n *\r\n * Writes remain in writePipeline until they are acknowledged by the backend\r\n * and thus will automatically be re-sent if the stream is interrupted /\r\n * restarted before they're acknowledged.\r\n *\r\n * Write responses from the backend are linked to their originating request\r\n * purely based on order, and so we can just shift() writes from the front of\r\n * the writePipeline as we receive responses.\r\n */\r\n this.writePipeline = [];\r\n /**\r\n * A mapping of watched targets that the client cares about tracking and the\r\n * user has explicitly called a 'listen' for this target.\r\n *\r\n * These targets may or may not have been sent to or acknowledged by the\r\n * server. On re-establishing the listen stream, these targets should be sent\r\n * to the server. The targets removed with unlistens are removed eagerly\r\n * without waiting for confirmation from the listen stream.\r\n */\r\n this.listenTargets = new Map();\r\n /**\r\n * A set of reasons for why the RemoteStore may be offline. If empty, the\r\n * RemoteStore may start its network connections.\r\n */\r\n this.offlineCauses = new Set();\r\n /**\r\n * Event handlers that get called when the network is disabled or enabled.\r\n *\r\n * PORTING NOTE: These functions are used on the Web client to create the\r\n * underlying streams (to support tree-shakeable streams). On Android and iOS,\r\n * the streams are created during construction of RemoteStore.\r\n */\r\n this.onNetworkStatusChange = [];\r\n this.connectivityMonitor = connectivityMonitor;\r\n this.connectivityMonitor.addCallback((_) => {\r\n asyncQueue.enqueueAndForget(async () => {\r\n // Porting Note: Unlike iOS, `restartNetwork()` is called even when the\r\n // network becomes unreachable as we don't have any other way to tear\r\n // down our streams.\r\n if (canUseNetwork(this)) {\r\n logDebug(LOG_TAG$5, 'Restarting streams for network reachability change.');\r\n await restartNetwork(this);\r\n }\r\n });\r\n });\r\n this.onlineStateTracker = new OnlineStateTracker(asyncQueue, onlineStateHandler);\r\n }\r\n}\r\nfunction newRemoteStore(localStore, datastore, asyncQueue, onlineStateHandler, connectivityMonitor) {\r\n return new RemoteStoreImpl(localStore, datastore, asyncQueue, onlineStateHandler, connectivityMonitor);\r\n}\r\n/** Re-enables the network. Idempotent. */\r\nfunction remoteStoreEnableNetwork(remoteStore) {\r\n const remoteStoreImpl = debugCast(remoteStore);\r\n remoteStoreImpl.offlineCauses.delete(0 /* OfflineCause.UserDisabled */);\r\n return enableNetworkInternal(remoteStoreImpl);\r\n}\r\nasync function enableNetworkInternal(remoteStoreImpl) {\r\n if (canUseNetwork(remoteStoreImpl)) {\r\n for (const networkStatusHandler of remoteStoreImpl.onNetworkStatusChange) {\r\n await networkStatusHandler(/* enabled= */ true);\r\n }\r\n }\r\n}\r\n/**\r\n * Temporarily disables the network. The network can be re-enabled using\r\n * enableNetwork().\r\n */\r\nasync function remoteStoreDisableNetwork(remoteStore) {\r\n const remoteStoreImpl = debugCast(remoteStore);\r\n remoteStoreImpl.offlineCauses.add(0 /* OfflineCause.UserDisabled */);\r\n await disableNetworkInternal(remoteStoreImpl);\r\n // Set the OnlineState to Offline so get()s return from cache, etc.\r\n remoteStoreImpl.onlineStateTracker.set(\"Offline\" /* OnlineState.Offline */);\r\n}\r\nasync function disableNetworkInternal(remoteStoreImpl) {\r\n for (const networkStatusHandler of remoteStoreImpl.onNetworkStatusChange) {\r\n await networkStatusHandler(/* enabled= */ false);\r\n }\r\n}\r\nasync function remoteStoreShutdown(remoteStore) {\r\n const remoteStoreImpl = debugCast(remoteStore);\r\n logDebug(LOG_TAG$5, 'RemoteStore shutting down.');\r\n remoteStoreImpl.offlineCauses.add(5 /* OfflineCause.Shutdown */);\r\n await disableNetworkInternal(remoteStoreImpl);\r\n remoteStoreImpl.connectivityMonitor.shutdown();\r\n // Set the OnlineState to Unknown (rather than Offline) to avoid potentially\r\n // triggering spurious listener events with cached data, etc.\r\n remoteStoreImpl.onlineStateTracker.set(\"Unknown\" /* OnlineState.Unknown */);\r\n}\r\n/**\r\n * Starts new listen for the given target. Uses resume token if provided. It\r\n * is a no-op if the target of given `TargetData` is already being listened to.\r\n */\r\nfunction remoteStoreListen(remoteStore, targetData) {\r\n const remoteStoreImpl = debugCast(remoteStore);\r\n if (remoteStoreImpl.listenTargets.has(targetData.targetId)) {\r\n return;\r\n }\r\n // Mark this as something the client is currently listening for.\r\n remoteStoreImpl.listenTargets.set(targetData.targetId, targetData);\r\n if (shouldStartWatchStream(remoteStoreImpl)) {\r\n // The listen will be sent in onWatchStreamOpen\r\n startWatchStream(remoteStoreImpl);\r\n }\r\n else if (ensureWatchStream(remoteStoreImpl).isOpen()) {\r\n sendWatchRequest(remoteStoreImpl, targetData);\r\n }\r\n}\r\n/**\r\n * Removes the listen from server. It is a no-op if the given target id is\r\n * not being listened to.\r\n */\r\nfunction remoteStoreUnlisten(remoteStore, targetId) {\r\n const remoteStoreImpl = debugCast(remoteStore);\r\n const watchStream = ensureWatchStream(remoteStoreImpl);\r\n remoteStoreImpl.listenTargets.delete(targetId);\r\n if (watchStream.isOpen()) {\r\n sendUnwatchRequest(remoteStoreImpl, targetId);\r\n }\r\n if (remoteStoreImpl.listenTargets.size === 0) {\r\n if (watchStream.isOpen()) {\r\n watchStream.markIdle();\r\n }\r\n else if (canUseNetwork(remoteStoreImpl)) {\r\n // Revert to OnlineState.Unknown if the watch stream is not open and we\r\n // have no listeners, since without any listens to send we cannot\r\n // confirm if the stream is healthy and upgrade to OnlineState.Online.\r\n remoteStoreImpl.onlineStateTracker.set(\"Unknown\" /* OnlineState.Unknown */);\r\n }\r\n }\r\n}\r\n/**\r\n * We need to increment the the expected number of pending responses we're due\r\n * from watch so we wait for the ack to process any messages from this target.\r\n */\r\nfunction sendWatchRequest(remoteStoreImpl, targetData) {\r\n remoteStoreImpl.watchChangeAggregator.recordPendingTargetRequest(targetData.targetId);\r\n ensureWatchStream(remoteStoreImpl).watch(targetData);\r\n}\r\n/**\r\n * We need to increment the expected number of pending responses we're due\r\n * from watch so we wait for the removal on the server before we process any\r\n * messages from this target.\r\n */\r\nfunction sendUnwatchRequest(remoteStoreImpl, targetId) {\r\n remoteStoreImpl.watchChangeAggregator.recordPendingTargetRequest(targetId);\r\n ensureWatchStream(remoteStoreImpl).unwatch(targetId);\r\n}\r\nfunction startWatchStream(remoteStoreImpl) {\r\n remoteStoreImpl.watchChangeAggregator = new WatchChangeAggregator({\r\n getRemoteKeysForTarget: targetId => remoteStoreImpl.remoteSyncer.getRemoteKeysForTarget(targetId),\r\n getTargetDataForTarget: targetId => remoteStoreImpl.listenTargets.get(targetId) || null\r\n });\r\n ensureWatchStream(remoteStoreImpl).start();\r\n remoteStoreImpl.onlineStateTracker.handleWatchStreamStart();\r\n}\r\n/**\r\n * Returns whether the watch stream should be started because it's necessary\r\n * and has not yet been started.\r\n */\r\nfunction shouldStartWatchStream(remoteStoreImpl) {\r\n return (canUseNetwork(remoteStoreImpl) &&\r\n !ensureWatchStream(remoteStoreImpl).isStarted() &&\r\n remoteStoreImpl.listenTargets.size > 0);\r\n}\r\nfunction canUseNetwork(remoteStore) {\r\n const remoteStoreImpl = debugCast(remoteStore);\r\n return remoteStoreImpl.offlineCauses.size === 0;\r\n}\r\nfunction cleanUpWatchStreamState(remoteStoreImpl) {\r\n remoteStoreImpl.watchChangeAggregator = undefined;\r\n}\r\nasync function onWatchStreamOpen(remoteStoreImpl) {\r\n remoteStoreImpl.listenTargets.forEach((targetData, targetId) => {\r\n sendWatchRequest(remoteStoreImpl, targetData);\r\n });\r\n}\r\nasync function onWatchStreamClose(remoteStoreImpl, error) {\r\n cleanUpWatchStreamState(remoteStoreImpl);\r\n // If we still need the watch stream, retry the connection.\r\n if (shouldStartWatchStream(remoteStoreImpl)) {\r\n remoteStoreImpl.onlineStateTracker.handleWatchStreamFailure(error);\r\n startWatchStream(remoteStoreImpl);\r\n }\r\n else {\r\n // No need to restart watch stream because there are no active targets.\r\n // The online state is set to unknown because there is no active attempt\r\n // at establishing a connection\r\n remoteStoreImpl.onlineStateTracker.set(\"Unknown\" /* OnlineState.Unknown */);\r\n }\r\n}\r\nasync function onWatchStreamChange(remoteStoreImpl, watchChange, snapshotVersion) {\r\n // Mark the client as online since we got a message from the server\r\n remoteStoreImpl.onlineStateTracker.set(\"Online\" /* OnlineState.Online */);\r\n if (watchChange instanceof WatchTargetChange &&\r\n watchChange.state === 2 /* WatchTargetChangeState.Removed */ &&\r\n watchChange.cause) {\r\n // There was an error on a target, don't wait for a consistent snapshot\r\n // to raise events\r\n try {\r\n await handleTargetError(remoteStoreImpl, watchChange);\r\n }\r\n catch (e) {\r\n logDebug(LOG_TAG$5, 'Failed to remove targets %s: %s ', watchChange.targetIds.join(','), e);\r\n await disableNetworkUntilRecovery(remoteStoreImpl, e);\r\n }\r\n return;\r\n }\r\n if (watchChange instanceof DocumentWatchChange) {\r\n remoteStoreImpl.watchChangeAggregator.handleDocumentChange(watchChange);\r\n }\r\n else if (watchChange instanceof ExistenceFilterChange) {\r\n remoteStoreImpl.watchChangeAggregator.handleExistenceFilter(watchChange);\r\n }\r\n else {\r\n remoteStoreImpl.watchChangeAggregator.handleTargetChange(watchChange);\r\n }\r\n if (!snapshotVersion.isEqual(SnapshotVersion.min())) {\r\n try {\r\n const lastRemoteSnapshotVersion = await localStoreGetLastRemoteSnapshotVersion(remoteStoreImpl.localStore);\r\n if (snapshotVersion.compareTo(lastRemoteSnapshotVersion) >= 0) {\r\n // We have received a target change with a global snapshot if the snapshot\r\n // version is not equal to SnapshotVersion.min().\r\n await raiseWatchSnapshot(remoteStoreImpl, snapshotVersion);\r\n }\r\n }\r\n catch (e) {\r\n logDebug(LOG_TAG$5, 'Failed to raise snapshot:', e);\r\n await disableNetworkUntilRecovery(remoteStoreImpl, e);\r\n }\r\n }\r\n}\r\n/**\r\n * Recovery logic for IndexedDB errors that takes the network offline until\r\n * `op` succeeds. Retries are scheduled with backoff using\r\n * `enqueueRetryable()`. If `op()` is not provided, IndexedDB access is\r\n * validated via a generic operation.\r\n *\r\n * The returned Promise is resolved once the network is disabled and before\r\n * any retry attempt.\r\n */\r\nasync function disableNetworkUntilRecovery(remoteStoreImpl, e, op) {\r\n if (isIndexedDbTransactionError(e)) {\r\n remoteStoreImpl.offlineCauses.add(1 /* OfflineCause.IndexedDbFailed */);\r\n // Disable network and raise offline snapshots\r\n await disableNetworkInternal(remoteStoreImpl);\r\n remoteStoreImpl.onlineStateTracker.set(\"Offline\" /* OnlineState.Offline */);\r\n if (!op) {\r\n // Use a simple read operation to determine if IndexedDB recovered.\r\n // Ideally, we would expose a health check directly on SimpleDb, but\r\n // RemoteStore only has access to persistence through LocalStore.\r\n op = () => localStoreGetLastRemoteSnapshotVersion(remoteStoreImpl.localStore);\r\n }\r\n // Probe IndexedDB periodically and re-enable network\r\n remoteStoreImpl.asyncQueue.enqueueRetryable(async () => {\r\n logDebug(LOG_TAG$5, 'Retrying IndexedDB access');\r\n await op();\r\n remoteStoreImpl.offlineCauses.delete(1 /* OfflineCause.IndexedDbFailed */);\r\n await enableNetworkInternal(remoteStoreImpl);\r\n });\r\n }\r\n else {\r\n throw e;\r\n }\r\n}\r\n/**\r\n * Executes `op`. If `op` fails, takes the network offline until `op`\r\n * succeeds. Returns after the first attempt.\r\n */\r\nfunction executeWithRecovery(remoteStoreImpl, op) {\r\n return op().catch(e => disableNetworkUntilRecovery(remoteStoreImpl, e, op));\r\n}\r\n/**\r\n * Takes a batch of changes from the Datastore, repackages them as a\r\n * RemoteEvent, and passes that on to the listener, which is typically the\r\n * SyncEngine.\r\n */\r\nfunction raiseWatchSnapshot(remoteStoreImpl, snapshotVersion) {\r\n const remoteEvent = remoteStoreImpl.watchChangeAggregator.createRemoteEvent(snapshotVersion);\r\n // Update in-memory resume tokens. LocalStore will update the\r\n // persistent view of these when applying the completed RemoteEvent.\r\n remoteEvent.targetChanges.forEach((change, targetId) => {\r\n if (change.resumeToken.approximateByteSize() > 0) {\r\n const targetData = remoteStoreImpl.listenTargets.get(targetId);\r\n // A watched target might have been removed already.\r\n if (targetData) {\r\n remoteStoreImpl.listenTargets.set(targetId, targetData.withResumeToken(change.resumeToken, snapshotVersion));\r\n }\r\n }\r\n });\r\n // Re-establish listens for the targets that have been invalidated by\r\n // existence filter mismatches.\r\n remoteEvent.targetMismatches.forEach(targetId => {\r\n const targetData = remoteStoreImpl.listenTargets.get(targetId);\r\n if (!targetData) {\r\n // A watched target might have been removed already.\r\n return;\r\n }\r\n // Clear the resume token for the target, since we're in a known mismatch\r\n // state.\r\n remoteStoreImpl.listenTargets.set(targetId, targetData.withResumeToken(ByteString.EMPTY_BYTE_STRING, targetData.snapshotVersion));\r\n // Cause a hard reset by unwatching and rewatching immediately, but\r\n // deliberately don't send a resume token so that we get a full update.\r\n sendUnwatchRequest(remoteStoreImpl, targetId);\r\n // Mark the target we send as being on behalf of an existence filter\r\n // mismatch, but don't actually retain that in listenTargets. This ensures\r\n // that we flag the first re-listen this way without impacting future\r\n // listens of this target (that might happen e.g. on reconnect).\r\n const requestTargetData = new TargetData(targetData.target, targetId, 1 /* TargetPurpose.ExistenceFilterMismatch */, targetData.sequenceNumber);\r\n sendWatchRequest(remoteStoreImpl, requestTargetData);\r\n });\r\n return remoteStoreImpl.remoteSyncer.applyRemoteEvent(remoteEvent);\r\n}\r\n/** Handles an error on a target */\r\nasync function handleTargetError(remoteStoreImpl, watchChange) {\r\n const error = watchChange.cause;\r\n for (const targetId of watchChange.targetIds) {\r\n // A watched target might have been removed already.\r\n if (remoteStoreImpl.listenTargets.has(targetId)) {\r\n await remoteStoreImpl.remoteSyncer.rejectListen(targetId, error);\r\n remoteStoreImpl.listenTargets.delete(targetId);\r\n remoteStoreImpl.watchChangeAggregator.removeTarget(targetId);\r\n }\r\n }\r\n}\r\n/**\r\n * Attempts to fill our write pipeline with writes from the LocalStore.\r\n *\r\n * Called internally to bootstrap or refill the write pipeline and by\r\n * SyncEngine whenever there are new mutations to process.\r\n *\r\n * Starts the write stream if necessary.\r\n */\r\nasync function fillWritePipeline(remoteStore) {\r\n const remoteStoreImpl = debugCast(remoteStore);\r\n const writeStream = ensureWriteStream(remoteStoreImpl);\r\n let lastBatchIdRetrieved = remoteStoreImpl.writePipeline.length > 0\r\n ? remoteStoreImpl.writePipeline[remoteStoreImpl.writePipeline.length - 1]\r\n .batchId\r\n : BATCHID_UNKNOWN;\r\n while (canAddToWritePipeline(remoteStoreImpl)) {\r\n try {\r\n const batch = await localStoreGetNextMutationBatch(remoteStoreImpl.localStore, lastBatchIdRetrieved);\r\n if (batch === null) {\r\n if (remoteStoreImpl.writePipeline.length === 0) {\r\n writeStream.markIdle();\r\n }\r\n break;\r\n }\r\n else {\r\n lastBatchIdRetrieved = batch.batchId;\r\n addToWritePipeline(remoteStoreImpl, batch);\r\n }\r\n }\r\n catch (e) {\r\n await disableNetworkUntilRecovery(remoteStoreImpl, e);\r\n }\r\n }\r\n if (shouldStartWriteStream(remoteStoreImpl)) {\r\n startWriteStream(remoteStoreImpl);\r\n }\r\n}\r\n/**\r\n * Returns true if we can add to the write pipeline (i.e. the network is\r\n * enabled and the write pipeline is not full).\r\n */\r\nfunction canAddToWritePipeline(remoteStoreImpl) {\r\n return (canUseNetwork(remoteStoreImpl) &&\r\n remoteStoreImpl.writePipeline.length < MAX_PENDING_WRITES);\r\n}\r\n/**\r\n * Queues additional writes to be sent to the write stream, sending them\r\n * immediately if the write stream is established.\r\n */\r\nfunction addToWritePipeline(remoteStoreImpl, batch) {\r\n remoteStoreImpl.writePipeline.push(batch);\r\n const writeStream = ensureWriteStream(remoteStoreImpl);\r\n if (writeStream.isOpen() && writeStream.handshakeComplete) {\r\n writeStream.writeMutations(batch.mutations);\r\n }\r\n}\r\nfunction shouldStartWriteStream(remoteStoreImpl) {\r\n return (canUseNetwork(remoteStoreImpl) &&\r\n !ensureWriteStream(remoteStoreImpl).isStarted() &&\r\n remoteStoreImpl.writePipeline.length > 0);\r\n}\r\nfunction startWriteStream(remoteStoreImpl) {\r\n ensureWriteStream(remoteStoreImpl).start();\r\n}\r\nasync function onWriteStreamOpen(remoteStoreImpl) {\r\n ensureWriteStream(remoteStoreImpl).writeHandshake();\r\n}\r\nasync function onWriteHandshakeComplete(remoteStoreImpl) {\r\n const writeStream = ensureWriteStream(remoteStoreImpl);\r\n // Send the write pipeline now that the stream is established.\r\n for (const batch of remoteStoreImpl.writePipeline) {\r\n writeStream.writeMutations(batch.mutations);\r\n }\r\n}\r\nasync function onMutationResult(remoteStoreImpl, commitVersion, results) {\r\n const batch = remoteStoreImpl.writePipeline.shift();\r\n const success = MutationBatchResult.from(batch, commitVersion, results);\r\n await executeWithRecovery(remoteStoreImpl, () => remoteStoreImpl.remoteSyncer.applySuccessfulWrite(success));\r\n // It's possible that with the completion of this mutation another\r\n // slot has freed up.\r\n await fillWritePipeline(remoteStoreImpl);\r\n}\r\nasync function onWriteStreamClose(remoteStoreImpl, error) {\r\n // If the write stream closed after the write handshake completes, a write\r\n // operation failed and we fail the pending operation.\r\n if (error && ensureWriteStream(remoteStoreImpl).handshakeComplete) {\r\n // This error affects the actual write.\r\n await handleWriteError(remoteStoreImpl, error);\r\n }\r\n // The write stream might have been started by refilling the write\r\n // pipeline for failed writes\r\n if (shouldStartWriteStream(remoteStoreImpl)) {\r\n startWriteStream(remoteStoreImpl);\r\n }\r\n}\r\nasync function handleWriteError(remoteStoreImpl, error) {\r\n // Only handle permanent errors here. If it's transient, just let the retry\r\n // logic kick in.\r\n if (isPermanentWriteError(error.code)) {\r\n // This was a permanent error, the request itself was the problem\r\n // so it's not going to succeed if we resend it.\r\n const batch = remoteStoreImpl.writePipeline.shift();\r\n // In this case it's also unlikely that the server itself is melting\r\n // down -- this was just a bad request so inhibit backoff on the next\r\n // restart.\r\n ensureWriteStream(remoteStoreImpl).inhibitBackoff();\r\n await executeWithRecovery(remoteStoreImpl, () => remoteStoreImpl.remoteSyncer.rejectFailedWrite(batch.batchId, error));\r\n // It's possible that with the completion of this mutation\r\n // another slot has freed up.\r\n await fillWritePipeline(remoteStoreImpl);\r\n }\r\n}\r\nasync function restartNetwork(remoteStore) {\r\n const remoteStoreImpl = debugCast(remoteStore);\r\n remoteStoreImpl.offlineCauses.add(4 /* OfflineCause.ConnectivityChange */);\r\n await disableNetworkInternal(remoteStoreImpl);\r\n remoteStoreImpl.onlineStateTracker.set(\"Unknown\" /* OnlineState.Unknown */);\r\n remoteStoreImpl.offlineCauses.delete(4 /* OfflineCause.ConnectivityChange */);\r\n await enableNetworkInternal(remoteStoreImpl);\r\n}\r\nasync function remoteStoreHandleCredentialChange(remoteStore, user) {\r\n const remoteStoreImpl = debugCast(remoteStore);\r\n remoteStoreImpl.asyncQueue.verifyOperationInProgress();\r\n logDebug(LOG_TAG$5, 'RemoteStore received new credentials');\r\n const usesNetwork = canUseNetwork(remoteStoreImpl);\r\n // Tear down and re-create our network streams. This will ensure we get a\r\n // fresh auth token for the new user and re-fill the write pipeline with\r\n // new mutations from the LocalStore (since mutations are per-user).\r\n remoteStoreImpl.offlineCauses.add(3 /* OfflineCause.CredentialChange */);\r\n await disableNetworkInternal(remoteStoreImpl);\r\n if (usesNetwork) {\r\n // Don't set the network status to Unknown if we are offline.\r\n remoteStoreImpl.onlineStateTracker.set(\"Unknown\" /* OnlineState.Unknown */);\r\n }\r\n await remoteStoreImpl.remoteSyncer.handleCredentialChange(user);\r\n remoteStoreImpl.offlineCauses.delete(3 /* OfflineCause.CredentialChange */);\r\n await enableNetworkInternal(remoteStoreImpl);\r\n}\r\n/**\r\n * Toggles the network state when the client gains or loses its primary lease.\r\n */\r\nasync function remoteStoreApplyPrimaryState(remoteStore, isPrimary) {\r\n const remoteStoreImpl = debugCast(remoteStore);\r\n if (isPrimary) {\r\n remoteStoreImpl.offlineCauses.delete(2 /* OfflineCause.IsSecondary */);\r\n await enableNetworkInternal(remoteStoreImpl);\r\n }\r\n else if (!isPrimary) {\r\n remoteStoreImpl.offlineCauses.add(2 /* OfflineCause.IsSecondary */);\r\n await disableNetworkInternal(remoteStoreImpl);\r\n remoteStoreImpl.onlineStateTracker.set(\"Unknown\" /* OnlineState.Unknown */);\r\n }\r\n}\r\n/**\r\n * If not yet initialized, registers the WatchStream and its network state\r\n * callback with `remoteStoreImpl`. Returns the existing stream if one is\r\n * already available.\r\n *\r\n * PORTING NOTE: On iOS and Android, the WatchStream gets registered on startup.\r\n * This is not done on Web to allow it to be tree-shaken.\r\n */\r\nfunction ensureWatchStream(remoteStoreImpl) {\r\n if (!remoteStoreImpl.watchStream) {\r\n // Create stream (but note that it is not started yet).\r\n remoteStoreImpl.watchStream = newPersistentWatchStream(remoteStoreImpl.datastore, remoteStoreImpl.asyncQueue, {\r\n onOpen: onWatchStreamOpen.bind(null, remoteStoreImpl),\r\n onClose: onWatchStreamClose.bind(null, remoteStoreImpl),\r\n onWatchChange: onWatchStreamChange.bind(null, remoteStoreImpl)\r\n });\r\n remoteStoreImpl.onNetworkStatusChange.push(async (enabled) => {\r\n if (enabled) {\r\n remoteStoreImpl.watchStream.inhibitBackoff();\r\n if (shouldStartWatchStream(remoteStoreImpl)) {\r\n startWatchStream(remoteStoreImpl);\r\n }\r\n else {\r\n remoteStoreImpl.onlineStateTracker.set(\"Unknown\" /* OnlineState.Unknown */);\r\n }\r\n }\r\n else {\r\n await remoteStoreImpl.watchStream.stop();\r\n cleanUpWatchStreamState(remoteStoreImpl);\r\n }\r\n });\r\n }\r\n return remoteStoreImpl.watchStream;\r\n}\r\n/**\r\n * If not yet initialized, registers the WriteStream and its network state\r\n * callback with `remoteStoreImpl`. Returns the existing stream if one is\r\n * already available.\r\n *\r\n * PORTING NOTE: On iOS and Android, the WriteStream gets registered on startup.\r\n * This is not done on Web to allow it to be tree-shaken.\r\n */\r\nfunction ensureWriteStream(remoteStoreImpl) {\r\n if (!remoteStoreImpl.writeStream) {\r\n // Create stream (but note that it is not started yet).\r\n remoteStoreImpl.writeStream = newPersistentWriteStream(remoteStoreImpl.datastore, remoteStoreImpl.asyncQueue, {\r\n onOpen: onWriteStreamOpen.bind(null, remoteStoreImpl),\r\n onClose: onWriteStreamClose.bind(null, remoteStoreImpl),\r\n onHandshakeComplete: onWriteHandshakeComplete.bind(null, remoteStoreImpl),\r\n onMutationResult: onMutationResult.bind(null, remoteStoreImpl)\r\n });\r\n remoteStoreImpl.onNetworkStatusChange.push(async (enabled) => {\r\n if (enabled) {\r\n remoteStoreImpl.writeStream.inhibitBackoff();\r\n // This will start the write stream if necessary.\r\n await fillWritePipeline(remoteStoreImpl);\r\n }\r\n else {\r\n await remoteStoreImpl.writeStream.stop();\r\n if (remoteStoreImpl.writePipeline.length > 0) {\r\n logDebug(LOG_TAG$5, `Stopping write stream with ${remoteStoreImpl.writePipeline.length} pending writes`);\r\n remoteStoreImpl.writePipeline = [];\r\n }\r\n }\r\n });\r\n }\r\n return remoteStoreImpl.writeStream;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$4 = 'AsyncQueue';\r\n/**\r\n * Represents an operation scheduled to be run in the future on an AsyncQueue.\r\n *\r\n * It is created via DelayedOperation.createAndSchedule().\r\n *\r\n * Supports cancellation (via cancel()) and early execution (via skipDelay()).\r\n *\r\n * Note: We implement `PromiseLike` instead of `Promise`, as the `Promise` type\r\n * in newer versions of TypeScript defines `finally`, which is not available in\r\n * IE.\r\n */\r\nclass DelayedOperation {\r\n constructor(asyncQueue, timerId, targetTimeMs, op, removalCallback) {\r\n this.asyncQueue = asyncQueue;\r\n this.timerId = timerId;\r\n this.targetTimeMs = targetTimeMs;\r\n this.op = op;\r\n this.removalCallback = removalCallback;\r\n this.deferred = new Deferred();\r\n this.then = this.deferred.promise.then.bind(this.deferred.promise);\r\n // It's normal for the deferred promise to be canceled (due to cancellation)\r\n // and so we attach a dummy catch callback to avoid\r\n // 'UnhandledPromiseRejectionWarning' log spam.\r\n this.deferred.promise.catch(err => { });\r\n }\r\n /**\r\n * Creates and returns a DelayedOperation that has been scheduled to be\r\n * executed on the provided asyncQueue after the provided delayMs.\r\n *\r\n * @param asyncQueue - The queue to schedule the operation on.\r\n * @param id - A Timer ID identifying the type of operation this is.\r\n * @param delayMs - The delay (ms) before the operation should be scheduled.\r\n * @param op - The operation to run.\r\n * @param removalCallback - A callback to be called synchronously once the\r\n * operation is executed or canceled, notifying the AsyncQueue to remove it\r\n * from its delayedOperations list.\r\n * PORTING NOTE: This exists to prevent making removeDelayedOperation() and\r\n * the DelayedOperation class public.\r\n */\r\n static createAndSchedule(asyncQueue, timerId, delayMs, op, removalCallback) {\r\n const targetTime = Date.now() + delayMs;\r\n const delayedOp = new DelayedOperation(asyncQueue, timerId, targetTime, op, removalCallback);\r\n delayedOp.start(delayMs);\r\n return delayedOp;\r\n }\r\n /**\r\n * Starts the timer. This is called immediately after construction by\r\n * createAndSchedule().\r\n */\r\n start(delayMs) {\r\n this.timerHandle = setTimeout(() => this.handleDelayElapsed(), delayMs);\r\n }\r\n /**\r\n * Queues the operation to run immediately (if it hasn't already been run or\r\n * canceled).\r\n */\r\n skipDelay() {\r\n return this.handleDelayElapsed();\r\n }\r\n /**\r\n * Cancels the operation if it hasn't already been executed or canceled. The\r\n * promise will be rejected.\r\n *\r\n * As long as the operation has not yet been run, calling cancel() provides a\r\n * guarantee that the operation will not be run.\r\n */\r\n cancel(reason) {\r\n if (this.timerHandle !== null) {\r\n this.clearTimeout();\r\n this.deferred.reject(new FirestoreError(Code.CANCELLED, 'Operation cancelled' + (reason ? ': ' + reason : '')));\r\n }\r\n }\r\n handleDelayElapsed() {\r\n this.asyncQueue.enqueueAndForget(() => {\r\n if (this.timerHandle !== null) {\r\n this.clearTimeout();\r\n return this.op().then(result => {\r\n return this.deferred.resolve(result);\r\n });\r\n }\r\n else {\r\n return Promise.resolve();\r\n }\r\n });\r\n }\r\n clearTimeout() {\r\n if (this.timerHandle !== null) {\r\n this.removalCallback(this);\r\n clearTimeout(this.timerHandle);\r\n this.timerHandle = null;\r\n }\r\n }\r\n}\r\n/**\r\n * Returns a FirestoreError that can be surfaced to the user if the provided\r\n * error is an IndexedDbTransactionError. Re-throws the error otherwise.\r\n */\r\nfunction wrapInUserErrorIfRecoverable(e, msg) {\r\n logError(LOG_TAG$4, `${msg}: ${e}`);\r\n if (isIndexedDbTransactionError(e)) {\r\n return new FirestoreError(Code.UNAVAILABLE, `${msg}: ${e}`);\r\n }\r\n else {\r\n throw e;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * DocumentSet is an immutable (copy-on-write) collection that holds documents\r\n * in order specified by the provided comparator. We always add a document key\r\n * comparator on top of what is provided to guarantee document equality based on\r\n * the key.\r\n */\r\nclass DocumentSet {\r\n /** The default ordering is by key if the comparator is omitted */\r\n constructor(comp) {\r\n // We are adding document key comparator to the end as it's the only\r\n // guaranteed unique property of a document.\r\n if (comp) {\r\n this.comparator = (d1, d2) => comp(d1, d2) || DocumentKey.comparator(d1.key, d2.key);\r\n }\r\n else {\r\n this.comparator = (d1, d2) => DocumentKey.comparator(d1.key, d2.key);\r\n }\r\n this.keyedMap = documentMap();\r\n this.sortedSet = new SortedMap(this.comparator);\r\n }\r\n /**\r\n * Returns an empty copy of the existing DocumentSet, using the same\r\n * comparator.\r\n */\r\n static emptySet(oldSet) {\r\n return new DocumentSet(oldSet.comparator);\r\n }\r\n has(key) {\r\n return this.keyedMap.get(key) != null;\r\n }\r\n get(key) {\r\n return this.keyedMap.get(key);\r\n }\r\n first() {\r\n return this.sortedSet.minKey();\r\n }\r\n last() {\r\n return this.sortedSet.maxKey();\r\n }\r\n isEmpty() {\r\n return this.sortedSet.isEmpty();\r\n }\r\n /**\r\n * Returns the index of the provided key in the document set, or -1 if the\r\n * document key is not present in the set;\r\n */\r\n indexOf(key) {\r\n const doc = this.keyedMap.get(key);\r\n return doc ? this.sortedSet.indexOf(doc) : -1;\r\n }\r\n get size() {\r\n return this.sortedSet.size;\r\n }\r\n /** Iterates documents in order defined by \"comparator\" */\r\n forEach(cb) {\r\n this.sortedSet.inorderTraversal((k, v) => {\r\n cb(k);\r\n return false;\r\n });\r\n }\r\n /** Inserts or updates a document with the same key */\r\n add(doc) {\r\n // First remove the element if we have it.\r\n const set = this.delete(doc.key);\r\n return set.copy(set.keyedMap.insert(doc.key, doc), set.sortedSet.insert(doc, null));\r\n }\r\n /** Deletes a document with a given key */\r\n delete(key) {\r\n const doc = this.get(key);\r\n if (!doc) {\r\n return this;\r\n }\r\n return this.copy(this.keyedMap.remove(key), this.sortedSet.remove(doc));\r\n }\r\n isEqual(other) {\r\n if (!(other instanceof DocumentSet)) {\r\n return false;\r\n }\r\n if (this.size !== other.size) {\r\n return false;\r\n }\r\n const thisIt = this.sortedSet.getIterator();\r\n const otherIt = other.sortedSet.getIterator();\r\n while (thisIt.hasNext()) {\r\n const thisDoc = thisIt.getNext().key;\r\n const otherDoc = otherIt.getNext().key;\r\n if (!thisDoc.isEqual(otherDoc)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n toString() {\r\n const docStrings = [];\r\n this.forEach(doc => {\r\n docStrings.push(doc.toString());\r\n });\r\n if (docStrings.length === 0) {\r\n return 'DocumentSet ()';\r\n }\r\n else {\r\n return 'DocumentSet (\\n ' + docStrings.join(' \\n') + '\\n)';\r\n }\r\n }\r\n copy(keyedMap, sortedSet) {\r\n const newSet = new DocumentSet();\r\n newSet.comparator = this.comparator;\r\n newSet.keyedMap = keyedMap;\r\n newSet.sortedSet = sortedSet;\r\n return newSet;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * DocumentChangeSet keeps track of a set of changes to docs in a query, merging\r\n * duplicate events for the same doc.\r\n */\r\nclass DocumentChangeSet {\r\n constructor() {\r\n this.changeMap = new SortedMap(DocumentKey.comparator);\r\n }\r\n track(change) {\r\n const key = change.doc.key;\r\n const oldChange = this.changeMap.get(key);\r\n if (!oldChange) {\r\n this.changeMap = this.changeMap.insert(key, change);\r\n return;\r\n }\r\n // Merge the new change with the existing change.\r\n if (change.type !== 0 /* ChangeType.Added */ &&\r\n oldChange.type === 3 /* ChangeType.Metadata */) {\r\n this.changeMap = this.changeMap.insert(key, change);\r\n }\r\n else if (change.type === 3 /* ChangeType.Metadata */ &&\r\n oldChange.type !== 1 /* ChangeType.Removed */) {\r\n this.changeMap = this.changeMap.insert(key, {\r\n type: oldChange.type,\r\n doc: change.doc\r\n });\r\n }\r\n else if (change.type === 2 /* ChangeType.Modified */ &&\r\n oldChange.type === 2 /* ChangeType.Modified */) {\r\n this.changeMap = this.changeMap.insert(key, {\r\n type: 2 /* ChangeType.Modified */,\r\n doc: change.doc\r\n });\r\n }\r\n else if (change.type === 2 /* ChangeType.Modified */ &&\r\n oldChange.type === 0 /* ChangeType.Added */) {\r\n this.changeMap = this.changeMap.insert(key, {\r\n type: 0 /* ChangeType.Added */,\r\n doc: change.doc\r\n });\r\n }\r\n else if (change.type === 1 /* ChangeType.Removed */ &&\r\n oldChange.type === 0 /* ChangeType.Added */) {\r\n this.changeMap = this.changeMap.remove(key);\r\n }\r\n else if (change.type === 1 /* ChangeType.Removed */ &&\r\n oldChange.type === 2 /* ChangeType.Modified */) {\r\n this.changeMap = this.changeMap.insert(key, {\r\n type: 1 /* ChangeType.Removed */,\r\n doc: oldChange.doc\r\n });\r\n }\r\n else if (change.type === 0 /* ChangeType.Added */ &&\r\n oldChange.type === 1 /* ChangeType.Removed */) {\r\n this.changeMap = this.changeMap.insert(key, {\r\n type: 2 /* ChangeType.Modified */,\r\n doc: change.doc\r\n });\r\n }\r\n else {\r\n // This includes these cases, which don't make sense:\r\n // Added->Added\r\n // Removed->Removed\r\n // Modified->Added\r\n // Removed->Modified\r\n // Metadata->Added\r\n // Removed->Metadata\r\n fail();\r\n }\r\n }\r\n getChanges() {\r\n const changes = [];\r\n this.changeMap.inorderTraversal((key, change) => {\r\n changes.push(change);\r\n });\r\n return changes;\r\n }\r\n}\r\nclass ViewSnapshot {\r\n constructor(query, docs, oldDocs, docChanges, mutatedKeys, fromCache, syncStateChanged, excludesMetadataChanges, hasCachedResults) {\r\n this.query = query;\r\n this.docs = docs;\r\n this.oldDocs = oldDocs;\r\n this.docChanges = docChanges;\r\n this.mutatedKeys = mutatedKeys;\r\n this.fromCache = fromCache;\r\n this.syncStateChanged = syncStateChanged;\r\n this.excludesMetadataChanges = excludesMetadataChanges;\r\n this.hasCachedResults = hasCachedResults;\r\n }\r\n /** Returns a view snapshot as if all documents in the snapshot were added. */\r\n static fromInitialDocuments(query, documents, mutatedKeys, fromCache, hasCachedResults) {\r\n const changes = [];\r\n documents.forEach(doc => {\r\n changes.push({ type: 0 /* ChangeType.Added */, doc });\r\n });\r\n return new ViewSnapshot(query, documents, DocumentSet.emptySet(documents), changes, mutatedKeys, fromCache, \r\n /* syncStateChanged= */ true, \r\n /* excludesMetadataChanges= */ false, hasCachedResults);\r\n }\r\n get hasPendingWrites() {\r\n return !this.mutatedKeys.isEmpty();\r\n }\r\n isEqual(other) {\r\n if (this.fromCache !== other.fromCache ||\r\n this.hasCachedResults !== other.hasCachedResults ||\r\n this.syncStateChanged !== other.syncStateChanged ||\r\n !this.mutatedKeys.isEqual(other.mutatedKeys) ||\r\n !queryEquals(this.query, other.query) ||\r\n !this.docs.isEqual(other.docs) ||\r\n !this.oldDocs.isEqual(other.oldDocs)) {\r\n return false;\r\n }\r\n const changes = this.docChanges;\r\n const otherChanges = other.docChanges;\r\n if (changes.length !== otherChanges.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < changes.length; i++) {\r\n if (changes[i].type !== otherChanges[i].type ||\r\n !changes[i].doc.isEqual(otherChanges[i].doc)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Holds the listeners and the last received ViewSnapshot for a query being\r\n * tracked by EventManager.\r\n */\r\nclass QueryListenersInfo {\r\n constructor() {\r\n this.viewSnap = undefined;\r\n this.listeners = [];\r\n }\r\n}\r\nfunction newEventManager() {\r\n return new EventManagerImpl();\r\n}\r\nclass EventManagerImpl {\r\n constructor() {\r\n this.queries = new ObjectMap(q => canonifyQuery(q), queryEquals);\r\n this.onlineState = \"Unknown\" /* OnlineState.Unknown */;\r\n this.snapshotsInSyncListeners = new Set();\r\n }\r\n}\r\nasync function eventManagerListen(eventManager, listener) {\r\n const eventManagerImpl = debugCast(eventManager);\r\n const query = listener.query;\r\n let firstListen = false;\r\n let queryInfo = eventManagerImpl.queries.get(query);\r\n if (!queryInfo) {\r\n firstListen = true;\r\n queryInfo = new QueryListenersInfo();\r\n }\r\n if (firstListen) {\r\n try {\r\n queryInfo.viewSnap = await eventManagerImpl.onListen(query);\r\n }\r\n catch (e) {\r\n const firestoreError = wrapInUserErrorIfRecoverable(e, `Initialization of query '${stringifyQuery(listener.query)}' failed`);\r\n listener.onError(firestoreError);\r\n return;\r\n }\r\n }\r\n eventManagerImpl.queries.set(query, queryInfo);\r\n queryInfo.listeners.push(listener);\r\n // Run global snapshot listeners if a consistent snapshot has been emitted.\r\n listener.applyOnlineStateChange(eventManagerImpl.onlineState);\r\n if (queryInfo.viewSnap) {\r\n const raisedEvent = listener.onViewSnapshot(queryInfo.viewSnap);\r\n if (raisedEvent) {\r\n raiseSnapshotsInSyncEvent(eventManagerImpl);\r\n }\r\n }\r\n}\r\nasync function eventManagerUnlisten(eventManager, listener) {\r\n const eventManagerImpl = debugCast(eventManager);\r\n const query = listener.query;\r\n let lastListen = false;\r\n const queryInfo = eventManagerImpl.queries.get(query);\r\n if (queryInfo) {\r\n const i = queryInfo.listeners.indexOf(listener);\r\n if (i >= 0) {\r\n queryInfo.listeners.splice(i, 1);\r\n lastListen = queryInfo.listeners.length === 0;\r\n }\r\n }\r\n if (lastListen) {\r\n eventManagerImpl.queries.delete(query);\r\n return eventManagerImpl.onUnlisten(query);\r\n }\r\n}\r\nfunction eventManagerOnWatchChange(eventManager, viewSnaps) {\r\n const eventManagerImpl = debugCast(eventManager);\r\n let raisedEvent = false;\r\n for (const viewSnap of viewSnaps) {\r\n const query = viewSnap.query;\r\n const queryInfo = eventManagerImpl.queries.get(query);\r\n if (queryInfo) {\r\n for (const listener of queryInfo.listeners) {\r\n if (listener.onViewSnapshot(viewSnap)) {\r\n raisedEvent = true;\r\n }\r\n }\r\n queryInfo.viewSnap = viewSnap;\r\n }\r\n }\r\n if (raisedEvent) {\r\n raiseSnapshotsInSyncEvent(eventManagerImpl);\r\n }\r\n}\r\nfunction eventManagerOnWatchError(eventManager, query, error) {\r\n const eventManagerImpl = debugCast(eventManager);\r\n const queryInfo = eventManagerImpl.queries.get(query);\r\n if (queryInfo) {\r\n for (const listener of queryInfo.listeners) {\r\n listener.onError(error);\r\n }\r\n }\r\n // Remove all listeners. NOTE: We don't need to call syncEngine.unlisten()\r\n // after an error.\r\n eventManagerImpl.queries.delete(query);\r\n}\r\nfunction eventManagerOnOnlineStateChange(eventManager, onlineState) {\r\n const eventManagerImpl = debugCast(eventManager);\r\n eventManagerImpl.onlineState = onlineState;\r\n let raisedEvent = false;\r\n eventManagerImpl.queries.forEach((_, queryInfo) => {\r\n for (const listener of queryInfo.listeners) {\r\n // Run global snapshot listeners if a consistent snapshot has been emitted.\r\n if (listener.applyOnlineStateChange(onlineState)) {\r\n raisedEvent = true;\r\n }\r\n }\r\n });\r\n if (raisedEvent) {\r\n raiseSnapshotsInSyncEvent(eventManagerImpl);\r\n }\r\n}\r\nfunction addSnapshotsInSyncListener(eventManager, observer) {\r\n const eventManagerImpl = debugCast(eventManager);\r\n eventManagerImpl.snapshotsInSyncListeners.add(observer);\r\n // Immediately fire an initial event, indicating all existing listeners\r\n // are in-sync.\r\n observer.next();\r\n}\r\nfunction removeSnapshotsInSyncListener(eventManager, observer) {\r\n const eventManagerImpl = debugCast(eventManager);\r\n eventManagerImpl.snapshotsInSyncListeners.delete(observer);\r\n}\r\n// Call all global snapshot listeners that have been set.\r\nfunction raiseSnapshotsInSyncEvent(eventManagerImpl) {\r\n eventManagerImpl.snapshotsInSyncListeners.forEach(observer => {\r\n observer.next();\r\n });\r\n}\r\n/**\r\n * QueryListener takes a series of internal view snapshots and determines\r\n * when to raise the event.\r\n *\r\n * It uses an Observer to dispatch events.\r\n */\r\nclass QueryListener {\r\n constructor(query, queryObserver, options) {\r\n this.query = query;\r\n this.queryObserver = queryObserver;\r\n /**\r\n * Initial snapshots (e.g. from cache) may not be propagated to the wrapped\r\n * observer. This flag is set to true once we've actually raised an event.\r\n */\r\n this.raisedInitialEvent = false;\r\n this.snap = null;\r\n this.onlineState = \"Unknown\" /* OnlineState.Unknown */;\r\n this.options = options || {};\r\n }\r\n /**\r\n * Applies the new ViewSnapshot to this listener, raising a user-facing event\r\n * if applicable (depending on what changed, whether the user has opted into\r\n * metadata-only changes, etc.). Returns true if a user-facing event was\r\n * indeed raised.\r\n */\r\n onViewSnapshot(snap) {\r\n if (!this.options.includeMetadataChanges) {\r\n // Remove the metadata only changes.\r\n const docChanges = [];\r\n for (const docChange of snap.docChanges) {\r\n if (docChange.type !== 3 /* ChangeType.Metadata */) {\r\n docChanges.push(docChange);\r\n }\r\n }\r\n snap = new ViewSnapshot(snap.query, snap.docs, snap.oldDocs, docChanges, snap.mutatedKeys, snap.fromCache, snap.syncStateChanged, \r\n /* excludesMetadataChanges= */ true, snap.hasCachedResults);\r\n }\r\n let raisedEvent = false;\r\n if (!this.raisedInitialEvent) {\r\n if (this.shouldRaiseInitialEvent(snap, this.onlineState)) {\r\n this.raiseInitialEvent(snap);\r\n raisedEvent = true;\r\n }\r\n }\r\n else if (this.shouldRaiseEvent(snap)) {\r\n this.queryObserver.next(snap);\r\n raisedEvent = true;\r\n }\r\n this.snap = snap;\r\n return raisedEvent;\r\n }\r\n onError(error) {\r\n this.queryObserver.error(error);\r\n }\r\n /** Returns whether a snapshot was raised. */\r\n applyOnlineStateChange(onlineState) {\r\n this.onlineState = onlineState;\r\n let raisedEvent = false;\r\n if (this.snap &&\r\n !this.raisedInitialEvent &&\r\n this.shouldRaiseInitialEvent(this.snap, onlineState)) {\r\n this.raiseInitialEvent(this.snap);\r\n raisedEvent = true;\r\n }\r\n return raisedEvent;\r\n }\r\n shouldRaiseInitialEvent(snap, onlineState) {\r\n // Always raise the first event when we're synced\r\n if (!snap.fromCache) {\r\n return true;\r\n }\r\n // NOTE: We consider OnlineState.Unknown as online (it should become Offline\r\n // or Online if we wait long enough).\r\n const maybeOnline = onlineState !== \"Offline\" /* OnlineState.Offline */;\r\n // Don't raise the event if we're online, aren't synced yet (checked\r\n // above) and are waiting for a sync.\r\n if (this.options.waitForSyncWhenOnline && maybeOnline) {\r\n return false;\r\n }\r\n // Raise data from cache if we have any documents, have cached results before,\r\n // or we are offline.\r\n return (!snap.docs.isEmpty() ||\r\n snap.hasCachedResults ||\r\n onlineState === \"Offline\" /* OnlineState.Offline */);\r\n }\r\n shouldRaiseEvent(snap) {\r\n // We don't need to handle includeDocumentMetadataChanges here because\r\n // the Metadata only changes have already been stripped out if needed.\r\n // At this point the only changes we will see are the ones we should\r\n // propagate.\r\n if (snap.docChanges.length > 0) {\r\n return true;\r\n }\r\n const hasPendingWritesChanged = this.snap && this.snap.hasPendingWrites !== snap.hasPendingWrites;\r\n if (snap.syncStateChanged || hasPendingWritesChanged) {\r\n return this.options.includeMetadataChanges === true;\r\n }\r\n // Generally we should have hit one of the cases above, but it's possible\r\n // to get here if there were only metadata docChanges and they got\r\n // stripped out.\r\n return false;\r\n }\r\n raiseInitialEvent(snap) {\r\n snap = ViewSnapshot.fromInitialDocuments(snap.query, snap.docs, snap.mutatedKeys, snap.fromCache, snap.hasCachedResults);\r\n this.raisedInitialEvent = true;\r\n this.queryObserver.next(snap);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A set of changes to what documents are currently in view and out of view for\r\n * a given query. These changes are sent to the LocalStore by the View (via\r\n * the SyncEngine) and are used to pin / unpin documents as appropriate.\r\n */\r\nclass LocalViewChanges {\r\n constructor(targetId, fromCache, addedKeys, removedKeys) {\r\n this.targetId = targetId;\r\n this.fromCache = fromCache;\r\n this.addedKeys = addedKeys;\r\n this.removedKeys = removedKeys;\r\n }\r\n static fromSnapshot(targetId, viewSnapshot) {\r\n let addedKeys = documentKeySet();\r\n let removedKeys = documentKeySet();\r\n for (const docChange of viewSnapshot.docChanges) {\r\n switch (docChange.type) {\r\n case 0 /* ChangeType.Added */:\r\n addedKeys = addedKeys.add(docChange.doc.key);\r\n break;\r\n case 1 /* ChangeType.Removed */:\r\n removedKeys = removedKeys.add(docChange.doc.key);\r\n break;\r\n // do nothing\r\n }\r\n }\r\n return new LocalViewChanges(targetId, viewSnapshot.fromCache, addedKeys, removedKeys);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Helper to convert objects from bundles to model objects in the SDK.\r\n */\r\nclass BundleConverterImpl {\r\n constructor(serializer) {\r\n this.serializer = serializer;\r\n }\r\n toDocumentKey(name) {\r\n return fromName(this.serializer, name);\r\n }\r\n /**\r\n * Converts a BundleDocument to a MutableDocument.\r\n */\r\n toMutableDocument(bundledDoc) {\r\n if (bundledDoc.metadata.exists) {\r\n return fromDocument(this.serializer, bundledDoc.document, false);\r\n }\r\n else {\r\n return MutableDocument.newNoDocument(this.toDocumentKey(bundledDoc.metadata.name), this.toSnapshotVersion(bundledDoc.metadata.readTime));\r\n }\r\n }\r\n toSnapshotVersion(time) {\r\n return fromVersion(time);\r\n }\r\n}\r\n/**\r\n * A class to process the elements from a bundle, load them into local\r\n * storage and provide progress update while loading.\r\n */\r\nclass BundleLoader {\r\n constructor(bundleMetadata, localStore, serializer) {\r\n this.bundleMetadata = bundleMetadata;\r\n this.localStore = localStore;\r\n this.serializer = serializer;\r\n /** Batched queries to be saved into storage */\r\n this.queries = [];\r\n /** Batched documents to be saved into storage */\r\n this.documents = [];\r\n /** The collection groups affected by this bundle. */\r\n this.collectionGroups = new Set();\r\n this.progress = bundleInitialProgress(bundleMetadata);\r\n }\r\n /**\r\n * Adds an element from the bundle to the loader.\r\n *\r\n * Returns a new progress if adding the element leads to a new progress,\r\n * otherwise returns null.\r\n */\r\n addSizedElement(element) {\r\n this.progress.bytesLoaded += element.byteLength;\r\n let documentsLoaded = this.progress.documentsLoaded;\r\n if (element.payload.namedQuery) {\r\n this.queries.push(element.payload.namedQuery);\r\n }\r\n else if (element.payload.documentMetadata) {\r\n this.documents.push({ metadata: element.payload.documentMetadata });\r\n if (!element.payload.documentMetadata.exists) {\r\n ++documentsLoaded;\r\n }\r\n const path = ResourcePath.fromString(element.payload.documentMetadata.name);\r\n this.collectionGroups.add(path.get(path.length - 2));\r\n }\r\n else if (element.payload.document) {\r\n this.documents[this.documents.length - 1].document =\r\n element.payload.document;\r\n ++documentsLoaded;\r\n }\r\n if (documentsLoaded !== this.progress.documentsLoaded) {\r\n this.progress.documentsLoaded = documentsLoaded;\r\n return Object.assign({}, this.progress);\r\n }\r\n return null;\r\n }\r\n getQueryDocumentMapping(documents) {\r\n const queryDocumentMap = new Map();\r\n const bundleConverter = new BundleConverterImpl(this.serializer);\r\n for (const bundleDoc of documents) {\r\n if (bundleDoc.metadata.queries) {\r\n const documentKey = bundleConverter.toDocumentKey(bundleDoc.metadata.name);\r\n for (const queryName of bundleDoc.metadata.queries) {\r\n const documentKeys = (queryDocumentMap.get(queryName) || documentKeySet()).add(documentKey);\r\n queryDocumentMap.set(queryName, documentKeys);\r\n }\r\n }\r\n }\r\n return queryDocumentMap;\r\n }\r\n /**\r\n * Update the progress to 'Success' and return the updated progress.\r\n */\r\n async complete() {\r\n const changedDocs = await localStoreApplyBundledDocuments(this.localStore, new BundleConverterImpl(this.serializer), this.documents, this.bundleMetadata.id);\r\n const queryDocumentMap = this.getQueryDocumentMapping(this.documents);\r\n for (const q of this.queries) {\r\n await localStoreSaveNamedQuery(this.localStore, q, queryDocumentMap.get(q.name));\r\n }\r\n this.progress.taskState = 'Success';\r\n return {\r\n progress: this.progress,\r\n changedCollectionGroups: this.collectionGroups,\r\n changedDocs\r\n };\r\n }\r\n}\r\n/**\r\n * Returns a `LoadBundleTaskProgress` representing the initial progress of\r\n * loading a bundle.\r\n */\r\nfunction bundleInitialProgress(metadata) {\r\n return {\r\n taskState: 'Running',\r\n documentsLoaded: 0,\r\n bytesLoaded: 0,\r\n totalDocuments: metadata.totalDocuments,\r\n totalBytes: metadata.totalBytes\r\n };\r\n}\r\n/**\r\n * Returns a `LoadBundleTaskProgress` representing the progress that the loading\r\n * has succeeded.\r\n */\r\nfunction bundleSuccessProgress(metadata) {\r\n return {\r\n taskState: 'Success',\r\n documentsLoaded: metadata.totalDocuments,\r\n bytesLoaded: metadata.totalBytes,\r\n totalDocuments: metadata.totalDocuments,\r\n totalBytes: metadata.totalBytes\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AddedLimboDocument {\r\n constructor(key) {\r\n this.key = key;\r\n }\r\n}\r\nclass RemovedLimboDocument {\r\n constructor(key) {\r\n this.key = key;\r\n }\r\n}\r\n/**\r\n * View is responsible for computing the final merged truth of what docs are in\r\n * a query. It gets notified of local and remote changes to docs, and applies\r\n * the query filters and limits to determine the most correct possible results.\r\n */\r\nclass View {\r\n constructor(query, \r\n /** Documents included in the remote target */\r\n _syncedDocuments) {\r\n this.query = query;\r\n this._syncedDocuments = _syncedDocuments;\r\n this.syncState = null;\r\n this.hasCachedResults = false;\r\n /**\r\n * A flag whether the view is current with the backend. A view is considered\r\n * current after it has seen the current flag from the backend and did not\r\n * lose consistency within the watch stream (e.g. because of an existence\r\n * filter mismatch).\r\n */\r\n this.current = false;\r\n /** Documents in the view but not in the remote target */\r\n this.limboDocuments = documentKeySet();\r\n /** Document Keys that have local changes */\r\n this.mutatedKeys = documentKeySet();\r\n this.docComparator = newQueryComparator(query);\r\n this.documentSet = new DocumentSet(this.docComparator);\r\n }\r\n /**\r\n * The set of remote documents that the server has told us belongs to the target associated with\r\n * this view.\r\n */\r\n get syncedDocuments() {\r\n return this._syncedDocuments;\r\n }\r\n /**\r\n * Iterates over a set of doc changes, applies the query limit, and computes\r\n * what the new results should be, what the changes were, and whether we may\r\n * need to go back to the local cache for more results. Does not make any\r\n * changes to the view.\r\n * @param docChanges - The doc changes to apply to this view.\r\n * @param previousChanges - If this is being called with a refill, then start\r\n * with this set of docs and changes instead of the current view.\r\n * @returns a new set of docs, changes, and refill flag.\r\n */\r\n computeDocChanges(docChanges, previousChanges) {\r\n const changeSet = previousChanges\r\n ? previousChanges.changeSet\r\n : new DocumentChangeSet();\r\n const oldDocumentSet = previousChanges\r\n ? previousChanges.documentSet\r\n : this.documentSet;\r\n let newMutatedKeys = previousChanges\r\n ? previousChanges.mutatedKeys\r\n : this.mutatedKeys;\r\n let newDocumentSet = oldDocumentSet;\r\n let needsRefill = false;\r\n // Track the last doc in a (full) limit. This is necessary, because some\r\n // update (a delete, or an update moving a doc past the old limit) might\r\n // mean there is some other document in the local cache that either should\r\n // come (1) between the old last limit doc and the new last document, in the\r\n // case of updates, or (2) after the new last document, in the case of\r\n // deletes. So we keep this doc at the old limit to compare the updates to.\r\n //\r\n // Note that this should never get used in a refill (when previousChanges is\r\n // set), because there will only be adds -- no deletes or updates.\r\n const lastDocInLimit = this.query.limitType === \"F\" /* LimitType.First */ &&\r\n oldDocumentSet.size === this.query.limit\r\n ? oldDocumentSet.last()\r\n : null;\r\n const firstDocInLimit = this.query.limitType === \"L\" /* LimitType.Last */ &&\r\n oldDocumentSet.size === this.query.limit\r\n ? oldDocumentSet.first()\r\n : null;\r\n docChanges.inorderTraversal((key, entry) => {\r\n const oldDoc = oldDocumentSet.get(key);\r\n const newDoc = queryMatches(this.query, entry) ? entry : null;\r\n const oldDocHadPendingMutations = oldDoc\r\n ? this.mutatedKeys.has(oldDoc.key)\r\n : false;\r\n const newDocHasPendingMutations = newDoc\r\n ? newDoc.hasLocalMutations ||\r\n // We only consider committed mutations for documents that were\r\n // mutated during the lifetime of the view.\r\n (this.mutatedKeys.has(newDoc.key) && newDoc.hasCommittedMutations)\r\n : false;\r\n let changeApplied = false;\r\n // Calculate change\r\n if (oldDoc && newDoc) {\r\n const docsEqual = oldDoc.data.isEqual(newDoc.data);\r\n if (!docsEqual) {\r\n if (!this.shouldWaitForSyncedDocument(oldDoc, newDoc)) {\r\n changeSet.track({\r\n type: 2 /* ChangeType.Modified */,\r\n doc: newDoc\r\n });\r\n changeApplied = true;\r\n if ((lastDocInLimit &&\r\n this.docComparator(newDoc, lastDocInLimit) > 0) ||\r\n (firstDocInLimit &&\r\n this.docComparator(newDoc, firstDocInLimit) < 0)) {\r\n // This doc moved from inside the limit to outside the limit.\r\n // That means there may be some other doc in the local cache\r\n // that should be included instead.\r\n needsRefill = true;\r\n }\r\n }\r\n }\r\n else if (oldDocHadPendingMutations !== newDocHasPendingMutations) {\r\n changeSet.track({ type: 3 /* ChangeType.Metadata */, doc: newDoc });\r\n changeApplied = true;\r\n }\r\n }\r\n else if (!oldDoc && newDoc) {\r\n changeSet.track({ type: 0 /* ChangeType.Added */, doc: newDoc });\r\n changeApplied = true;\r\n }\r\n else if (oldDoc && !newDoc) {\r\n changeSet.track({ type: 1 /* ChangeType.Removed */, doc: oldDoc });\r\n changeApplied = true;\r\n if (lastDocInLimit || firstDocInLimit) {\r\n // A doc was removed from a full limit query. We'll need to\r\n // requery from the local cache to see if we know about some other\r\n // doc that should be in the results.\r\n needsRefill = true;\r\n }\r\n }\r\n if (changeApplied) {\r\n if (newDoc) {\r\n newDocumentSet = newDocumentSet.add(newDoc);\r\n if (newDocHasPendingMutations) {\r\n newMutatedKeys = newMutatedKeys.add(key);\r\n }\r\n else {\r\n newMutatedKeys = newMutatedKeys.delete(key);\r\n }\r\n }\r\n else {\r\n newDocumentSet = newDocumentSet.delete(key);\r\n newMutatedKeys = newMutatedKeys.delete(key);\r\n }\r\n }\r\n });\r\n // Drop documents out to meet limit/limitToLast requirement.\r\n if (this.query.limit !== null) {\r\n while (newDocumentSet.size > this.query.limit) {\r\n const oldDoc = this.query.limitType === \"F\" /* LimitType.First */\r\n ? newDocumentSet.last()\r\n : newDocumentSet.first();\r\n newDocumentSet = newDocumentSet.delete(oldDoc.key);\r\n newMutatedKeys = newMutatedKeys.delete(oldDoc.key);\r\n changeSet.track({ type: 1 /* ChangeType.Removed */, doc: oldDoc });\r\n }\r\n }\r\n return {\r\n documentSet: newDocumentSet,\r\n changeSet,\r\n needsRefill,\r\n mutatedKeys: newMutatedKeys\r\n };\r\n }\r\n shouldWaitForSyncedDocument(oldDoc, newDoc) {\r\n // We suppress the initial change event for documents that were modified as\r\n // part of a write acknowledgment (e.g. when the value of a server transform\r\n // is applied) as Watch will send us the same document again.\r\n // By suppressing the event, we only raise two user visible events (one with\r\n // `hasPendingWrites` and the final state of the document) instead of three\r\n // (one with `hasPendingWrites`, the modified document with\r\n // `hasPendingWrites` and the final state of the document).\r\n return (oldDoc.hasLocalMutations &&\r\n newDoc.hasCommittedMutations &&\r\n !newDoc.hasLocalMutations);\r\n }\r\n /**\r\n * Updates the view with the given ViewDocumentChanges and optionally updates\r\n * limbo docs and sync state from the provided target change.\r\n * @param docChanges - The set of changes to make to the view's docs.\r\n * @param updateLimboDocuments - Whether to update limbo documents based on\r\n * this change.\r\n * @param targetChange - A target change to apply for computing limbo docs and\r\n * sync state.\r\n * @returns A new ViewChange with the given docs, changes, and sync state.\r\n */\r\n // PORTING NOTE: The iOS/Android clients always compute limbo document changes.\r\n applyChanges(docChanges, updateLimboDocuments, targetChange) {\r\n const oldDocs = this.documentSet;\r\n this.documentSet = docChanges.documentSet;\r\n this.mutatedKeys = docChanges.mutatedKeys;\r\n // Sort changes based on type and query comparator\r\n const changes = docChanges.changeSet.getChanges();\r\n changes.sort((c1, c2) => {\r\n return (compareChangeType(c1.type, c2.type) ||\r\n this.docComparator(c1.doc, c2.doc));\r\n });\r\n this.applyTargetChange(targetChange);\r\n const limboChanges = updateLimboDocuments\r\n ? this.updateLimboDocuments()\r\n : [];\r\n const synced = this.limboDocuments.size === 0 && this.current;\r\n const newSyncState = synced ? 1 /* SyncState.Synced */ : 0 /* SyncState.Local */;\r\n const syncStateChanged = newSyncState !== this.syncState;\r\n this.syncState = newSyncState;\r\n if (changes.length === 0 && !syncStateChanged) {\r\n // no changes\r\n return { limboChanges };\r\n }\r\n else {\r\n const snap = new ViewSnapshot(this.query, docChanges.documentSet, oldDocs, changes, docChanges.mutatedKeys, newSyncState === 0 /* SyncState.Local */, syncStateChanged, \r\n /* excludesMetadataChanges= */ false, targetChange\r\n ? targetChange.resumeToken.approximateByteSize() > 0\r\n : false);\r\n return {\r\n snapshot: snap,\r\n limboChanges\r\n };\r\n }\r\n }\r\n /**\r\n * Applies an OnlineState change to the view, potentially generating a\r\n * ViewChange if the view's syncState changes as a result.\r\n */\r\n applyOnlineStateChange(onlineState) {\r\n if (this.current && onlineState === \"Offline\" /* OnlineState.Offline */) {\r\n // If we're offline, set `current` to false and then call applyChanges()\r\n // to refresh our syncState and generate a ViewChange as appropriate. We\r\n // are guaranteed to get a new TargetChange that sets `current` back to\r\n // true once the client is back online.\r\n this.current = false;\r\n return this.applyChanges({\r\n documentSet: this.documentSet,\r\n changeSet: new DocumentChangeSet(),\r\n mutatedKeys: this.mutatedKeys,\r\n needsRefill: false\r\n }, \r\n /* updateLimboDocuments= */ false);\r\n }\r\n else {\r\n // No effect, just return a no-op ViewChange.\r\n return { limboChanges: [] };\r\n }\r\n }\r\n /**\r\n * Returns whether the doc for the given key should be in limbo.\r\n */\r\n shouldBeInLimbo(key) {\r\n // If the remote end says it's part of this query, it's not in limbo.\r\n if (this._syncedDocuments.has(key)) {\r\n return false;\r\n }\r\n // The local store doesn't think it's a result, so it shouldn't be in limbo.\r\n if (!this.documentSet.has(key)) {\r\n return false;\r\n }\r\n // If there are local changes to the doc, they might explain why the server\r\n // doesn't know that it's part of the query. So don't put it in limbo.\r\n // TODO(klimt): Ideally, we would only consider changes that might actually\r\n // affect this specific query.\r\n if (this.documentSet.get(key).hasLocalMutations) {\r\n return false;\r\n }\r\n // Everything else is in limbo.\r\n return true;\r\n }\r\n /**\r\n * Updates syncedDocuments, current, and limbo docs based on the given change.\r\n * Returns the list of changes to which docs are in limbo.\r\n */\r\n applyTargetChange(targetChange) {\r\n if (targetChange) {\r\n targetChange.addedDocuments.forEach(key => (this._syncedDocuments = this._syncedDocuments.add(key)));\r\n targetChange.modifiedDocuments.forEach(key => {\r\n });\r\n targetChange.removedDocuments.forEach(key => (this._syncedDocuments = this._syncedDocuments.delete(key)));\r\n this.current = targetChange.current;\r\n }\r\n }\r\n updateLimboDocuments() {\r\n // We can only determine limbo documents when we're in-sync with the server.\r\n if (!this.current) {\r\n return [];\r\n }\r\n // TODO(klimt): Do this incrementally so that it's not quadratic when\r\n // updating many documents.\r\n const oldLimboDocuments = this.limboDocuments;\r\n this.limboDocuments = documentKeySet();\r\n this.documentSet.forEach(doc => {\r\n if (this.shouldBeInLimbo(doc.key)) {\r\n this.limboDocuments = this.limboDocuments.add(doc.key);\r\n }\r\n });\r\n // Diff the new limbo docs with the old limbo docs.\r\n const changes = [];\r\n oldLimboDocuments.forEach(key => {\r\n if (!this.limboDocuments.has(key)) {\r\n changes.push(new RemovedLimboDocument(key));\r\n }\r\n });\r\n this.limboDocuments.forEach(key => {\r\n if (!oldLimboDocuments.has(key)) {\r\n changes.push(new AddedLimboDocument(key));\r\n }\r\n });\r\n return changes;\r\n }\r\n /**\r\n * Update the in-memory state of the current view with the state read from\r\n * persistence.\r\n *\r\n * We update the query view whenever a client's primary status changes:\r\n * - When a client transitions from primary to secondary, it can miss\r\n * LocalStorage updates and its query views may temporarily not be\r\n * synchronized with the state on disk.\r\n * - For secondary to primary transitions, the client needs to update the list\r\n * of `syncedDocuments` since secondary clients update their query views\r\n * based purely on synthesized RemoteEvents.\r\n *\r\n * @param queryResult.documents - The documents that match the query according\r\n * to the LocalStore.\r\n * @param queryResult.remoteKeys - The keys of the documents that match the\r\n * query according to the backend.\r\n *\r\n * @returns The ViewChange that resulted from this synchronization.\r\n */\r\n // PORTING NOTE: Multi-tab only.\r\n synchronizeWithPersistedState(queryResult) {\r\n this._syncedDocuments = queryResult.remoteKeys;\r\n this.limboDocuments = documentKeySet();\r\n const docChanges = this.computeDocChanges(queryResult.documents);\r\n return this.applyChanges(docChanges, /*updateLimboDocuments=*/ true);\r\n }\r\n /**\r\n * Returns a view snapshot as if this query was just listened to. Contains\r\n * a document add for every existing document and the `fromCache` and\r\n * `hasPendingWrites` status of the already established view.\r\n */\r\n // PORTING NOTE: Multi-tab only.\r\n computeInitialSnapshot() {\r\n return ViewSnapshot.fromInitialDocuments(this.query, this.documentSet, this.mutatedKeys, this.syncState === 0 /* SyncState.Local */, this.hasCachedResults);\r\n }\r\n}\r\nfunction compareChangeType(c1, c2) {\r\n const order = (change) => {\r\n switch (change) {\r\n case 0 /* ChangeType.Added */:\r\n return 1;\r\n case 2 /* ChangeType.Modified */:\r\n return 2;\r\n case 3 /* ChangeType.Metadata */:\r\n // A metadata change is converted to a modified change at the public\r\n // api layer. Since we sort by document key and then change type,\r\n // metadata and modified changes must be sorted equivalently.\r\n return 2;\r\n case 1 /* ChangeType.Removed */:\r\n return 0;\r\n default:\r\n return fail();\r\n }\r\n };\r\n return order(c1) - order(c2);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$3 = 'SyncEngine';\r\n/**\r\n * QueryView contains all of the data that SyncEngine needs to keep track of for\r\n * a particular query.\r\n */\r\nclass QueryView {\r\n constructor(\r\n /**\r\n * The query itself.\r\n */\r\n query, \r\n /**\r\n * The target number created by the client that is used in the watch\r\n * stream to identify this query.\r\n */\r\n targetId, \r\n /**\r\n * The view is responsible for computing the final merged truth of what\r\n * docs are in the query. It gets notified of local and remote changes,\r\n * and applies the query filters and limits to determine the most correct\r\n * possible results.\r\n */\r\n view) {\r\n this.query = query;\r\n this.targetId = targetId;\r\n this.view = view;\r\n }\r\n}\r\n/** Tracks a limbo resolution. */\r\nclass LimboResolution {\r\n constructor(key) {\r\n this.key = key;\r\n /**\r\n * Set to true once we've received a document. This is used in\r\n * getRemoteKeysForTarget() and ultimately used by WatchChangeAggregator to\r\n * decide whether it needs to manufacture a delete event for the target once\r\n * the target is CURRENT.\r\n */\r\n this.receivedDocument = false;\r\n }\r\n}\r\n/**\r\n * An implementation of `SyncEngine` coordinating with other parts of SDK.\r\n *\r\n * The parts of SyncEngine that act as a callback to RemoteStore need to be\r\n * registered individually. This is done in `syncEngineWrite()` and\r\n * `syncEngineListen()` (as well as `applyPrimaryState()`) as these methods\r\n * serve as entry points to RemoteStore's functionality.\r\n *\r\n * Note: some field defined in this class might have public access level, but\r\n * the class is not exported so they are only accessible from this module.\r\n * This is useful to implement optional features (like bundles) in free\r\n * functions, such that they are tree-shakeable.\r\n */\r\nclass SyncEngineImpl {\r\n constructor(localStore, remoteStore, eventManager, \r\n // PORTING NOTE: Manages state synchronization in multi-tab environments.\r\n sharedClientState, currentUser, maxConcurrentLimboResolutions) {\r\n this.localStore = localStore;\r\n this.remoteStore = remoteStore;\r\n this.eventManager = eventManager;\r\n this.sharedClientState = sharedClientState;\r\n this.currentUser = currentUser;\r\n this.maxConcurrentLimboResolutions = maxConcurrentLimboResolutions;\r\n this.syncEngineListener = {};\r\n this.queryViewsByQuery = new ObjectMap(q => canonifyQuery(q), queryEquals);\r\n this.queriesByTarget = new Map();\r\n /**\r\n * The keys of documents that are in limbo for which we haven't yet started a\r\n * limbo resolution query. The strings in this set are the result of calling\r\n * `key.path.canonicalString()` where `key` is a `DocumentKey` object.\r\n *\r\n * The `Set` type was chosen because it provides efficient lookup and removal\r\n * of arbitrary elements and it also maintains insertion order, providing the\r\n * desired queue-like FIFO semantics.\r\n */\r\n this.enqueuedLimboResolutions = new Set();\r\n /**\r\n * Keeps track of the target ID for each document that is in limbo with an\r\n * active target.\r\n */\r\n this.activeLimboTargetsByKey = new SortedMap(DocumentKey.comparator);\r\n /**\r\n * Keeps track of the information about an active limbo resolution for each\r\n * active target ID that was started for the purpose of limbo resolution.\r\n */\r\n this.activeLimboResolutionsByTarget = new Map();\r\n this.limboDocumentRefs = new ReferenceSet();\r\n /** Stores user completion handlers, indexed by User and BatchId. */\r\n this.mutationUserCallbacks = {};\r\n /** Stores user callbacks waiting for all pending writes to be acknowledged. */\r\n this.pendingWritesCallbacks = new Map();\r\n this.limboTargetIdGenerator = TargetIdGenerator.forSyncEngine();\r\n this.onlineState = \"Unknown\" /* OnlineState.Unknown */;\r\n // The primary state is set to `true` or `false` immediately after Firestore\r\n // startup. In the interim, a client should only be considered primary if\r\n // `isPrimary` is true.\r\n this._isPrimaryClient = undefined;\r\n }\r\n get isPrimaryClient() {\r\n return this._isPrimaryClient === true;\r\n }\r\n}\r\nfunction newSyncEngine(localStore, remoteStore, eventManager, \r\n// PORTING NOTE: Manages state synchronization in multi-tab environments.\r\nsharedClientState, currentUser, maxConcurrentLimboResolutions, isPrimary) {\r\n const syncEngine = new SyncEngineImpl(localStore, remoteStore, eventManager, sharedClientState, currentUser, maxConcurrentLimboResolutions);\r\n if (isPrimary) {\r\n syncEngine._isPrimaryClient = true;\r\n }\r\n return syncEngine;\r\n}\r\n/**\r\n * Initiates the new listen, resolves promise when listen enqueued to the\r\n * server. All the subsequent view snapshots or errors are sent to the\r\n * subscribed handlers. Returns the initial snapshot.\r\n */\r\nasync function syncEngineListen(syncEngine, query) {\r\n const syncEngineImpl = ensureWatchCallbacks(syncEngine);\r\n let targetId;\r\n let viewSnapshot;\r\n const queryView = syncEngineImpl.queryViewsByQuery.get(query);\r\n if (queryView) {\r\n // PORTING NOTE: With Multi-Tab Web, it is possible that a query view\r\n // already exists when EventManager calls us for the first time. This\r\n // happens when the primary tab is already listening to this query on\r\n // behalf of another tab and the user of the primary also starts listening\r\n // to the query. EventManager will not have an assigned target ID in this\r\n // case and calls `listen` to obtain this ID.\r\n targetId = queryView.targetId;\r\n syncEngineImpl.sharedClientState.addLocalQueryTarget(targetId);\r\n viewSnapshot = queryView.view.computeInitialSnapshot();\r\n }\r\n else {\r\n const targetData = await localStoreAllocateTarget(syncEngineImpl.localStore, queryToTarget(query));\r\n if (syncEngineImpl.isPrimaryClient) {\r\n remoteStoreListen(syncEngineImpl.remoteStore, targetData);\r\n }\r\n const status = syncEngineImpl.sharedClientState.addLocalQueryTarget(targetData.targetId);\r\n targetId = targetData.targetId;\r\n viewSnapshot = await initializeViewAndComputeSnapshot(syncEngineImpl, query, targetId, status === 'current', targetData.resumeToken);\r\n }\r\n return viewSnapshot;\r\n}\r\n/**\r\n * Registers a view for a previously unknown query and computes its initial\r\n * snapshot.\r\n */\r\nasync function initializeViewAndComputeSnapshot(syncEngineImpl, query, targetId, current, resumeToken) {\r\n // PORTING NOTE: On Web only, we inject the code that registers new Limbo\r\n // targets based on view changes. This allows us to only depend on Limbo\r\n // changes when user code includes queries.\r\n syncEngineImpl.applyDocChanges = (queryView, changes, remoteEvent) => applyDocChanges(syncEngineImpl, queryView, changes, remoteEvent);\r\n const queryResult = await localStoreExecuteQuery(syncEngineImpl.localStore, query, \r\n /* usePreviousResults= */ true);\r\n const view = new View(query, queryResult.remoteKeys);\r\n const viewDocChanges = view.computeDocChanges(queryResult.documents);\r\n const synthesizedTargetChange = TargetChange.createSynthesizedTargetChangeForCurrentChange(targetId, current && syncEngineImpl.onlineState !== \"Offline\" /* OnlineState.Offline */, resumeToken);\r\n const viewChange = view.applyChanges(viewDocChanges, \r\n /* updateLimboDocuments= */ syncEngineImpl.isPrimaryClient, synthesizedTargetChange);\r\n updateTrackedLimbos(syncEngineImpl, targetId, viewChange.limboChanges);\r\n const data = new QueryView(query, targetId, view);\r\n syncEngineImpl.queryViewsByQuery.set(query, data);\r\n if (syncEngineImpl.queriesByTarget.has(targetId)) {\r\n syncEngineImpl.queriesByTarget.get(targetId).push(query);\r\n }\r\n else {\r\n syncEngineImpl.queriesByTarget.set(targetId, [query]);\r\n }\r\n return viewChange.snapshot;\r\n}\r\n/** Stops listening to the query. */\r\nasync function syncEngineUnlisten(syncEngine, query) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n const queryView = syncEngineImpl.queryViewsByQuery.get(query);\r\n // Only clean up the query view and target if this is the only query mapped\r\n // to the target.\r\n const queries = syncEngineImpl.queriesByTarget.get(queryView.targetId);\r\n if (queries.length > 1) {\r\n syncEngineImpl.queriesByTarget.set(queryView.targetId, queries.filter(q => !queryEquals(q, query)));\r\n syncEngineImpl.queryViewsByQuery.delete(query);\r\n return;\r\n }\r\n // No other queries are mapped to the target, clean up the query and the target.\r\n if (syncEngineImpl.isPrimaryClient) {\r\n // We need to remove the local query target first to allow us to verify\r\n // whether any other client is still interested in this target.\r\n syncEngineImpl.sharedClientState.removeLocalQueryTarget(queryView.targetId);\r\n const targetRemainsActive = syncEngineImpl.sharedClientState.isActiveQueryTarget(queryView.targetId);\r\n if (!targetRemainsActive) {\r\n await localStoreReleaseTarget(syncEngineImpl.localStore, queryView.targetId, \r\n /*keepPersistedTargetData=*/ false)\r\n .then(() => {\r\n syncEngineImpl.sharedClientState.clearQueryState(queryView.targetId);\r\n remoteStoreUnlisten(syncEngineImpl.remoteStore, queryView.targetId);\r\n removeAndCleanupTarget(syncEngineImpl, queryView.targetId);\r\n })\r\n .catch(ignoreIfPrimaryLeaseLoss);\r\n }\r\n }\r\n else {\r\n removeAndCleanupTarget(syncEngineImpl, queryView.targetId);\r\n await localStoreReleaseTarget(syncEngineImpl.localStore, queryView.targetId, \r\n /*keepPersistedTargetData=*/ true);\r\n }\r\n}\r\n/**\r\n * Initiates the write of local mutation batch which involves adding the\r\n * writes to the mutation queue, notifying the remote store about new\r\n * mutations and raising events for any changes this write caused.\r\n *\r\n * The promise returned by this call is resolved when the above steps\r\n * have completed, *not* when the write was acked by the backend. The\r\n * userCallback is resolved once the write was acked/rejected by the\r\n * backend (or failed locally for any other reason).\r\n */\r\nasync function syncEngineWrite(syncEngine, batch, userCallback) {\r\n const syncEngineImpl = syncEngineEnsureWriteCallbacks(syncEngine);\r\n try {\r\n const result = await localStoreWriteLocally(syncEngineImpl.localStore, batch);\r\n syncEngineImpl.sharedClientState.addPendingMutation(result.batchId);\r\n addMutationCallback(syncEngineImpl, result.batchId, userCallback);\r\n await syncEngineEmitNewSnapsAndNotifyLocalStore(syncEngineImpl, result.changes);\r\n await fillWritePipeline(syncEngineImpl.remoteStore);\r\n }\r\n catch (e) {\r\n // If we can't persist the mutation, we reject the user callback and\r\n // don't send the mutation. The user can then retry the write.\r\n const error = wrapInUserErrorIfRecoverable(e, `Failed to persist write`);\r\n userCallback.reject(error);\r\n }\r\n}\r\n/**\r\n * Applies one remote event to the sync engine, notifying any views of the\r\n * changes, and releasing any pending mutation batches that would become\r\n * visible because of the snapshot version the remote event contains.\r\n */\r\nasync function syncEngineApplyRemoteEvent(syncEngine, remoteEvent) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n try {\r\n const changes = await localStoreApplyRemoteEventToLocalCache(syncEngineImpl.localStore, remoteEvent);\r\n // Update `receivedDocument` as appropriate for any limbo targets.\r\n remoteEvent.targetChanges.forEach((targetChange, targetId) => {\r\n const limboResolution = syncEngineImpl.activeLimboResolutionsByTarget.get(targetId);\r\n if (limboResolution) {\r\n // Since this is a limbo resolution lookup, it's for a single document\r\n // and it could be added, modified, or removed, but not a combination.\r\n hardAssert(targetChange.addedDocuments.size +\r\n targetChange.modifiedDocuments.size +\r\n targetChange.removedDocuments.size <=\r\n 1);\r\n if (targetChange.addedDocuments.size > 0) {\r\n limboResolution.receivedDocument = true;\r\n }\r\n else if (targetChange.modifiedDocuments.size > 0) {\r\n hardAssert(limboResolution.receivedDocument);\r\n }\r\n else if (targetChange.removedDocuments.size > 0) {\r\n hardAssert(limboResolution.receivedDocument);\r\n limboResolution.receivedDocument = false;\r\n }\r\n else {\r\n // This was probably just a CURRENT targetChange or similar.\r\n }\r\n }\r\n });\r\n await syncEngineEmitNewSnapsAndNotifyLocalStore(syncEngineImpl, changes, remoteEvent);\r\n }\r\n catch (error) {\r\n await ignoreIfPrimaryLeaseLoss(error);\r\n }\r\n}\r\n/**\r\n * Applies an OnlineState change to the sync engine and notifies any views of\r\n * the change.\r\n */\r\nfunction syncEngineApplyOnlineStateChange(syncEngine, onlineState, source) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n // If we are the secondary client, we explicitly ignore the remote store's\r\n // online state (the local client may go offline, even though the primary\r\n // tab remains online) and only apply the primary tab's online state from\r\n // SharedClientState.\r\n if ((syncEngineImpl.isPrimaryClient &&\r\n source === 0 /* OnlineStateSource.RemoteStore */) ||\r\n (!syncEngineImpl.isPrimaryClient &&\r\n source === 1 /* OnlineStateSource.SharedClientState */)) {\r\n const newViewSnapshots = [];\r\n syncEngineImpl.queryViewsByQuery.forEach((query, queryView) => {\r\n const viewChange = queryView.view.applyOnlineStateChange(onlineState);\r\n if (viewChange.snapshot) {\r\n newViewSnapshots.push(viewChange.snapshot);\r\n }\r\n });\r\n eventManagerOnOnlineStateChange(syncEngineImpl.eventManager, onlineState);\r\n if (newViewSnapshots.length) {\r\n syncEngineImpl.syncEngineListener.onWatchChange(newViewSnapshots);\r\n }\r\n syncEngineImpl.onlineState = onlineState;\r\n if (syncEngineImpl.isPrimaryClient) {\r\n syncEngineImpl.sharedClientState.setOnlineState(onlineState);\r\n }\r\n }\r\n}\r\n/**\r\n * Rejects the listen for the given targetID. This can be triggered by the\r\n * backend for any active target.\r\n *\r\n * @param syncEngine - The sync engine implementation.\r\n * @param targetId - The targetID corresponds to one previously initiated by the\r\n * user as part of TargetData passed to listen() on RemoteStore.\r\n * @param err - A description of the condition that has forced the rejection.\r\n * Nearly always this will be an indication that the user is no longer\r\n * authorized to see the data matching the target.\r\n */\r\nasync function syncEngineRejectListen(syncEngine, targetId, err) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n // PORTING NOTE: Multi-tab only.\r\n syncEngineImpl.sharedClientState.updateQueryState(targetId, 'rejected', err);\r\n const limboResolution = syncEngineImpl.activeLimboResolutionsByTarget.get(targetId);\r\n const limboKey = limboResolution && limboResolution.key;\r\n if (limboKey) {\r\n // TODO(klimt): We really only should do the following on permission\r\n // denied errors, but we don't have the cause code here.\r\n // It's a limbo doc. Create a synthetic event saying it was deleted.\r\n // This is kind of a hack. Ideally, we would have a method in the local\r\n // store to purge a document. However, it would be tricky to keep all of\r\n // the local store's invariants with another method.\r\n let documentUpdates = new SortedMap(DocumentKey.comparator);\r\n // TODO(b/217189216): This limbo document should ideally have a read time,\r\n // so that it is picked up by any read-time based scans. The backend,\r\n // however, does not send a read time for target removals.\r\n documentUpdates = documentUpdates.insert(limboKey, MutableDocument.newNoDocument(limboKey, SnapshotVersion.min()));\r\n const resolvedLimboDocuments = documentKeySet().add(limboKey);\r\n const event = new RemoteEvent(SnapshotVersion.min(), \r\n /* targetChanges= */ new Map(), \r\n /* targetMismatches= */ new SortedSet(primitiveComparator), documentUpdates, resolvedLimboDocuments);\r\n await syncEngineApplyRemoteEvent(syncEngineImpl, event);\r\n // Since this query failed, we won't want to manually unlisten to it.\r\n // We only remove it from bookkeeping after we successfully applied the\r\n // RemoteEvent. If `applyRemoteEvent()` throws, we want to re-listen to\r\n // this query when the RemoteStore restarts the Watch stream, which should\r\n // re-trigger the target failure.\r\n syncEngineImpl.activeLimboTargetsByKey =\r\n syncEngineImpl.activeLimboTargetsByKey.remove(limboKey);\r\n syncEngineImpl.activeLimboResolutionsByTarget.delete(targetId);\r\n pumpEnqueuedLimboResolutions(syncEngineImpl);\r\n }\r\n else {\r\n await localStoreReleaseTarget(syncEngineImpl.localStore, targetId, \r\n /* keepPersistedTargetData */ false)\r\n .then(() => removeAndCleanupTarget(syncEngineImpl, targetId, err))\r\n .catch(ignoreIfPrimaryLeaseLoss);\r\n }\r\n}\r\nasync function syncEngineApplySuccessfulWrite(syncEngine, mutationBatchResult) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n const batchId = mutationBatchResult.batch.batchId;\r\n try {\r\n const changes = await localStoreAcknowledgeBatch(syncEngineImpl.localStore, mutationBatchResult);\r\n // The local store may or may not be able to apply the write result and\r\n // raise events immediately (depending on whether the watcher is caught\r\n // up), so we raise user callbacks first so that they consistently happen\r\n // before listen events.\r\n processUserCallback(syncEngineImpl, batchId, /*error=*/ null);\r\n triggerPendingWritesCallbacks(syncEngineImpl, batchId);\r\n syncEngineImpl.sharedClientState.updateMutationState(batchId, 'acknowledged');\r\n await syncEngineEmitNewSnapsAndNotifyLocalStore(syncEngineImpl, changes);\r\n }\r\n catch (error) {\r\n await ignoreIfPrimaryLeaseLoss(error);\r\n }\r\n}\r\nasync function syncEngineRejectFailedWrite(syncEngine, batchId, error) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n try {\r\n const changes = await localStoreRejectBatch(syncEngineImpl.localStore, batchId);\r\n // The local store may or may not be able to apply the write result and\r\n // raise events immediately (depending on whether the watcher is caught up),\r\n // so we raise user callbacks first so that they consistently happen before\r\n // listen events.\r\n processUserCallback(syncEngineImpl, batchId, error);\r\n triggerPendingWritesCallbacks(syncEngineImpl, batchId);\r\n syncEngineImpl.sharedClientState.updateMutationState(batchId, 'rejected', error);\r\n await syncEngineEmitNewSnapsAndNotifyLocalStore(syncEngineImpl, changes);\r\n }\r\n catch (error) {\r\n await ignoreIfPrimaryLeaseLoss(error);\r\n }\r\n}\r\n/**\r\n * Registers a user callback that resolves when all pending mutations at the moment of calling\r\n * are acknowledged .\r\n */\r\nasync function syncEngineRegisterPendingWritesCallback(syncEngine, callback) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n if (!canUseNetwork(syncEngineImpl.remoteStore)) {\r\n logDebug(LOG_TAG$3, 'The network is disabled. The task returned by ' +\r\n \"'awaitPendingWrites()' will not complete until the network is enabled.\");\r\n }\r\n try {\r\n const highestBatchId = await localStoreGetHighestUnacknowledgedBatchId(syncEngineImpl.localStore);\r\n if (highestBatchId === BATCHID_UNKNOWN) {\r\n // Trigger the callback right away if there is no pending writes at the moment.\r\n callback.resolve();\r\n return;\r\n }\r\n const callbacks = syncEngineImpl.pendingWritesCallbacks.get(highestBatchId) || [];\r\n callbacks.push(callback);\r\n syncEngineImpl.pendingWritesCallbacks.set(highestBatchId, callbacks);\r\n }\r\n catch (e) {\r\n const firestoreError = wrapInUserErrorIfRecoverable(e, 'Initialization of waitForPendingWrites() operation failed');\r\n callback.reject(firestoreError);\r\n }\r\n}\r\n/**\r\n * Triggers the callbacks that are waiting for this batch id to get acknowledged by server,\r\n * if there are any.\r\n */\r\nfunction triggerPendingWritesCallbacks(syncEngineImpl, batchId) {\r\n (syncEngineImpl.pendingWritesCallbacks.get(batchId) || []).forEach(callback => {\r\n callback.resolve();\r\n });\r\n syncEngineImpl.pendingWritesCallbacks.delete(batchId);\r\n}\r\n/** Reject all outstanding callbacks waiting for pending writes to complete. */\r\nfunction rejectOutstandingPendingWritesCallbacks(syncEngineImpl, errorMessage) {\r\n syncEngineImpl.pendingWritesCallbacks.forEach(callbacks => {\r\n callbacks.forEach(callback => {\r\n callback.reject(new FirestoreError(Code.CANCELLED, errorMessage));\r\n });\r\n });\r\n syncEngineImpl.pendingWritesCallbacks.clear();\r\n}\r\nfunction addMutationCallback(syncEngineImpl, batchId, callback) {\r\n let newCallbacks = syncEngineImpl.mutationUserCallbacks[syncEngineImpl.currentUser.toKey()];\r\n if (!newCallbacks) {\r\n newCallbacks = new SortedMap(primitiveComparator);\r\n }\r\n newCallbacks = newCallbacks.insert(batchId, callback);\r\n syncEngineImpl.mutationUserCallbacks[syncEngineImpl.currentUser.toKey()] =\r\n newCallbacks;\r\n}\r\n/**\r\n * Resolves or rejects the user callback for the given batch and then discards\r\n * it.\r\n */\r\nfunction processUserCallback(syncEngine, batchId, error) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n let newCallbacks = syncEngineImpl.mutationUserCallbacks[syncEngineImpl.currentUser.toKey()];\r\n // NOTE: Mutations restored from persistence won't have callbacks, so it's\r\n // okay for there to be no callback for this ID.\r\n if (newCallbacks) {\r\n const callback = newCallbacks.get(batchId);\r\n if (callback) {\r\n if (error) {\r\n callback.reject(error);\r\n }\r\n else {\r\n callback.resolve();\r\n }\r\n newCallbacks = newCallbacks.remove(batchId);\r\n }\r\n syncEngineImpl.mutationUserCallbacks[syncEngineImpl.currentUser.toKey()] =\r\n newCallbacks;\r\n }\r\n}\r\nfunction removeAndCleanupTarget(syncEngineImpl, targetId, error = null) {\r\n syncEngineImpl.sharedClientState.removeLocalQueryTarget(targetId);\r\n for (const query of syncEngineImpl.queriesByTarget.get(targetId)) {\r\n syncEngineImpl.queryViewsByQuery.delete(query);\r\n if (error) {\r\n syncEngineImpl.syncEngineListener.onWatchError(query, error);\r\n }\r\n }\r\n syncEngineImpl.queriesByTarget.delete(targetId);\r\n if (syncEngineImpl.isPrimaryClient) {\r\n const limboKeys = syncEngineImpl.limboDocumentRefs.removeReferencesForId(targetId);\r\n limboKeys.forEach(limboKey => {\r\n const isReferenced = syncEngineImpl.limboDocumentRefs.containsKey(limboKey);\r\n if (!isReferenced) {\r\n // We removed the last reference for this key\r\n removeLimboTarget(syncEngineImpl, limboKey);\r\n }\r\n });\r\n }\r\n}\r\nfunction removeLimboTarget(syncEngineImpl, key) {\r\n syncEngineImpl.enqueuedLimboResolutions.delete(key.path.canonicalString());\r\n // It's possible that the target already got removed because the query failed. In that case,\r\n // the key won't exist in `limboTargetsByKey`. Only do the cleanup if we still have the target.\r\n const limboTargetId = syncEngineImpl.activeLimboTargetsByKey.get(key);\r\n if (limboTargetId === null) {\r\n // This target already got removed, because the query failed.\r\n return;\r\n }\r\n remoteStoreUnlisten(syncEngineImpl.remoteStore, limboTargetId);\r\n syncEngineImpl.activeLimboTargetsByKey =\r\n syncEngineImpl.activeLimboTargetsByKey.remove(key);\r\n syncEngineImpl.activeLimboResolutionsByTarget.delete(limboTargetId);\r\n pumpEnqueuedLimboResolutions(syncEngineImpl);\r\n}\r\nfunction updateTrackedLimbos(syncEngineImpl, targetId, limboChanges) {\r\n for (const limboChange of limboChanges) {\r\n if (limboChange instanceof AddedLimboDocument) {\r\n syncEngineImpl.limboDocumentRefs.addReference(limboChange.key, targetId);\r\n trackLimboChange(syncEngineImpl, limboChange);\r\n }\r\n else if (limboChange instanceof RemovedLimboDocument) {\r\n logDebug(LOG_TAG$3, 'Document no longer in limbo: ' + limboChange.key);\r\n syncEngineImpl.limboDocumentRefs.removeReference(limboChange.key, targetId);\r\n const isReferenced = syncEngineImpl.limboDocumentRefs.containsKey(limboChange.key);\r\n if (!isReferenced) {\r\n // We removed the last reference for this key\r\n removeLimboTarget(syncEngineImpl, limboChange.key);\r\n }\r\n }\r\n else {\r\n fail();\r\n }\r\n }\r\n}\r\nfunction trackLimboChange(syncEngineImpl, limboChange) {\r\n const key = limboChange.key;\r\n const keyString = key.path.canonicalString();\r\n if (!syncEngineImpl.activeLimboTargetsByKey.get(key) &&\r\n !syncEngineImpl.enqueuedLimboResolutions.has(keyString)) {\r\n logDebug(LOG_TAG$3, 'New document in limbo: ' + key);\r\n syncEngineImpl.enqueuedLimboResolutions.add(keyString);\r\n pumpEnqueuedLimboResolutions(syncEngineImpl);\r\n }\r\n}\r\n/**\r\n * Starts listens for documents in limbo that are enqueued for resolution,\r\n * subject to a maximum number of concurrent resolutions.\r\n *\r\n * Without bounding the number of concurrent resolutions, the server can fail\r\n * with \"resource exhausted\" errors which can lead to pathological client\r\n * behavior as seen in https://github.com/firebase/firebase-js-sdk/issues/2683.\r\n */\r\nfunction pumpEnqueuedLimboResolutions(syncEngineImpl) {\r\n while (syncEngineImpl.enqueuedLimboResolutions.size > 0 &&\r\n syncEngineImpl.activeLimboTargetsByKey.size <\r\n syncEngineImpl.maxConcurrentLimboResolutions) {\r\n const keyString = syncEngineImpl.enqueuedLimboResolutions\r\n .values()\r\n .next().value;\r\n syncEngineImpl.enqueuedLimboResolutions.delete(keyString);\r\n const key = new DocumentKey(ResourcePath.fromString(keyString));\r\n const limboTargetId = syncEngineImpl.limboTargetIdGenerator.next();\r\n syncEngineImpl.activeLimboResolutionsByTarget.set(limboTargetId, new LimboResolution(key));\r\n syncEngineImpl.activeLimboTargetsByKey =\r\n syncEngineImpl.activeLimboTargetsByKey.insert(key, limboTargetId);\r\n remoteStoreListen(syncEngineImpl.remoteStore, new TargetData(queryToTarget(newQueryForPath(key.path)), limboTargetId, 2 /* TargetPurpose.LimboResolution */, ListenSequence.INVALID));\r\n }\r\n}\r\nasync function syncEngineEmitNewSnapsAndNotifyLocalStore(syncEngine, changes, remoteEvent) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n const newSnaps = [];\r\n const docChangesInAllViews = [];\r\n const queriesProcessed = [];\r\n if (syncEngineImpl.queryViewsByQuery.isEmpty()) {\r\n // Return early since `onWatchChange()` might not have been assigned yet.\r\n return;\r\n }\r\n syncEngineImpl.queryViewsByQuery.forEach((_, queryView) => {\r\n queriesProcessed.push(syncEngineImpl\r\n .applyDocChanges(queryView, changes, remoteEvent)\r\n .then(viewSnapshot => {\r\n // If there are changes, or we are handling a global snapshot, notify\r\n // secondary clients to update query state.\r\n if (viewSnapshot || remoteEvent) {\r\n if (syncEngineImpl.isPrimaryClient) {\r\n syncEngineImpl.sharedClientState.updateQueryState(queryView.targetId, (viewSnapshot === null || viewSnapshot === void 0 ? void 0 : viewSnapshot.fromCache) ? 'not-current' : 'current');\r\n }\r\n }\r\n // Update views if there are actual changes.\r\n if (!!viewSnapshot) {\r\n newSnaps.push(viewSnapshot);\r\n const docChanges = LocalViewChanges.fromSnapshot(queryView.targetId, viewSnapshot);\r\n docChangesInAllViews.push(docChanges);\r\n }\r\n }));\r\n });\r\n await Promise.all(queriesProcessed);\r\n syncEngineImpl.syncEngineListener.onWatchChange(newSnaps);\r\n await localStoreNotifyLocalViewChanges(syncEngineImpl.localStore, docChangesInAllViews);\r\n}\r\nasync function applyDocChanges(syncEngineImpl, queryView, changes, remoteEvent) {\r\n let viewDocChanges = queryView.view.computeDocChanges(changes);\r\n if (viewDocChanges.needsRefill) {\r\n // The query has a limit and some docs were removed, so we need\r\n // to re-run the query against the local store to make sure we\r\n // didn't lose any good docs that had been past the limit.\r\n viewDocChanges = await localStoreExecuteQuery(syncEngineImpl.localStore, queryView.query, \r\n /* usePreviousResults= */ false).then(({ documents }) => {\r\n return queryView.view.computeDocChanges(documents, viewDocChanges);\r\n });\r\n }\r\n const targetChange = remoteEvent && remoteEvent.targetChanges.get(queryView.targetId);\r\n const viewChange = queryView.view.applyChanges(viewDocChanges, \r\n /* updateLimboDocuments= */ syncEngineImpl.isPrimaryClient, targetChange);\r\n updateTrackedLimbos(syncEngineImpl, queryView.targetId, viewChange.limboChanges);\r\n return viewChange.snapshot;\r\n}\r\nasync function syncEngineHandleCredentialChange(syncEngine, user) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n const userChanged = !syncEngineImpl.currentUser.isEqual(user);\r\n if (userChanged) {\r\n logDebug(LOG_TAG$3, 'User change. New user:', user.toKey());\r\n const result = await localStoreHandleUserChange(syncEngineImpl.localStore, user);\r\n syncEngineImpl.currentUser = user;\r\n // Fails tasks waiting for pending writes requested by previous user.\r\n rejectOutstandingPendingWritesCallbacks(syncEngineImpl, \"'waitForPendingWrites' promise is rejected due to a user change.\");\r\n // TODO(b/114226417): Consider calling this only in the primary tab.\r\n syncEngineImpl.sharedClientState.handleUserChange(user, result.removedBatchIds, result.addedBatchIds);\r\n await syncEngineEmitNewSnapsAndNotifyLocalStore(syncEngineImpl, result.affectedDocuments);\r\n }\r\n}\r\nfunction syncEngineGetRemoteKeysForTarget(syncEngine, targetId) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n const limboResolution = syncEngineImpl.activeLimboResolutionsByTarget.get(targetId);\r\n if (limboResolution && limboResolution.receivedDocument) {\r\n return documentKeySet().add(limboResolution.key);\r\n }\r\n else {\r\n let keySet = documentKeySet();\r\n const queries = syncEngineImpl.queriesByTarget.get(targetId);\r\n if (!queries) {\r\n return keySet;\r\n }\r\n for (const query of queries) {\r\n const queryView = syncEngineImpl.queryViewsByQuery.get(query);\r\n keySet = keySet.unionWith(queryView.view.syncedDocuments);\r\n }\r\n return keySet;\r\n }\r\n}\r\n/**\r\n * Reconcile the list of synced documents in an existing view with those\r\n * from persistence.\r\n */\r\nasync function synchronizeViewAndComputeSnapshot(syncEngine, queryView) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n const queryResult = await localStoreExecuteQuery(syncEngineImpl.localStore, queryView.query, \r\n /* usePreviousResults= */ true);\r\n const viewSnapshot = queryView.view.synchronizeWithPersistedState(queryResult);\r\n if (syncEngineImpl.isPrimaryClient) {\r\n updateTrackedLimbos(syncEngineImpl, queryView.targetId, viewSnapshot.limboChanges);\r\n }\r\n return viewSnapshot;\r\n}\r\n/**\r\n * Retrieves newly changed documents from remote document cache and raises\r\n * snapshots if needed.\r\n */\r\n// PORTING NOTE: Multi-Tab only.\r\nasync function syncEngineSynchronizeWithChangedDocuments(syncEngine, collectionGroup) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n return localStoreGetNewDocumentChanges(syncEngineImpl.localStore, collectionGroup).then(changes => syncEngineEmitNewSnapsAndNotifyLocalStore(syncEngineImpl, changes));\r\n}\r\n/** Applies a mutation state to an existing batch. */\r\n// PORTING NOTE: Multi-Tab only.\r\nasync function syncEngineApplyBatchState(syncEngine, batchId, batchState, error) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n const documents = await localStoreLookupMutationDocuments(syncEngineImpl.localStore, batchId);\r\n if (documents === null) {\r\n // A throttled tab may not have seen the mutation before it was completed\r\n // and removed from the mutation queue, in which case we won't have cached\r\n // the affected documents. In this case we can safely ignore the update\r\n // since that means we didn't apply the mutation locally at all (if we\r\n // had, we would have cached the affected documents), and so we will just\r\n // see any resulting document changes via normal remote document updates\r\n // as applicable.\r\n logDebug(LOG_TAG$3, 'Cannot apply mutation batch with id: ' + batchId);\r\n return;\r\n }\r\n if (batchState === 'pending') {\r\n // If we are the primary client, we need to send this write to the\r\n // backend. Secondary clients will ignore these writes since their remote\r\n // connection is disabled.\r\n await fillWritePipeline(syncEngineImpl.remoteStore);\r\n }\r\n else if (batchState === 'acknowledged' || batchState === 'rejected') {\r\n // NOTE: Both these methods are no-ops for batches that originated from\r\n // other clients.\r\n processUserCallback(syncEngineImpl, batchId, error ? error : null);\r\n triggerPendingWritesCallbacks(syncEngineImpl, batchId);\r\n localStoreRemoveCachedMutationBatchMetadata(syncEngineImpl.localStore, batchId);\r\n }\r\n else {\r\n fail();\r\n }\r\n await syncEngineEmitNewSnapsAndNotifyLocalStore(syncEngineImpl, documents);\r\n}\r\n/** Applies a query target change from a different tab. */\r\n// PORTING NOTE: Multi-Tab only.\r\nasync function syncEngineApplyPrimaryState(syncEngine, isPrimary) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n ensureWatchCallbacks(syncEngineImpl);\r\n syncEngineEnsureWriteCallbacks(syncEngineImpl);\r\n if (isPrimary === true && syncEngineImpl._isPrimaryClient !== true) {\r\n // Secondary tabs only maintain Views for their local listeners and the\r\n // Views internal state may not be 100% populated (in particular\r\n // secondary tabs don't track syncedDocuments, the set of documents the\r\n // server considers to be in the target). So when a secondary becomes\r\n // primary, we need to need to make sure that all views for all targets\r\n // match the state on disk.\r\n const activeTargets = syncEngineImpl.sharedClientState.getAllActiveQueryTargets();\r\n const activeQueries = await synchronizeQueryViewsAndRaiseSnapshots(syncEngineImpl, activeTargets.toArray());\r\n syncEngineImpl._isPrimaryClient = true;\r\n await remoteStoreApplyPrimaryState(syncEngineImpl.remoteStore, true);\r\n for (const targetData of activeQueries) {\r\n remoteStoreListen(syncEngineImpl.remoteStore, targetData);\r\n }\r\n }\r\n else if (isPrimary === false && syncEngineImpl._isPrimaryClient !== false) {\r\n const activeTargets = [];\r\n let p = Promise.resolve();\r\n syncEngineImpl.queriesByTarget.forEach((_, targetId) => {\r\n if (syncEngineImpl.sharedClientState.isLocalQueryTarget(targetId)) {\r\n activeTargets.push(targetId);\r\n }\r\n else {\r\n p = p.then(() => {\r\n removeAndCleanupTarget(syncEngineImpl, targetId);\r\n return localStoreReleaseTarget(syncEngineImpl.localStore, targetId, \r\n /*keepPersistedTargetData=*/ true);\r\n });\r\n }\r\n remoteStoreUnlisten(syncEngineImpl.remoteStore, targetId);\r\n });\r\n await p;\r\n await synchronizeQueryViewsAndRaiseSnapshots(syncEngineImpl, activeTargets);\r\n resetLimboDocuments(syncEngineImpl);\r\n syncEngineImpl._isPrimaryClient = false;\r\n await remoteStoreApplyPrimaryState(syncEngineImpl.remoteStore, false);\r\n }\r\n}\r\n// PORTING NOTE: Multi-Tab only.\r\nfunction resetLimboDocuments(syncEngine) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n syncEngineImpl.activeLimboResolutionsByTarget.forEach((_, targetId) => {\r\n remoteStoreUnlisten(syncEngineImpl.remoteStore, targetId);\r\n });\r\n syncEngineImpl.limboDocumentRefs.removeAllReferences();\r\n syncEngineImpl.activeLimboResolutionsByTarget = new Map();\r\n syncEngineImpl.activeLimboTargetsByKey = new SortedMap(DocumentKey.comparator);\r\n}\r\n/**\r\n * Reconcile the query views of the provided query targets with the state from\r\n * persistence. Raises snapshots for any changes that affect the local\r\n * client and returns the updated state of all target's query data.\r\n *\r\n * @param syncEngine - The sync engine implementation\r\n * @param targets - the list of targets with views that need to be recomputed\r\n * @param transitionToPrimary - `true` iff the tab transitions from a secondary\r\n * tab to a primary tab\r\n */\r\n// PORTING NOTE: Multi-Tab only.\r\nasync function synchronizeQueryViewsAndRaiseSnapshots(syncEngine, targets, transitionToPrimary) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n const activeQueries = [];\r\n const newViewSnapshots = [];\r\n for (const targetId of targets) {\r\n let targetData;\r\n const queries = syncEngineImpl.queriesByTarget.get(targetId);\r\n if (queries && queries.length !== 0) {\r\n // For queries that have a local View, we fetch their current state\r\n // from LocalStore (as the resume token and the snapshot version\r\n // might have changed) and reconcile their views with the persisted\r\n // state (the list of syncedDocuments may have gotten out of sync).\r\n targetData = await localStoreAllocateTarget(syncEngineImpl.localStore, queryToTarget(queries[0]));\r\n for (const query of queries) {\r\n const queryView = syncEngineImpl.queryViewsByQuery.get(query);\r\n const viewChange = await synchronizeViewAndComputeSnapshot(syncEngineImpl, queryView);\r\n if (viewChange.snapshot) {\r\n newViewSnapshots.push(viewChange.snapshot);\r\n }\r\n }\r\n }\r\n else {\r\n // For queries that never executed on this client, we need to\r\n // allocate the target in LocalStore and initialize a new View.\r\n const target = await localStoreGetCachedTarget(syncEngineImpl.localStore, targetId);\r\n targetData = await localStoreAllocateTarget(syncEngineImpl.localStore, target);\r\n await initializeViewAndComputeSnapshot(syncEngineImpl, synthesizeTargetToQuery(target), targetId, \r\n /*current=*/ false, targetData.resumeToken);\r\n }\r\n activeQueries.push(targetData);\r\n }\r\n syncEngineImpl.syncEngineListener.onWatchChange(newViewSnapshots);\r\n return activeQueries;\r\n}\r\n/**\r\n * Creates a `Query` object from the specified `Target`. There is no way to\r\n * obtain the original `Query`, so we synthesize a `Query` from the `Target`\r\n * object.\r\n *\r\n * The synthesized result might be different from the original `Query`, but\r\n * since the synthesized `Query` should return the same results as the\r\n * original one (only the presentation of results might differ), the potential\r\n * difference will not cause issues.\r\n */\r\n// PORTING NOTE: Multi-Tab only.\r\nfunction synthesizeTargetToQuery(target) {\r\n return newQuery(target.path, target.collectionGroup, target.orderBy, target.filters, target.limit, \"F\" /* LimitType.First */, target.startAt, target.endAt);\r\n}\r\n/** Returns the IDs of the clients that are currently active. */\r\n// PORTING NOTE: Multi-Tab only.\r\nfunction syncEngineGetActiveClients(syncEngine) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n return localStoreGetActiveClients(syncEngineImpl.localStore);\r\n}\r\n/** Applies a query target change from a different tab. */\r\n// PORTING NOTE: Multi-Tab only.\r\nasync function syncEngineApplyTargetState(syncEngine, targetId, state, error) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n if (syncEngineImpl._isPrimaryClient) {\r\n // If we receive a target state notification via WebStorage, we are\r\n // either already secondary or another tab has taken the primary lease.\r\n logDebug(LOG_TAG$3, 'Ignoring unexpected query state notification.');\r\n return;\r\n }\r\n const query = syncEngineImpl.queriesByTarget.get(targetId);\r\n if (query && query.length > 0) {\r\n switch (state) {\r\n case 'current':\r\n case 'not-current': {\r\n const changes = await localStoreGetNewDocumentChanges(syncEngineImpl.localStore, queryCollectionGroup(query[0]));\r\n const synthesizedRemoteEvent = RemoteEvent.createSynthesizedRemoteEventForCurrentChange(targetId, state === 'current', ByteString.EMPTY_BYTE_STRING);\r\n await syncEngineEmitNewSnapsAndNotifyLocalStore(syncEngineImpl, changes, synthesizedRemoteEvent);\r\n break;\r\n }\r\n case 'rejected': {\r\n await localStoreReleaseTarget(syncEngineImpl.localStore, targetId, \r\n /* keepPersistedTargetData */ true);\r\n removeAndCleanupTarget(syncEngineImpl, targetId, error);\r\n break;\r\n }\r\n default:\r\n fail();\r\n }\r\n }\r\n}\r\n/** Adds or removes Watch targets for queries from different tabs. */\r\nasync function syncEngineApplyActiveTargetsChange(syncEngine, added, removed) {\r\n const syncEngineImpl = ensureWatchCallbacks(syncEngine);\r\n if (!syncEngineImpl._isPrimaryClient) {\r\n return;\r\n }\r\n for (const targetId of added) {\r\n if (syncEngineImpl.queriesByTarget.has(targetId)) {\r\n // A target might have been added in a previous attempt\r\n logDebug(LOG_TAG$3, 'Adding an already active target ' + targetId);\r\n continue;\r\n }\r\n const target = await localStoreGetCachedTarget(syncEngineImpl.localStore, targetId);\r\n const targetData = await localStoreAllocateTarget(syncEngineImpl.localStore, target);\r\n await initializeViewAndComputeSnapshot(syncEngineImpl, synthesizeTargetToQuery(target), targetData.targetId, \r\n /*current=*/ false, targetData.resumeToken);\r\n remoteStoreListen(syncEngineImpl.remoteStore, targetData);\r\n }\r\n for (const targetId of removed) {\r\n // Check that the target is still active since the target might have been\r\n // removed if it has been rejected by the backend.\r\n if (!syncEngineImpl.queriesByTarget.has(targetId)) {\r\n continue;\r\n }\r\n // Release queries that are still active.\r\n await localStoreReleaseTarget(syncEngineImpl.localStore, targetId, \r\n /* keepPersistedTargetData */ false)\r\n .then(() => {\r\n remoteStoreUnlisten(syncEngineImpl.remoteStore, targetId);\r\n removeAndCleanupTarget(syncEngineImpl, targetId);\r\n })\r\n .catch(ignoreIfPrimaryLeaseLoss);\r\n }\r\n}\r\nfunction ensureWatchCallbacks(syncEngine) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n syncEngineImpl.remoteStore.remoteSyncer.applyRemoteEvent =\r\n syncEngineApplyRemoteEvent.bind(null, syncEngineImpl);\r\n syncEngineImpl.remoteStore.remoteSyncer.getRemoteKeysForTarget =\r\n syncEngineGetRemoteKeysForTarget.bind(null, syncEngineImpl);\r\n syncEngineImpl.remoteStore.remoteSyncer.rejectListen =\r\n syncEngineRejectListen.bind(null, syncEngineImpl);\r\n syncEngineImpl.syncEngineListener.onWatchChange =\r\n eventManagerOnWatchChange.bind(null, syncEngineImpl.eventManager);\r\n syncEngineImpl.syncEngineListener.onWatchError =\r\n eventManagerOnWatchError.bind(null, syncEngineImpl.eventManager);\r\n return syncEngineImpl;\r\n}\r\nfunction syncEngineEnsureWriteCallbacks(syncEngine) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n syncEngineImpl.remoteStore.remoteSyncer.applySuccessfulWrite =\r\n syncEngineApplySuccessfulWrite.bind(null, syncEngineImpl);\r\n syncEngineImpl.remoteStore.remoteSyncer.rejectFailedWrite =\r\n syncEngineRejectFailedWrite.bind(null, syncEngineImpl);\r\n return syncEngineImpl;\r\n}\r\n/**\r\n * Loads a Firestore bundle into the SDK. The returned promise resolves when\r\n * the bundle finished loading.\r\n *\r\n * @param syncEngine - SyncEngine to use.\r\n * @param bundleReader - Bundle to load into the SDK.\r\n * @param task - LoadBundleTask used to update the loading progress to public API.\r\n */\r\nfunction syncEngineLoadBundle(syncEngine, bundleReader, task) {\r\n const syncEngineImpl = debugCast(syncEngine);\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n loadBundleImpl(syncEngineImpl, bundleReader, task).then(collectionGroups => {\r\n syncEngineImpl.sharedClientState.notifyBundleLoaded(collectionGroups);\r\n });\r\n}\r\n/** Loads a bundle and returns the list of affected collection groups. */\r\nasync function loadBundleImpl(syncEngine, reader, task) {\r\n try {\r\n const metadata = await reader.getMetadata();\r\n const skip = await localStoreHasNewerBundle(syncEngine.localStore, metadata);\r\n if (skip) {\r\n await reader.close();\r\n task._completeWith(bundleSuccessProgress(metadata));\r\n return Promise.resolve(new Set());\r\n }\r\n task._updateProgress(bundleInitialProgress(metadata));\r\n const loader = new BundleLoader(metadata, syncEngine.localStore, reader.serializer);\r\n let element = await reader.nextElement();\r\n while (element) {\r\n ;\r\n const progress = await loader.addSizedElement(element);\r\n if (progress) {\r\n task._updateProgress(progress);\r\n }\r\n element = await reader.nextElement();\r\n }\r\n const result = await loader.complete();\r\n await syncEngineEmitNewSnapsAndNotifyLocalStore(syncEngine, result.changedDocs, \r\n /* remoteEvent */ undefined);\r\n // Save metadata, so loading the same bundle will skip.\r\n await localStoreSaveBundle(syncEngine.localStore, metadata);\r\n task._completeWith(result.progress);\r\n return Promise.resolve(result.changedCollectionGroups);\r\n }\r\n catch (e) {\r\n logWarn(LOG_TAG$3, `Loading bundle failed with ${e}`);\r\n task._failWith(e);\r\n return Promise.resolve(new Set());\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provides all components needed for Firestore with in-memory persistence.\r\n * Uses EagerGC garbage collection.\r\n */\r\nclass MemoryOfflineComponentProvider {\r\n constructor() {\r\n this.synchronizeTabs = false;\r\n }\r\n async initialize(cfg) {\r\n this.serializer = newSerializer(cfg.databaseInfo.databaseId);\r\n this.sharedClientState = this.createSharedClientState(cfg);\r\n this.persistence = this.createPersistence(cfg);\r\n await this.persistence.start();\r\n this.localStore = this.createLocalStore(cfg);\r\n this.gcScheduler = this.createGarbageCollectionScheduler(cfg, this.localStore);\r\n this.indexBackfillerScheduler = this.createIndexBackfillerScheduler(cfg, this.localStore);\r\n }\r\n createGarbageCollectionScheduler(cfg, localStore) {\r\n return null;\r\n }\r\n createIndexBackfillerScheduler(cfg, localStore) {\r\n return null;\r\n }\r\n createLocalStore(cfg) {\r\n return newLocalStore(this.persistence, new QueryEngine(), cfg.initialUser, this.serializer);\r\n }\r\n createPersistence(cfg) {\r\n return new MemoryPersistence(MemoryEagerDelegate.factory, this.serializer);\r\n }\r\n createSharedClientState(cfg) {\r\n return new MemorySharedClientState();\r\n }\r\n async terminate() {\r\n if (this.gcScheduler) {\r\n this.gcScheduler.stop();\r\n }\r\n await this.sharedClientState.shutdown();\r\n await this.persistence.shutdown();\r\n }\r\n}\r\n/**\r\n * Provides all components needed for Firestore with IndexedDB persistence.\r\n */\r\nclass IndexedDbOfflineComponentProvider extends MemoryOfflineComponentProvider {\r\n constructor(onlineComponentProvider, cacheSizeBytes, forceOwnership) {\r\n super();\r\n this.onlineComponentProvider = onlineComponentProvider;\r\n this.cacheSizeBytes = cacheSizeBytes;\r\n this.forceOwnership = forceOwnership;\r\n this.synchronizeTabs = false;\r\n }\r\n async initialize(cfg) {\r\n await super.initialize(cfg);\r\n await this.onlineComponentProvider.initialize(this, cfg);\r\n // Enqueue writes from a previous session\r\n await syncEngineEnsureWriteCallbacks(this.onlineComponentProvider.syncEngine);\r\n await fillWritePipeline(this.onlineComponentProvider.remoteStore);\r\n // NOTE: This will immediately call the listener, so we make sure to\r\n // set it after localStore / remoteStore are started.\r\n await this.persistence.setPrimaryStateListener(() => {\r\n if (this.gcScheduler && !this.gcScheduler.started) {\r\n this.gcScheduler.start();\r\n }\r\n if (this.indexBackfillerScheduler &&\r\n !this.indexBackfillerScheduler.started) {\r\n this.indexBackfillerScheduler.start();\r\n }\r\n return Promise.resolve();\r\n });\r\n }\r\n createLocalStore(cfg) {\r\n return newLocalStore(this.persistence, new QueryEngine(), cfg.initialUser, this.serializer);\r\n }\r\n createGarbageCollectionScheduler(cfg, localStore) {\r\n const garbageCollector = this.persistence.referenceDelegate.garbageCollector;\r\n return new LruScheduler(garbageCollector, cfg.asyncQueue, localStore);\r\n }\r\n createIndexBackfillerScheduler(cfg, localStore) {\r\n const indexBackfiller = new IndexBackfiller(localStore, this.persistence);\r\n return new IndexBackfillerScheduler(cfg.asyncQueue, indexBackfiller);\r\n }\r\n createPersistence(cfg) {\r\n const persistenceKey = indexedDbStoragePrefix(cfg.databaseInfo.databaseId, cfg.databaseInfo.persistenceKey);\r\n const lruParams = this.cacheSizeBytes !== undefined\r\n ? LruParams.withCacheSize(this.cacheSizeBytes)\r\n : LruParams.DEFAULT;\r\n return new IndexedDbPersistence(this.synchronizeTabs, persistenceKey, cfg.clientId, lruParams, cfg.asyncQueue, getWindow(), getDocument(), this.serializer, this.sharedClientState, !!this.forceOwnership);\r\n }\r\n createSharedClientState(cfg) {\r\n return new MemorySharedClientState();\r\n }\r\n}\r\n/**\r\n * Provides all components needed for Firestore with multi-tab IndexedDB\r\n * persistence.\r\n *\r\n * In the legacy client, this provider is used to provide both multi-tab and\r\n * non-multi-tab persistence since we cannot tell at build time whether\r\n * `synchronizeTabs` will be enabled.\r\n */\r\nclass MultiTabOfflineComponentProvider extends IndexedDbOfflineComponentProvider {\r\n constructor(onlineComponentProvider, cacheSizeBytes) {\r\n super(onlineComponentProvider, cacheSizeBytes, /* forceOwnership= */ false);\r\n this.onlineComponentProvider = onlineComponentProvider;\r\n this.cacheSizeBytes = cacheSizeBytes;\r\n this.synchronizeTabs = true;\r\n }\r\n async initialize(cfg) {\r\n await super.initialize(cfg);\r\n const syncEngine = this.onlineComponentProvider.syncEngine;\r\n if (this.sharedClientState instanceof WebStorageSharedClientState) {\r\n this.sharedClientState.syncEngine = {\r\n applyBatchState: syncEngineApplyBatchState.bind(null, syncEngine),\r\n applyTargetState: syncEngineApplyTargetState.bind(null, syncEngine),\r\n applyActiveTargetsChange: syncEngineApplyActiveTargetsChange.bind(null, syncEngine),\r\n getActiveClients: syncEngineGetActiveClients.bind(null, syncEngine),\r\n synchronizeWithChangedDocuments: syncEngineSynchronizeWithChangedDocuments.bind(null, syncEngine)\r\n };\r\n await this.sharedClientState.start();\r\n }\r\n // NOTE: This will immediately call the listener, so we make sure to\r\n // set it after localStore / remoteStore are started.\r\n await this.persistence.setPrimaryStateListener(async (isPrimary) => {\r\n await syncEngineApplyPrimaryState(this.onlineComponentProvider.syncEngine, isPrimary);\r\n if (this.gcScheduler) {\r\n if (isPrimary && !this.gcScheduler.started) {\r\n this.gcScheduler.start();\r\n }\r\n else if (!isPrimary) {\r\n this.gcScheduler.stop();\r\n }\r\n }\r\n if (this.indexBackfillerScheduler) {\r\n if (isPrimary && !this.indexBackfillerScheduler.started) {\r\n this.indexBackfillerScheduler.start();\r\n }\r\n else if (!isPrimary) {\r\n this.indexBackfillerScheduler.stop();\r\n }\r\n }\r\n });\r\n }\r\n createSharedClientState(cfg) {\r\n const window = getWindow();\r\n if (!WebStorageSharedClientState.isAvailable(window)) {\r\n throw new FirestoreError(Code.UNIMPLEMENTED, 'IndexedDB persistence is only available on platforms that support LocalStorage.');\r\n }\r\n const persistenceKey = indexedDbStoragePrefix(cfg.databaseInfo.databaseId, cfg.databaseInfo.persistenceKey);\r\n return new WebStorageSharedClientState(window, cfg.asyncQueue, persistenceKey, cfg.clientId, cfg.initialUser);\r\n }\r\n}\r\n/**\r\n * Initializes and wires the components that are needed to interface with the\r\n * network.\r\n */\r\nclass OnlineComponentProvider {\r\n async initialize(offlineComponentProvider, cfg) {\r\n if (this.localStore) {\r\n // OnlineComponentProvider may get initialized multiple times if\r\n // multi-tab persistence is used.\r\n return;\r\n }\r\n this.localStore = offlineComponentProvider.localStore;\r\n this.sharedClientState = offlineComponentProvider.sharedClientState;\r\n this.datastore = this.createDatastore(cfg);\r\n this.remoteStore = this.createRemoteStore(cfg);\r\n this.eventManager = this.createEventManager(cfg);\r\n this.syncEngine = this.createSyncEngine(cfg, \r\n /* startAsPrimary=*/ !offlineComponentProvider.synchronizeTabs);\r\n this.sharedClientState.onlineStateHandler = onlineState => syncEngineApplyOnlineStateChange(this.syncEngine, onlineState, 1 /* OnlineStateSource.SharedClientState */);\r\n this.remoteStore.remoteSyncer.handleCredentialChange =\r\n syncEngineHandleCredentialChange.bind(null, this.syncEngine);\r\n await remoteStoreApplyPrimaryState(this.remoteStore, this.syncEngine.isPrimaryClient);\r\n }\r\n createEventManager(cfg) {\r\n return newEventManager();\r\n }\r\n createDatastore(cfg) {\r\n const serializer = newSerializer(cfg.databaseInfo.databaseId);\r\n const connection = newConnection(cfg.databaseInfo);\r\n return newDatastore(cfg.authCredentials, cfg.appCheckCredentials, connection, serializer);\r\n }\r\n createRemoteStore(cfg) {\r\n return newRemoteStore(this.localStore, this.datastore, cfg.asyncQueue, onlineState => syncEngineApplyOnlineStateChange(this.syncEngine, onlineState, 0 /* OnlineStateSource.RemoteStore */), newConnectivityMonitor());\r\n }\r\n createSyncEngine(cfg, startAsPrimary) {\r\n return newSyncEngine(this.localStore, this.remoteStore, this.eventManager, this.sharedClientState, cfg.initialUser, cfg.maxConcurrentLimboResolutions, startAsPrimary);\r\n }\r\n terminate() {\r\n return remoteStoreShutdown(this.remoteStore);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * How many bytes to read each time when `ReadableStreamReader.read()` is\r\n * called. Only applicable for byte streams that we control (e.g. those backed\r\n * by an UInt8Array).\r\n */\r\nconst DEFAULT_BYTES_PER_READ = 10240;\r\n/**\r\n * Builds a `ByteStreamReader` from a UInt8Array.\r\n * @param source - The data source to use.\r\n * @param bytesPerRead - How many bytes each `read()` from the returned reader\r\n * will read.\r\n */\r\nfunction toByteStreamReaderHelper(source, bytesPerRead = DEFAULT_BYTES_PER_READ) {\r\n let readFrom = 0;\r\n // The TypeScript definition for ReadableStreamReader changed. We use\r\n // `any` here to allow this code to compile with different versions.\r\n // See https://github.com/microsoft/TypeScript/issues/42970\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const reader = {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n async read() {\r\n if (readFrom < source.byteLength) {\r\n const result = {\r\n value: source.slice(readFrom, readFrom + bytesPerRead),\r\n done: false\r\n };\r\n readFrom += bytesPerRead;\r\n return result;\r\n }\r\n return { done: true };\r\n },\r\n async cancel() { },\r\n releaseLock() { },\r\n closed: Promise.reject('unimplemented')\r\n };\r\n return reader;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction validateNonEmptyArgument(functionName, argumentName, argument) {\r\n if (!argument) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Function ${functionName}() cannot be called with an empty ${argumentName}.`);\r\n }\r\n}\r\n/**\r\n * Validates that two boolean options are not set at the same time.\r\n * @internal\r\n */\r\nfunction validateIsNotUsedTogether(optionName1, argument1, optionName2, argument2) {\r\n if (argument1 === true && argument2 === true) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `${optionName1} and ${optionName2} cannot be used together.`);\r\n }\r\n}\r\n/**\r\n * Validates that `path` refers to a document (indicated by the fact it contains\r\n * an even numbers of segments).\r\n */\r\nfunction validateDocumentPath(path) {\r\n if (!DocumentKey.isDocumentKey(path)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid document reference. Document references must have an even number of segments, but ${path} has ${path.length}.`);\r\n }\r\n}\r\n/**\r\n * Validates that `path` refers to a collection (indicated by the fact it\r\n * contains an odd numbers of segments).\r\n */\r\nfunction validateCollectionPath(path) {\r\n if (DocumentKey.isDocumentKey(path)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid collection reference. Collection references must have an odd number of segments, but ${path} has ${path.length}.`);\r\n }\r\n}\r\n/**\r\n * Returns true if it's a non-null object without a custom prototype\r\n * (i.e. excludes Array, Date, etc.).\r\n */\r\nfunction isPlainObject(input) {\r\n return (typeof input === 'object' &&\r\n input !== null &&\r\n (Object.getPrototypeOf(input) === Object.prototype ||\r\n Object.getPrototypeOf(input) === null));\r\n}\r\n/** Returns a string describing the type / value of the provided input. */\r\nfunction valueDescription(input) {\r\n if (input === undefined) {\r\n return 'undefined';\r\n }\r\n else if (input === null) {\r\n return 'null';\r\n }\r\n else if (typeof input === 'string') {\r\n if (input.length > 20) {\r\n input = `${input.substring(0, 20)}...`;\r\n }\r\n return JSON.stringify(input);\r\n }\r\n else if (typeof input === 'number' || typeof input === 'boolean') {\r\n return '' + input;\r\n }\r\n else if (typeof input === 'object') {\r\n if (input instanceof Array) {\r\n return 'an array';\r\n }\r\n else {\r\n const customObjectName = tryGetCustomObjectType(input);\r\n if (customObjectName) {\r\n return `a custom ${customObjectName} object`;\r\n }\r\n else {\r\n return 'an object';\r\n }\r\n }\r\n }\r\n else if (typeof input === 'function') {\r\n return 'a function';\r\n }\r\n else {\r\n return fail();\r\n }\r\n}\r\n/** try to get the constructor name for an object. */\r\nfunction tryGetCustomObjectType(input) {\r\n if (input.constructor) {\r\n return input.constructor.name;\r\n }\r\n return null;\r\n}\r\n/**\r\n * Casts `obj` to `T`, optionally unwrapping Compat types to expose the\r\n * underlying instance. Throws if `obj` is not an instance of `T`.\r\n *\r\n * This cast is used in the Lite and Full SDK to verify instance types for\r\n * arguments passed to the public API.\r\n * @internal\r\n */\r\nfunction cast(obj, \r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconstructor) {\r\n if ('_delegate' in obj) {\r\n // Unwrap Compat types\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n obj = obj._delegate;\r\n }\r\n if (!(obj instanceof constructor)) {\r\n if (constructor.name === obj.constructor.name) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Type does not match the expected instance. Did you pass a ' +\r\n `reference from a different Firestore SDK?`);\r\n }\r\n else {\r\n const description = valueDescription(obj);\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Expected type '${constructor.name}', but it was: ${description}`);\r\n }\r\n }\r\n return obj;\r\n}\r\nfunction validatePositiveNumber(functionName, n) {\r\n if (n <= 0) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Function ${functionName}() requires a positive number, but it was: ${n}.`);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * On Node, only supported data source is a `Uint8Array` for now.\r\n */\r\nfunction toByteStreamReader(source, bytesPerRead) {\r\n if (!(source instanceof Uint8Array)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `NodePlatform.toByteStreamReader expects source to be Uint8Array, got ${valueDescription(source)}`);\r\n }\r\n return toByteStreamReaderHelper(source, bytesPerRead);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/*\r\n * A wrapper implementation of Observer that will dispatch events\r\n * asynchronously. To allow immediate silencing, a mute call is added which\r\n * causes events scheduled to no longer be raised.\r\n */\r\nclass AsyncObserver {\r\n constructor(observer) {\r\n this.observer = observer;\r\n /**\r\n * When set to true, will not raise future events. Necessary to deal with\r\n * async detachment of listener.\r\n */\r\n this.muted = false;\r\n }\r\n next(value) {\r\n if (this.observer.next) {\r\n this.scheduleEvent(this.observer.next, value);\r\n }\r\n }\r\n error(error) {\r\n if (this.observer.error) {\r\n this.scheduleEvent(this.observer.error, error);\r\n }\r\n else {\r\n logError('Uncaught Error in snapshot listener:', error.toString());\r\n }\r\n }\r\n mute() {\r\n this.muted = true;\r\n }\r\n scheduleEvent(eventHandler, event) {\r\n if (!this.muted) {\r\n setTimeout(() => {\r\n if (!this.muted) {\r\n eventHandler(event);\r\n }\r\n }, 0);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A complete element in the bundle stream, together with the byte length it\r\n * occupies in the stream.\r\n */\r\nclass SizedBundleElement {\r\n constructor(payload, \r\n // How many bytes this element takes to store in the bundle.\r\n byteLength) {\r\n this.payload = payload;\r\n this.byteLength = byteLength;\r\n }\r\n isBundleMetadata() {\r\n return 'metadata' in this.payload;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A class representing a bundle.\r\n *\r\n * Takes a bundle stream or buffer, and presents abstractions to read bundled\r\n * elements out of the underlying content.\r\n */\r\nclass BundleReaderImpl {\r\n constructor(\r\n /** The reader to read from underlying binary bundle data source. */\r\n reader, serializer) {\r\n this.reader = reader;\r\n this.serializer = serializer;\r\n /** Cached bundle metadata. */\r\n this.metadata = new Deferred();\r\n /**\r\n * Internal buffer to hold bundle content, accumulating incomplete element\r\n * content.\r\n */\r\n this.buffer = new Uint8Array();\r\n this.textDecoder = newTextDecoder();\r\n // Read the metadata (which is the first element).\r\n this.nextElementImpl().then(element => {\r\n if (element && element.isBundleMetadata()) {\r\n this.metadata.resolve(element.payload.metadata);\r\n }\r\n else {\r\n this.metadata.reject(new Error(`The first element of the bundle is not a metadata, it is\n ${JSON.stringify(element === null || element === void 0 ? void 0 : element.payload)}`));\r\n }\r\n }, error => this.metadata.reject(error));\r\n }\r\n close() {\r\n return this.reader.cancel();\r\n }\r\n async getMetadata() {\r\n return this.metadata.promise;\r\n }\r\n async nextElement() {\r\n // Makes sure metadata is read before proceeding.\r\n await this.getMetadata();\r\n return this.nextElementImpl();\r\n }\r\n /**\r\n * Reads from the head of internal buffer, and pulling more data from\r\n * underlying stream if a complete element cannot be found, until an\r\n * element(including the prefixed length and the JSON string) is found.\r\n *\r\n * Once a complete element is read, it is dropped from internal buffer.\r\n *\r\n * Returns either the bundled element, or null if we have reached the end of\r\n * the stream.\r\n */\r\n async nextElementImpl() {\r\n const lengthBuffer = await this.readLength();\r\n if (lengthBuffer === null) {\r\n return null;\r\n }\r\n const lengthString = this.textDecoder.decode(lengthBuffer);\r\n const length = Number(lengthString);\r\n if (isNaN(length)) {\r\n this.raiseError(`length string (${lengthString}) is not valid number`);\r\n }\r\n const jsonString = await this.readJsonString(length);\r\n return new SizedBundleElement(JSON.parse(jsonString), lengthBuffer.length + length);\r\n }\r\n /** First index of '{' from the underlying buffer. */\r\n indexOfOpenBracket() {\r\n return this.buffer.findIndex(v => v === '{'.charCodeAt(0));\r\n }\r\n /**\r\n * Reads from the beginning of the internal buffer, until the first '{', and\r\n * return the content.\r\n *\r\n * If reached end of the stream, returns a null.\r\n */\r\n async readLength() {\r\n while (this.indexOfOpenBracket() < 0) {\r\n const done = await this.pullMoreDataToBuffer();\r\n if (done) {\r\n break;\r\n }\r\n }\r\n // Broke out of the loop because underlying stream is closed, and there\r\n // happens to be no more data to process.\r\n if (this.buffer.length === 0) {\r\n return null;\r\n }\r\n const position = this.indexOfOpenBracket();\r\n // Broke out of the loop because underlying stream is closed, but still\r\n // cannot find an open bracket.\r\n if (position < 0) {\r\n this.raiseError('Reached the end of bundle when a length string is expected.');\r\n }\r\n const result = this.buffer.slice(0, position);\r\n // Update the internal buffer to drop the read length.\r\n this.buffer = this.buffer.slice(position);\r\n return result;\r\n }\r\n /**\r\n * Reads from a specified position from the internal buffer, for a specified\r\n * number of bytes, pulling more data from the underlying stream if needed.\r\n *\r\n * Returns a string decoded from the read bytes.\r\n */\r\n async readJsonString(length) {\r\n while (this.buffer.length < length) {\r\n const done = await this.pullMoreDataToBuffer();\r\n if (done) {\r\n this.raiseError('Reached the end of bundle when more is expected.');\r\n }\r\n }\r\n const result = this.textDecoder.decode(this.buffer.slice(0, length));\r\n // Update the internal buffer to drop the read json string.\r\n this.buffer = this.buffer.slice(length);\r\n return result;\r\n }\r\n raiseError(message) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.reader.cancel();\r\n throw new Error(`Invalid bundle format: ${message}`);\r\n }\r\n /**\r\n * Pulls more data from underlying stream to internal buffer.\r\n * Returns a boolean indicating whether the stream is finished.\r\n */\r\n async pullMoreDataToBuffer() {\r\n const result = await this.reader.read();\r\n if (!result.done) {\r\n const newBuffer = new Uint8Array(this.buffer.length + result.value.length);\r\n newBuffer.set(this.buffer);\r\n newBuffer.set(result.value, this.buffer.length);\r\n this.buffer = newBuffer;\r\n }\r\n return result.done;\r\n }\r\n}\r\nfunction newBundleReader(reader, serializer) {\r\n return new BundleReaderImpl(reader, serializer);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Represents an aggregation that can be performed by Firestore.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nclass AggregateField {\r\n constructor() {\r\n /** A type string to uniquely identify instances of this class. */\r\n this.type = 'AggregateField';\r\n }\r\n}\r\n/**\r\n * The results of executing an aggregation query.\r\n */\r\nclass AggregateQuerySnapshot {\r\n /** @hideconstructor */\r\n constructor(query, _data) {\r\n this._data = _data;\r\n /** A type string to uniquely identify instances of this class. */\r\n this.type = 'AggregateQuerySnapshot';\r\n this.query = query;\r\n }\r\n /**\r\n * Returns the results of the aggregations performed over the underlying\r\n * query.\r\n *\r\n * The keys of the returned object will be the same as those of the\r\n * `AggregateSpec` object specified to the aggregation method, and the values\r\n * will be the corresponding aggregation result.\r\n *\r\n * @returns The results of the aggregations performed over the underlying\r\n * query.\r\n */\r\n data() {\r\n return this._data;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * CountQueryRunner encapsulates the logic needed to run the count aggregation\r\n * queries.\r\n */\r\nclass CountQueryRunner {\r\n constructor(query, datastore, userDataWriter) {\r\n this.query = query;\r\n this.datastore = datastore;\r\n this.userDataWriter = userDataWriter;\r\n }\r\n run() {\r\n return invokeRunAggregationQueryRpc(this.datastore, this.query._query).then(result => {\r\n hardAssert(result[0] !== undefined);\r\n const counts = Object.entries(result[0])\r\n .filter(([key, value]) => key === 'count_alias')\r\n .map(([key, value]) => this.userDataWriter.convertValue(value));\r\n const countValue = counts[0];\r\n hardAssert(typeof countValue === 'number');\r\n return Promise.resolve(new AggregateQuerySnapshot(this.query, {\r\n count: countValue\r\n }));\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Internal transaction object responsible for accumulating the mutations to\r\n * perform and the base versions for any documents read.\r\n */\r\nclass Transaction$2 {\r\n constructor(datastore) {\r\n this.datastore = datastore;\r\n // The version of each document that was read during this transaction.\r\n this.readVersions = new Map();\r\n this.mutations = [];\r\n this.committed = false;\r\n /**\r\n * A deferred usage error that occurred previously in this transaction that\r\n * will cause the transaction to fail once it actually commits.\r\n */\r\n this.lastWriteError = null;\r\n /**\r\n * Set of documents that have been written in the transaction.\r\n *\r\n * When there's more than one write to the same key in a transaction, any\r\n * writes after the first are handled differently.\r\n */\r\n this.writtenDocs = new Set();\r\n }\r\n async lookup(keys) {\r\n this.ensureCommitNotCalled();\r\n if (this.mutations.length > 0) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Firestore transactions require all reads to be executed before all writes.');\r\n }\r\n const docs = await invokeBatchGetDocumentsRpc(this.datastore, keys);\r\n docs.forEach(doc => this.recordVersion(doc));\r\n return docs;\r\n }\r\n set(key, data) {\r\n this.write(data.toMutation(key, this.precondition(key)));\r\n this.writtenDocs.add(key.toString());\r\n }\r\n update(key, data) {\r\n try {\r\n this.write(data.toMutation(key, this.preconditionForUpdate(key)));\r\n }\r\n catch (e) {\r\n this.lastWriteError = e;\r\n }\r\n this.writtenDocs.add(key.toString());\r\n }\r\n delete(key) {\r\n this.write(new DeleteMutation(key, this.precondition(key)));\r\n this.writtenDocs.add(key.toString());\r\n }\r\n async commit() {\r\n this.ensureCommitNotCalled();\r\n if (this.lastWriteError) {\r\n throw this.lastWriteError;\r\n }\r\n const unwritten = this.readVersions;\r\n // For each mutation, note that the doc was written.\r\n this.mutations.forEach(mutation => {\r\n unwritten.delete(mutation.key.toString());\r\n });\r\n // For each document that was read but not written to, we want to perform\r\n // a `verify` operation.\r\n unwritten.forEach((_, path) => {\r\n const key = DocumentKey.fromPath(path);\r\n this.mutations.push(new VerifyMutation(key, this.precondition(key)));\r\n });\r\n await invokeCommitRpc(this.datastore, this.mutations);\r\n this.committed = true;\r\n }\r\n recordVersion(doc) {\r\n let docVersion;\r\n if (doc.isFoundDocument()) {\r\n docVersion = doc.version;\r\n }\r\n else if (doc.isNoDocument()) {\r\n // Represent a deleted doc using SnapshotVersion.min().\r\n docVersion = SnapshotVersion.min();\r\n }\r\n else {\r\n throw fail();\r\n }\r\n const existingVersion = this.readVersions.get(doc.key.toString());\r\n if (existingVersion) {\r\n if (!docVersion.isEqual(existingVersion)) {\r\n // This transaction will fail no matter what.\r\n throw new FirestoreError(Code.ABORTED, 'Document version changed between two reads.');\r\n }\r\n }\r\n else {\r\n this.readVersions.set(doc.key.toString(), docVersion);\r\n }\r\n }\r\n /**\r\n * Returns the version of this document when it was read in this transaction,\r\n * as a precondition, or no precondition if it was not read.\r\n */\r\n precondition(key) {\r\n const version = this.readVersions.get(key.toString());\r\n if (!this.writtenDocs.has(key.toString()) && version) {\r\n if (version.isEqual(SnapshotVersion.min())) {\r\n return Precondition.exists(false);\r\n }\r\n else {\r\n return Precondition.updateTime(version);\r\n }\r\n }\r\n else {\r\n return Precondition.none();\r\n }\r\n }\r\n /**\r\n * Returns the precondition for a document if the operation is an update.\r\n */\r\n preconditionForUpdate(key) {\r\n const version = this.readVersions.get(key.toString());\r\n // The first time a document is written, we want to take into account the\r\n // read time and existence\r\n if (!this.writtenDocs.has(key.toString()) && version) {\r\n if (version.isEqual(SnapshotVersion.min())) {\r\n // The document doesn't exist, so fail the transaction.\r\n // This has to be validated locally because you can't send a\r\n // precondition that a document does not exist without changing the\r\n // semantics of the backend write to be an insert. This is the reverse\r\n // of what we want, since we want to assert that the document doesn't\r\n // exist but then send the update and have it fail. Since we can't\r\n // express that to the backend, we have to validate locally.\r\n // Note: this can change once we can send separate verify writes in the\r\n // transaction.\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Can't update a document that doesn't exist.\");\r\n }\r\n // Document exists, base precondition on document update time.\r\n return Precondition.updateTime(version);\r\n }\r\n else {\r\n // Document was not read, so we just use the preconditions for a blind\r\n // update.\r\n return Precondition.exists(true);\r\n }\r\n }\r\n write(mutation) {\r\n this.ensureCommitNotCalled();\r\n this.mutations.push(mutation);\r\n }\r\n ensureCommitNotCalled() {\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * TransactionRunner encapsulates the logic needed to run and retry transactions\r\n * with backoff.\r\n */\r\nclass TransactionRunner {\r\n constructor(asyncQueue, datastore, options, updateFunction, deferred) {\r\n this.asyncQueue = asyncQueue;\r\n this.datastore = datastore;\r\n this.options = options;\r\n this.updateFunction = updateFunction;\r\n this.deferred = deferred;\r\n this.attemptsRemaining = options.maxAttempts;\r\n this.backoff = new ExponentialBackoff(this.asyncQueue, \"transaction_retry\" /* TimerId.TransactionRetry */);\r\n }\r\n /** Runs the transaction and sets the result on deferred. */\r\n run() {\r\n this.attemptsRemaining -= 1;\r\n this.runWithBackOff();\r\n }\r\n runWithBackOff() {\r\n this.backoff.backoffAndRun(async () => {\r\n const transaction = new Transaction$2(this.datastore);\r\n const userPromise = this.tryRunUpdateFunction(transaction);\r\n if (userPromise) {\r\n userPromise\r\n .then(result => {\r\n this.asyncQueue.enqueueAndForget(() => {\r\n return transaction\r\n .commit()\r\n .then(() => {\r\n this.deferred.resolve(result);\r\n })\r\n .catch(commitError => {\r\n this.handleTransactionError(commitError);\r\n });\r\n });\r\n })\r\n .catch(userPromiseError => {\r\n this.handleTransactionError(userPromiseError);\r\n });\r\n }\r\n });\r\n }\r\n tryRunUpdateFunction(transaction) {\r\n try {\r\n const userPromise = this.updateFunction(transaction);\r\n if (isNullOrUndefined(userPromise) ||\r\n !userPromise.catch ||\r\n !userPromise.then) {\r\n this.deferred.reject(Error('Transaction callback must return a Promise'));\r\n return null;\r\n }\r\n return userPromise;\r\n }\r\n catch (error) {\r\n // Do not retry errors thrown by user provided updateFunction.\r\n this.deferred.reject(error);\r\n return null;\r\n }\r\n }\r\n handleTransactionError(error) {\r\n if (this.attemptsRemaining > 0 && this.isRetryableTransactionError(error)) {\r\n this.attemptsRemaining -= 1;\r\n this.asyncQueue.enqueueAndForget(() => {\r\n this.runWithBackOff();\r\n return Promise.resolve();\r\n });\r\n }\r\n else {\r\n this.deferred.reject(error);\r\n }\r\n }\r\n isRetryableTransactionError(error) {\r\n if (error.name === 'FirebaseError') {\r\n // In transactions, the backend will fail outdated reads with FAILED_PRECONDITION and\r\n // non-matching document versions with ABORTED. These errors should be retried.\r\n const code = error.code;\r\n return (code === 'aborted' ||\r\n code === 'failed-precondition' ||\r\n code === 'already-exists' ||\r\n !isPermanentError(code));\r\n }\r\n return false;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$2 = 'FirestoreClient';\r\nconst MAX_CONCURRENT_LIMBO_RESOLUTIONS = 100;\r\n/**\r\n * FirestoreClient is a top-level class that constructs and owns all of the\r\n * pieces of the client SDK architecture. It is responsible for creating the\r\n * async queue that is shared by all of the other components in the system.\r\n */\r\nclass FirestoreClient {\r\n constructor(authCredentials, appCheckCredentials, \r\n /**\r\n * Asynchronous queue responsible for all of our internal processing. When\r\n * we get incoming work from the user (via public API) or the network\r\n * (incoming GRPC messages), we should always schedule onto this queue.\r\n * This ensures all of our work is properly serialized (e.g. we don't\r\n * start processing a new operation while the previous one is waiting for\r\n * an async I/O to complete).\r\n */\r\n asyncQueue, databaseInfo) {\r\n this.authCredentials = authCredentials;\r\n this.appCheckCredentials = appCheckCredentials;\r\n this.asyncQueue = asyncQueue;\r\n this.databaseInfo = databaseInfo;\r\n this.user = User.UNAUTHENTICATED;\r\n this.clientId = AutoId.newId();\r\n this.authCredentialListener = () => Promise.resolve();\r\n this.appCheckCredentialListener = () => Promise.resolve();\r\n this.authCredentials.start(asyncQueue, async (user) => {\r\n logDebug(LOG_TAG$2, 'Received user=', user.uid);\r\n await this.authCredentialListener(user);\r\n this.user = user;\r\n });\r\n this.appCheckCredentials.start(asyncQueue, newAppCheckToken => {\r\n logDebug(LOG_TAG$2, 'Received new app check token=', newAppCheckToken);\r\n return this.appCheckCredentialListener(newAppCheckToken, this.user);\r\n });\r\n }\r\n async getConfiguration() {\r\n return {\r\n asyncQueue: this.asyncQueue,\r\n databaseInfo: this.databaseInfo,\r\n clientId: this.clientId,\r\n authCredentials: this.authCredentials,\r\n appCheckCredentials: this.appCheckCredentials,\r\n initialUser: this.user,\r\n maxConcurrentLimboResolutions: MAX_CONCURRENT_LIMBO_RESOLUTIONS\r\n };\r\n }\r\n setCredentialChangeListener(listener) {\r\n this.authCredentialListener = listener;\r\n }\r\n setAppCheckTokenChangeListener(listener) {\r\n this.appCheckCredentialListener = listener;\r\n }\r\n /**\r\n * Checks that the client has not been terminated. Ensures that other methods on\r\n * this class cannot be called after the client is terminated.\r\n */\r\n verifyNotTerminated() {\r\n if (this.asyncQueue.isShuttingDown) {\r\n throw new FirestoreError(Code.FAILED_PRECONDITION, 'The client has already been terminated.');\r\n }\r\n }\r\n terminate() {\r\n this.asyncQueue.enterRestrictedMode();\r\n const deferred = new Deferred();\r\n this.asyncQueue.enqueueAndForgetEvenWhileRestricted(async () => {\r\n try {\r\n if (this.onlineComponents) {\r\n await this.onlineComponents.terminate();\r\n }\r\n if (this.offlineComponents) {\r\n await this.offlineComponents.terminate();\r\n }\r\n // The credentials provider must be terminated after shutting down the\r\n // RemoteStore as it will prevent the RemoteStore from retrieving auth\r\n // tokens.\r\n this.authCredentials.shutdown();\r\n this.appCheckCredentials.shutdown();\r\n deferred.resolve();\r\n }\r\n catch (e) {\r\n const firestoreError = wrapInUserErrorIfRecoverable(e, `Failed to shutdown persistence`);\r\n deferred.reject(firestoreError);\r\n }\r\n });\r\n return deferred.promise;\r\n }\r\n}\r\nasync function setOfflineComponentProvider(client, offlineComponentProvider) {\r\n client.asyncQueue.verifyOperationInProgress();\r\n logDebug(LOG_TAG$2, 'Initializing OfflineComponentProvider');\r\n const configuration = await client.getConfiguration();\r\n await offlineComponentProvider.initialize(configuration);\r\n let currentUser = configuration.initialUser;\r\n client.setCredentialChangeListener(async (user) => {\r\n if (!currentUser.isEqual(user)) {\r\n await localStoreHandleUserChange(offlineComponentProvider.localStore, user);\r\n currentUser = user;\r\n }\r\n });\r\n // When a user calls clearPersistence() in one client, all other clients\r\n // need to be terminated to allow the delete to succeed.\r\n offlineComponentProvider.persistence.setDatabaseDeletedListener(() => client.terminate());\r\n client.offlineComponents = offlineComponentProvider;\r\n}\r\nasync function setOnlineComponentProvider(client, onlineComponentProvider) {\r\n client.asyncQueue.verifyOperationInProgress();\r\n const offlineComponentProvider = await ensureOfflineComponents(client);\r\n logDebug(LOG_TAG$2, 'Initializing OnlineComponentProvider');\r\n const configuration = await client.getConfiguration();\r\n await onlineComponentProvider.initialize(offlineComponentProvider, configuration);\r\n // The CredentialChangeListener of the online component provider takes\r\n // precedence over the offline component provider.\r\n client.setCredentialChangeListener(user => remoteStoreHandleCredentialChange(onlineComponentProvider.remoteStore, user));\r\n client.setAppCheckTokenChangeListener((_, user) => remoteStoreHandleCredentialChange(onlineComponentProvider.remoteStore, user));\r\n client.onlineComponents = onlineComponentProvider;\r\n}\r\nasync function ensureOfflineComponents(client) {\r\n if (!client.offlineComponents) {\r\n logDebug(LOG_TAG$2, 'Using default OfflineComponentProvider');\r\n await setOfflineComponentProvider(client, new MemoryOfflineComponentProvider());\r\n }\r\n return client.offlineComponents;\r\n}\r\nasync function ensureOnlineComponents(client) {\r\n if (!client.onlineComponents) {\r\n logDebug(LOG_TAG$2, 'Using default OnlineComponentProvider');\r\n await setOnlineComponentProvider(client, new OnlineComponentProvider());\r\n }\r\n return client.onlineComponents;\r\n}\r\nfunction getPersistence(client) {\r\n return ensureOfflineComponents(client).then(c => c.persistence);\r\n}\r\nfunction getLocalStore(client) {\r\n return ensureOfflineComponents(client).then(c => c.localStore);\r\n}\r\nfunction getRemoteStore(client) {\r\n return ensureOnlineComponents(client).then(c => c.remoteStore);\r\n}\r\nfunction getSyncEngine(client) {\r\n return ensureOnlineComponents(client).then(c => c.syncEngine);\r\n}\r\nfunction getDatastore(client) {\r\n return ensureOnlineComponents(client).then(c => c.datastore);\r\n}\r\nasync function getEventManager(client) {\r\n const onlineComponentProvider = await ensureOnlineComponents(client);\r\n const eventManager = onlineComponentProvider.eventManager;\r\n eventManager.onListen = syncEngineListen.bind(null, onlineComponentProvider.syncEngine);\r\n eventManager.onUnlisten = syncEngineUnlisten.bind(null, onlineComponentProvider.syncEngine);\r\n return eventManager;\r\n}\r\n/** Enables the network connection and re-enqueues all pending operations. */\r\nfunction firestoreClientEnableNetwork(client) {\r\n return client.asyncQueue.enqueue(async () => {\r\n const persistence = await getPersistence(client);\r\n const remoteStore = await getRemoteStore(client);\r\n persistence.setNetworkEnabled(true);\r\n return remoteStoreEnableNetwork(remoteStore);\r\n });\r\n}\r\n/** Disables the network connection. Pending operations will not complete. */\r\nfunction firestoreClientDisableNetwork(client) {\r\n return client.asyncQueue.enqueue(async () => {\r\n const persistence = await getPersistence(client);\r\n const remoteStore = await getRemoteStore(client);\r\n persistence.setNetworkEnabled(false);\r\n return remoteStoreDisableNetwork(remoteStore);\r\n });\r\n}\r\n/**\r\n * Returns a Promise that resolves when all writes that were pending at the time\r\n * this method was called received server acknowledgement. An acknowledgement\r\n * can be either acceptance or rejection.\r\n */\r\nfunction firestoreClientWaitForPendingWrites(client) {\r\n const deferred = new Deferred();\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n const syncEngine = await getSyncEngine(client);\r\n return syncEngineRegisterPendingWritesCallback(syncEngine, deferred);\r\n });\r\n return deferred.promise;\r\n}\r\nfunction firestoreClientListen(client, query, options, observer) {\r\n const wrappedObserver = new AsyncObserver(observer);\r\n const listener = new QueryListener(query, wrappedObserver, options);\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n const eventManager = await getEventManager(client);\r\n return eventManagerListen(eventManager, listener);\r\n });\r\n return () => {\r\n wrappedObserver.mute();\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n const eventManager = await getEventManager(client);\r\n return eventManagerUnlisten(eventManager, listener);\r\n });\r\n };\r\n}\r\nfunction firestoreClientGetDocumentFromLocalCache(client, docKey) {\r\n const deferred = new Deferred();\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n const localStore = await getLocalStore(client);\r\n return readDocumentFromCache(localStore, docKey, deferred);\r\n });\r\n return deferred.promise;\r\n}\r\nfunction firestoreClientGetDocumentViaSnapshotListener(client, key, options = {}) {\r\n const deferred = new Deferred();\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n const eventManager = await getEventManager(client);\r\n return readDocumentViaSnapshotListener(eventManager, client.asyncQueue, key, options, deferred);\r\n });\r\n return deferred.promise;\r\n}\r\nfunction firestoreClientGetDocumentsFromLocalCache(client, query) {\r\n const deferred = new Deferred();\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n const localStore = await getLocalStore(client);\r\n return executeQueryFromCache(localStore, query, deferred);\r\n });\r\n return deferred.promise;\r\n}\r\nfunction firestoreClientGetDocumentsViaSnapshotListener(client, query, options = {}) {\r\n const deferred = new Deferred();\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n const eventManager = await getEventManager(client);\r\n return executeQueryViaSnapshotListener(eventManager, client.asyncQueue, query, options, deferred);\r\n });\r\n return deferred.promise;\r\n}\r\nfunction firestoreClientWrite(client, mutations) {\r\n const deferred = new Deferred();\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n const syncEngine = await getSyncEngine(client);\r\n return syncEngineWrite(syncEngine, mutations, deferred);\r\n });\r\n return deferred.promise;\r\n}\r\nfunction firestoreClientAddSnapshotsInSyncListener(client, observer) {\r\n const wrappedObserver = new AsyncObserver(observer);\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n const eventManager = await getEventManager(client);\r\n return addSnapshotsInSyncListener(eventManager, wrappedObserver);\r\n });\r\n return () => {\r\n wrappedObserver.mute();\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n const eventManager = await getEventManager(client);\r\n return removeSnapshotsInSyncListener(eventManager, wrappedObserver);\r\n });\r\n };\r\n}\r\n/**\r\n * Takes an updateFunction in which a set of reads and writes can be performed\r\n * atomically. In the updateFunction, the client can read and write values\r\n * using the supplied transaction object. After the updateFunction, all\r\n * changes will be committed. If a retryable error occurs (ex: some other\r\n * client has changed any of the data referenced), then the updateFunction\r\n * will be called again after a backoff. If the updateFunction still fails\r\n * after all retries, then the transaction will be rejected.\r\n *\r\n * The transaction object passed to the updateFunction contains methods for\r\n * accessing documents and collections. Unlike other datastore access, data\r\n * accessed with the transaction will not reflect local changes that have not\r\n * been committed. For this reason, it is required that all reads are\r\n * performed before any writes. Transactions must be performed while online.\r\n */\r\nfunction firestoreClientTransaction(client, updateFunction, options) {\r\n const deferred = new Deferred();\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n const datastore = await getDatastore(client);\r\n new TransactionRunner(client.asyncQueue, datastore, options, updateFunction, deferred).run();\r\n });\r\n return deferred.promise;\r\n}\r\nfunction firestoreClientRunCountQuery(client, query, userDataWriter) {\r\n const deferred = new Deferred();\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n try {\r\n const remoteStore = await getRemoteStore(client);\r\n if (!canUseNetwork(remoteStore)) {\r\n deferred.reject(new FirestoreError(Code.UNAVAILABLE, 'Failed to get count result because the client is offline.'));\r\n }\r\n else {\r\n const datastore = await getDatastore(client);\r\n const result = new CountQueryRunner(query, datastore, userDataWriter).run();\r\n deferred.resolve(result);\r\n }\r\n }\r\n catch (e) {\r\n deferred.reject(e);\r\n }\r\n });\r\n return deferred.promise;\r\n}\r\nasync function readDocumentFromCache(localStore, docKey, result) {\r\n try {\r\n const document = await localStoreReadDocument(localStore, docKey);\r\n if (document.isFoundDocument()) {\r\n result.resolve(document);\r\n }\r\n else if (document.isNoDocument()) {\r\n result.resolve(null);\r\n }\r\n else {\r\n result.reject(new FirestoreError(Code.UNAVAILABLE, 'Failed to get document from cache. (However, this document may ' +\r\n \"exist on the server. Run again without setting 'source' in \" +\r\n 'the GetOptions to attempt to retrieve the document from the ' +\r\n 'server.)'));\r\n }\r\n }\r\n catch (e) {\r\n const firestoreError = wrapInUserErrorIfRecoverable(e, `Failed to get document '${docKey} from cache`);\r\n result.reject(firestoreError);\r\n }\r\n}\r\n/**\r\n * Retrieves a latency-compensated document from the backend via a\r\n * SnapshotListener.\r\n */\r\nfunction readDocumentViaSnapshotListener(eventManager, asyncQueue, key, options, result) {\r\n const wrappedObserver = new AsyncObserver({\r\n next: (snap) => {\r\n // Remove query first before passing event to user to avoid\r\n // user actions affecting the now stale query.\r\n asyncQueue.enqueueAndForget(() => eventManagerUnlisten(eventManager, listener));\r\n const exists = snap.docs.has(key);\r\n if (!exists && snap.fromCache) {\r\n // TODO(dimond): If we're online and the document doesn't\r\n // exist then we resolve with a doc.exists set to false. If\r\n // we're offline however, we reject the Promise in this\r\n // case. Two options: 1) Cache the negative response from\r\n // the server so we can deliver that even when you're\r\n // offline 2) Actually reject the Promise in the online case\r\n // if the document doesn't exist.\r\n result.reject(new FirestoreError(Code.UNAVAILABLE, 'Failed to get document because the client is offline.'));\r\n }\r\n else if (exists &&\r\n snap.fromCache &&\r\n options &&\r\n options.source === 'server') {\r\n result.reject(new FirestoreError(Code.UNAVAILABLE, 'Failed to get document from server. (However, this ' +\r\n 'document does exist in the local cache. Run again ' +\r\n 'without setting source to \"server\" to ' +\r\n 'retrieve the cached document.)'));\r\n }\r\n else {\r\n result.resolve(snap);\r\n }\r\n },\r\n error: e => result.reject(e)\r\n });\r\n const listener = new QueryListener(newQueryForPath(key.path), wrappedObserver, {\r\n includeMetadataChanges: true,\r\n waitForSyncWhenOnline: true\r\n });\r\n return eventManagerListen(eventManager, listener);\r\n}\r\nasync function executeQueryFromCache(localStore, query, result) {\r\n try {\r\n const queryResult = await localStoreExecuteQuery(localStore, query, \r\n /* usePreviousResults= */ true);\r\n const view = new View(query, queryResult.remoteKeys);\r\n const viewDocChanges = view.computeDocChanges(queryResult.documents);\r\n const viewChange = view.applyChanges(viewDocChanges, \r\n /* updateLimboDocuments= */ false);\r\n result.resolve(viewChange.snapshot);\r\n }\r\n catch (e) {\r\n const firestoreError = wrapInUserErrorIfRecoverable(e, `Failed to execute query '${query} against cache`);\r\n result.reject(firestoreError);\r\n }\r\n}\r\n/**\r\n * Retrieves a latency-compensated query snapshot from the backend via a\r\n * SnapshotListener.\r\n */\r\nfunction executeQueryViaSnapshotListener(eventManager, asyncQueue, query, options, result) {\r\n const wrappedObserver = new AsyncObserver({\r\n next: snapshot => {\r\n // Remove query first before passing event to user to avoid\r\n // user actions affecting the now stale query.\r\n asyncQueue.enqueueAndForget(() => eventManagerUnlisten(eventManager, listener));\r\n if (snapshot.fromCache && options.source === 'server') {\r\n result.reject(new FirestoreError(Code.UNAVAILABLE, 'Failed to get documents from server. (However, these ' +\r\n 'documents may exist in the local cache. Run again ' +\r\n 'without setting source to \"server\" to ' +\r\n 'retrieve the cached documents.)'));\r\n }\r\n else {\r\n result.resolve(snapshot);\r\n }\r\n },\r\n error: e => result.reject(e)\r\n });\r\n const listener = new QueryListener(query, wrappedObserver, {\r\n includeMetadataChanges: true,\r\n waitForSyncWhenOnline: true\r\n });\r\n return eventManagerListen(eventManager, listener);\r\n}\r\nfunction firestoreClientLoadBundle(client, databaseId, data, resultTask) {\r\n const reader = createBundleReader(data, newSerializer(databaseId));\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n syncEngineLoadBundle(await getSyncEngine(client), reader, resultTask);\r\n });\r\n}\r\nfunction firestoreClientGetNamedQuery(client, queryName) {\r\n return client.asyncQueue.enqueue(async () => localStoreGetNamedQuery(await getLocalStore(client), queryName));\r\n}\r\nfunction createBundleReader(data, serializer) {\r\n let content;\r\n if (typeof data === 'string') {\r\n content = newTextEncoder().encode(data);\r\n }\r\n else {\r\n content = data;\r\n }\r\n return newBundleReader(toByteStreamReader(content), serializer);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG$1 = 'ComponentProvider';\r\n/**\r\n * An instance map that ensures only one Datastore exists per Firestore\r\n * instance.\r\n */\r\nconst datastoreInstances = new Map();\r\n/**\r\n * Removes all components associated with the provided instance. Must be called\r\n * when the `Firestore` instance is terminated.\r\n */\r\nfunction removeComponents(firestore) {\r\n const datastore = datastoreInstances.get(firestore);\r\n if (datastore) {\r\n logDebug(LOG_TAG$1, 'Removing Datastore');\r\n datastoreInstances.delete(firestore);\r\n datastore.terminate();\r\n }\r\n}\r\nfunction makeDatabaseInfo(databaseId, appId, persistenceKey, settings) {\r\n return new DatabaseInfo(databaseId, appId, persistenceKey, settings.host, settings.ssl, settings.experimentalForceLongPolling, settings.experimentalAutoDetectLongPolling, settings.useFetchStreams);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// settings() defaults:\r\nconst DEFAULT_HOST = 'firestore.googleapis.com';\r\nconst DEFAULT_SSL = true;\r\n/**\r\n * A concrete type describing all the values that can be applied via a\r\n * user-supplied `FirestoreSettings` object. This is a separate type so that\r\n * defaults can be supplied and the value can be checked for equality.\r\n */\r\nclass FirestoreSettingsImpl {\r\n constructor(settings) {\r\n var _a;\r\n if (settings.host === undefined) {\r\n if (settings.ssl !== undefined) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Can't provide ssl option if host option is not set\");\r\n }\r\n this.host = DEFAULT_HOST;\r\n this.ssl = DEFAULT_SSL;\r\n }\r\n else {\r\n this.host = settings.host;\r\n this.ssl = (_a = settings.ssl) !== null && _a !== void 0 ? _a : DEFAULT_SSL;\r\n }\r\n this.credentials = settings.credentials;\r\n this.ignoreUndefinedProperties = !!settings.ignoreUndefinedProperties;\r\n if (settings.cacheSizeBytes === undefined) {\r\n this.cacheSizeBytes = LRU_DEFAULT_CACHE_SIZE_BYTES;\r\n }\r\n else {\r\n if (settings.cacheSizeBytes !== LRU_COLLECTION_DISABLED &&\r\n settings.cacheSizeBytes < LRU_MINIMUM_CACHE_SIZE_BYTES) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `cacheSizeBytes must be at least ${LRU_MINIMUM_CACHE_SIZE_BYTES}`);\r\n }\r\n else {\r\n this.cacheSizeBytes = settings.cacheSizeBytes;\r\n }\r\n }\r\n this.experimentalForceLongPolling = !!settings.experimentalForceLongPolling;\r\n this.experimentalAutoDetectLongPolling =\r\n !!settings.experimentalAutoDetectLongPolling;\r\n this.useFetchStreams = !!settings.useFetchStreams;\r\n validateIsNotUsedTogether('experimentalForceLongPolling', settings.experimentalForceLongPolling, 'experimentalAutoDetectLongPolling', settings.experimentalAutoDetectLongPolling);\r\n }\r\n isEqual(other) {\r\n return (this.host === other.host &&\r\n this.ssl === other.ssl &&\r\n this.credentials === other.credentials &&\r\n this.cacheSizeBytes === other.cacheSizeBytes &&\r\n this.experimentalForceLongPolling ===\r\n other.experimentalForceLongPolling &&\r\n this.experimentalAutoDetectLongPolling ===\r\n other.experimentalAutoDetectLongPolling &&\r\n this.ignoreUndefinedProperties === other.ignoreUndefinedProperties &&\r\n this.useFetchStreams === other.useFetchStreams);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The Cloud Firestore service interface.\r\n *\r\n * Do not call this constructor directly. Instead, use {@link (getFirestore:1)}.\r\n */\r\nclass Firestore$1 {\r\n /** @hideconstructor */\r\n constructor(_authCredentials, _appCheckCredentials, _databaseId, _app) {\r\n this._authCredentials = _authCredentials;\r\n this._appCheckCredentials = _appCheckCredentials;\r\n this._databaseId = _databaseId;\r\n this._app = _app;\r\n /**\r\n * Whether it's a Firestore or Firestore Lite instance.\r\n */\r\n this.type = 'firestore-lite';\r\n this._persistenceKey = '(lite)';\r\n this._settings = new FirestoreSettingsImpl({});\r\n this._settingsFrozen = false;\r\n }\r\n /**\r\n * The {@link @firebase/app#FirebaseApp} associated with this `Firestore` service\r\n * instance.\r\n */\r\n get app() {\r\n if (!this._app) {\r\n throw new FirestoreError(Code.FAILED_PRECONDITION, \"Firestore was not initialized using the Firebase SDK. 'app' is \" +\r\n 'not available');\r\n }\r\n return this._app;\r\n }\r\n get _initialized() {\r\n return this._settingsFrozen;\r\n }\r\n get _terminated() {\r\n return this._terminateTask !== undefined;\r\n }\r\n _setSettings(settings) {\r\n if (this._settingsFrozen) {\r\n throw new FirestoreError(Code.FAILED_PRECONDITION, 'Firestore has already been started and its settings can no longer ' +\r\n 'be changed. You can only modify settings before calling any other ' +\r\n 'methods on a Firestore object.');\r\n }\r\n this._settings = new FirestoreSettingsImpl(settings);\r\n if (settings.credentials !== undefined) {\r\n this._authCredentials = makeAuthCredentialsProvider(settings.credentials);\r\n }\r\n }\r\n _getSettings() {\r\n return this._settings;\r\n }\r\n _freezeSettings() {\r\n this._settingsFrozen = true;\r\n return this._settings;\r\n }\r\n _delete() {\r\n if (!this._terminateTask) {\r\n this._terminateTask = this._terminate();\r\n }\r\n return this._terminateTask;\r\n }\r\n /** Returns a JSON-serializable representation of this `Firestore` instance. */\r\n toJSON() {\r\n return {\r\n app: this._app,\r\n databaseId: this._databaseId,\r\n settings: this._settings\r\n };\r\n }\r\n /**\r\n * Terminates all components used by this client. Subclasses can override\r\n * this method to clean up their own dependencies, but must also call this\r\n * method.\r\n *\r\n * Only ever called once.\r\n */\r\n _terminate() {\r\n removeComponents(this);\r\n return Promise.resolve();\r\n }\r\n}\r\n/**\r\n * Modify this instance to communicate with the Cloud Firestore emulator.\r\n *\r\n * Note: This must be called before this instance has been used to do any\r\n * operations.\r\n *\r\n * @param firestore - The `Firestore` instance to configure to connect to the\r\n * emulator.\r\n * @param host - the emulator host (ex: localhost).\r\n * @param port - the emulator port (ex: 9000).\r\n * @param options.mockUserToken - the mock auth token to use for unit testing\r\n * Security Rules.\r\n */\r\nfunction connectFirestoreEmulator(firestore, host, port, options = {}) {\r\n var _a;\r\n firestore = cast(firestore, Firestore$1);\r\n const settings = firestore._getSettings();\r\n if (settings.host !== DEFAULT_HOST && settings.host !== host) {\r\n logWarn('Host has been set in both settings() and useEmulator(), emulator host ' +\r\n 'will be used');\r\n }\r\n firestore._setSettings(Object.assign(Object.assign({}, settings), { host: `${host}:${port}`, ssl: false }));\r\n if (options.mockUserToken) {\r\n let token;\r\n let user;\r\n if (typeof options.mockUserToken === 'string') {\r\n token = options.mockUserToken;\r\n user = User.MOCK_USER;\r\n }\r\n else {\r\n // Let createMockUserToken validate first (catches common mistakes like\r\n // invalid field \"uid\" and missing field \"sub\" / \"user_id\".)\r\n token = createMockUserToken(options.mockUserToken, (_a = firestore._app) === null || _a === void 0 ? void 0 : _a.options.projectId);\r\n const uid = options.mockUserToken.sub || options.mockUserToken.user_id;\r\n if (!uid) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"mockUserToken must contain 'sub' or 'user_id' field!\");\r\n }\r\n user = new User(uid);\r\n }\r\n firestore._authCredentials = new EmulatorAuthCredentialsProvider(new OAuthToken(token, user));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A `DocumentReference` refers to a document location in a Firestore database\r\n * and can be used to write, read, or listen to the location. The document at\r\n * the referenced location may or may not exist.\r\n */\r\nclass DocumentReference {\r\n /** @hideconstructor */\r\n constructor(firestore, \r\n /**\r\n * If provided, the `FirestoreDataConverter` associated with this instance.\r\n */\r\n converter, _key) {\r\n this.converter = converter;\r\n this._key = _key;\r\n /** The type of this Firestore reference. */\r\n this.type = 'document';\r\n this.firestore = firestore;\r\n }\r\n get _path() {\r\n return this._key.path;\r\n }\r\n /**\r\n * The document's identifier within its collection.\r\n */\r\n get id() {\r\n return this._key.path.lastSegment();\r\n }\r\n /**\r\n * A string representing the path of the referenced document (relative\r\n * to the root of the database).\r\n */\r\n get path() {\r\n return this._key.path.canonicalString();\r\n }\r\n /**\r\n * The collection this `DocumentReference` belongs to.\r\n */\r\n get parent() {\r\n return new CollectionReference(this.firestore, this.converter, this._key.path.popLast());\r\n }\r\n withConverter(converter) {\r\n return new DocumentReference(this.firestore, converter, this._key);\r\n }\r\n}\r\n/**\r\n * A `Query` refers to a query which you can read or listen to. You can also\r\n * construct refined `Query` objects by adding filters and ordering.\r\n */\r\nclass Query {\r\n // This is the lite version of the Query class in the main SDK.\r\n /** @hideconstructor protected */\r\n constructor(firestore, \r\n /**\r\n * If provided, the `FirestoreDataConverter` associated with this instance.\r\n */\r\n converter, _query) {\r\n this.converter = converter;\r\n this._query = _query;\r\n /** The type of this Firestore reference. */\r\n this.type = 'query';\r\n this.firestore = firestore;\r\n }\r\n withConverter(converter) {\r\n return new Query(this.firestore, converter, this._query);\r\n }\r\n}\r\n/**\r\n * A `CollectionReference` object can be used for adding documents, getting\r\n * document references, and querying for documents (using {@link query}).\r\n */\r\nclass CollectionReference extends Query {\r\n /** @hideconstructor */\r\n constructor(firestore, converter, _path) {\r\n super(firestore, converter, newQueryForPath(_path));\r\n this._path = _path;\r\n /** The type of this Firestore reference. */\r\n this.type = 'collection';\r\n }\r\n /** The collection's identifier. */\r\n get id() {\r\n return this._query.path.lastSegment();\r\n }\r\n /**\r\n * A string representing the path of the referenced collection (relative\r\n * to the root of the database).\r\n */\r\n get path() {\r\n return this._query.path.canonicalString();\r\n }\r\n /**\r\n * A reference to the containing `DocumentReference` if this is a\r\n * subcollection. If this isn't a subcollection, the reference is null.\r\n */\r\n get parent() {\r\n const parentPath = this._path.popLast();\r\n if (parentPath.isEmpty()) {\r\n return null;\r\n }\r\n else {\r\n return new DocumentReference(this.firestore, \r\n /* converter= */ null, new DocumentKey(parentPath));\r\n }\r\n }\r\n withConverter(converter) {\r\n return new CollectionReference(this.firestore, converter, this._path);\r\n }\r\n}\r\nfunction collection(parent, path, ...pathSegments) {\r\n parent = getModularInstance(parent);\r\n validateNonEmptyArgument('collection', 'path', path);\r\n if (parent instanceof Firestore$1) {\r\n const absolutePath = ResourcePath.fromString(path, ...pathSegments);\r\n validateCollectionPath(absolutePath);\r\n return new CollectionReference(parent, /* converter= */ null, absolutePath);\r\n }\r\n else {\r\n if (!(parent instanceof DocumentReference) &&\r\n !(parent instanceof CollectionReference)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Expected first argument to collection() to be a CollectionReference, ' +\r\n 'a DocumentReference or FirebaseFirestore');\r\n }\r\n const absolutePath = parent._path.child(ResourcePath.fromString(path, ...pathSegments));\r\n validateCollectionPath(absolutePath);\r\n return new CollectionReference(parent.firestore, \r\n /* converter= */ null, absolutePath);\r\n }\r\n}\r\n// TODO(firestorelite): Consider using ErrorFactory -\r\n// https://github.com/firebase/firebase-js-sdk/blob/0131e1f/packages/util/src/errors.ts#L106\r\n/**\r\n * Creates and returns a new `Query` instance that includes all documents in the\r\n * database that are contained in a collection or subcollection with the\r\n * given `collectionId`.\r\n *\r\n * @param firestore - A reference to the root `Firestore` instance.\r\n * @param collectionId - Identifies the collections to query over. Every\r\n * collection or subcollection with this ID as the last segment of its path\r\n * will be included. Cannot contain a slash.\r\n * @returns The created `Query`.\r\n */\r\nfunction collectionGroup(firestore, collectionId) {\r\n firestore = cast(firestore, Firestore$1);\r\n validateNonEmptyArgument('collectionGroup', 'collection id', collectionId);\r\n if (collectionId.indexOf('/') >= 0) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid collection ID '${collectionId}' passed to function ` +\r\n `collectionGroup(). Collection IDs must not contain '/'.`);\r\n }\r\n return new Query(firestore, \r\n /* converter= */ null, newQueryForCollectionGroup(collectionId));\r\n}\r\nfunction doc(parent, path, ...pathSegments) {\r\n parent = getModularInstance(parent);\r\n // We allow omission of 'pathString' but explicitly prohibit passing in both\r\n // 'undefined' and 'null'.\r\n if (arguments.length === 1) {\r\n path = AutoId.newId();\r\n }\r\n validateNonEmptyArgument('doc', 'path', path);\r\n if (parent instanceof Firestore$1) {\r\n const absolutePath = ResourcePath.fromString(path, ...pathSegments);\r\n validateDocumentPath(absolutePath);\r\n return new DocumentReference(parent, \r\n /* converter= */ null, new DocumentKey(absolutePath));\r\n }\r\n else {\r\n if (!(parent instanceof DocumentReference) &&\r\n !(parent instanceof CollectionReference)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Expected first argument to collection() to be a CollectionReference, ' +\r\n 'a DocumentReference or FirebaseFirestore');\r\n }\r\n const absolutePath = parent._path.child(ResourcePath.fromString(path, ...pathSegments));\r\n validateDocumentPath(absolutePath);\r\n return new DocumentReference(parent.firestore, parent instanceof CollectionReference ? parent.converter : null, new DocumentKey(absolutePath));\r\n }\r\n}\r\n/**\r\n * Returns true if the provided references are equal.\r\n *\r\n * @param left - A reference to compare.\r\n * @param right - A reference to compare.\r\n * @returns true if the references point to the same location in the same\r\n * Firestore database.\r\n */\r\nfunction refEqual(left, right) {\r\n left = getModularInstance(left);\r\n right = getModularInstance(right);\r\n if ((left instanceof DocumentReference ||\r\n left instanceof CollectionReference) &&\r\n (right instanceof DocumentReference || right instanceof CollectionReference)) {\r\n return (left.firestore === right.firestore &&\r\n left.path === right.path &&\r\n left.converter === right.converter);\r\n }\r\n return false;\r\n}\r\n/**\r\n * Returns true if the provided queries point to the same collection and apply\r\n * the same constraints.\r\n *\r\n * @param left - A `Query` to compare.\r\n * @param right - A `Query` to compare.\r\n * @returns true if the references point to the same location in the same\r\n * Firestore database.\r\n */\r\nfunction queryEqual(left, right) {\r\n left = getModularInstance(left);\r\n right = getModularInstance(right);\r\n if (left instanceof Query && right instanceof Query) {\r\n return (left.firestore === right.firestore &&\r\n queryEquals(left._query, right._query) &&\r\n left.converter === right.converter);\r\n }\r\n return false;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_TAG = 'AsyncQueue';\r\nclass AsyncQueueImpl {\r\n constructor() {\r\n // The last promise in the queue.\r\n this.tail = Promise.resolve();\r\n // A list of retryable operations. Retryable operations are run in order and\r\n // retried with backoff.\r\n this.retryableOps = [];\r\n // Is this AsyncQueue being shut down? Once it is set to true, it will not\r\n // be changed again.\r\n this._isShuttingDown = false;\r\n // Operations scheduled to be queued in the future. Operations are\r\n // automatically removed after they are run or canceled.\r\n this.delayedOperations = [];\r\n // visible for testing\r\n this.failure = null;\r\n // Flag set while there's an outstanding AsyncQueue operation, used for\r\n // assertion sanity-checks.\r\n this.operationInProgress = false;\r\n // Enabled during shutdown on Safari to prevent future access to IndexedDB.\r\n this.skipNonRestrictedTasks = false;\r\n // List of TimerIds to fast-forward delays for.\r\n this.timerIdsToSkip = [];\r\n // Backoff timer used to schedule retries for retryable operations\r\n this.backoff = new ExponentialBackoff(this, \"async_queue_retry\" /* TimerId.AsyncQueueRetry */);\r\n // Visibility handler that triggers an immediate retry of all retryable\r\n // operations. Meant to speed up recovery when we regain file system access\r\n // after page comes into foreground.\r\n this.visibilityHandler = () => {\r\n this.backoff.skipBackoff();\r\n };\r\n }\r\n get isShuttingDown() {\r\n return this._isShuttingDown;\r\n }\r\n /**\r\n * Adds a new operation to the queue without waiting for it to complete (i.e.\r\n * we ignore the Promise result).\r\n */\r\n enqueueAndForget(op) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.enqueue(op);\r\n }\r\n enqueueAndForgetEvenWhileRestricted(op) {\r\n this.verifyNotFailed();\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.enqueueInternal(op);\r\n }\r\n enterRestrictedMode(purgeExistingTasks) {\r\n if (!this._isShuttingDown) {\r\n this._isShuttingDown = true;\r\n this.skipNonRestrictedTasks = purgeExistingTasks || false;\r\n }\r\n }\r\n enqueue(op) {\r\n this.verifyNotFailed();\r\n if (this._isShuttingDown) {\r\n // Return a Promise which never resolves.\r\n return new Promise(() => { });\r\n }\r\n // Create a deferred Promise that we can return to the callee. This\r\n // allows us to return a \"hanging Promise\" only to the callee and still\r\n // advance the queue even when the operation is not run.\r\n const task = new Deferred();\r\n return this.enqueueInternal(() => {\r\n if (this._isShuttingDown && this.skipNonRestrictedTasks) {\r\n // We do not resolve 'task'\r\n return Promise.resolve();\r\n }\r\n op().then(task.resolve, task.reject);\r\n return task.promise;\r\n }).then(() => task.promise);\r\n }\r\n enqueueRetryable(op) {\r\n this.enqueueAndForget(() => {\r\n this.retryableOps.push(op);\r\n return this.retryNextOp();\r\n });\r\n }\r\n /**\r\n * Runs the next operation from the retryable queue. If the operation fails,\r\n * reschedules with backoff.\r\n */\r\n async retryNextOp() {\r\n if (this.retryableOps.length === 0) {\r\n return;\r\n }\r\n try {\r\n await this.retryableOps[0]();\r\n this.retryableOps.shift();\r\n this.backoff.reset();\r\n }\r\n catch (e) {\r\n if (isIndexedDbTransactionError(e)) {\r\n logDebug(LOG_TAG, 'Operation failed with retryable error: ' + e);\r\n }\r\n else {\r\n throw e; // Failure will be handled by AsyncQueue\r\n }\r\n }\r\n if (this.retryableOps.length > 0) {\r\n // If there are additional operations, we re-schedule `retryNextOp()`.\r\n // This is necessary to run retryable operations that failed during\r\n // their initial attempt since we don't know whether they are already\r\n // enqueued. If, for example, `op1`, `op2`, `op3` are enqueued and `op1`\r\n // needs to be re-run, we will run `op1`, `op1`, `op2` using the\r\n // already enqueued calls to `retryNextOp()`. `op3()` will then run in the\r\n // call scheduled here.\r\n // Since `backoffAndRun()` cancels an existing backoff and schedules a\r\n // new backoff on every call, there is only ever a single additional\r\n // operation in the queue.\r\n this.backoff.backoffAndRun(() => this.retryNextOp());\r\n }\r\n }\r\n enqueueInternal(op) {\r\n const newTail = this.tail.then(() => {\r\n this.operationInProgress = true;\r\n return op()\r\n .catch((error) => {\r\n this.failure = error;\r\n this.operationInProgress = false;\r\n const message = getMessageOrStack(error);\r\n logError('INTERNAL UNHANDLED ERROR: ', message);\r\n // Re-throw the error so that this.tail becomes a rejected Promise and\r\n // all further attempts to chain (via .then) will just short-circuit\r\n // and return the rejected Promise.\r\n throw error;\r\n })\r\n .then(result => {\r\n this.operationInProgress = false;\r\n return result;\r\n });\r\n });\r\n this.tail = newTail;\r\n return newTail;\r\n }\r\n enqueueAfterDelay(timerId, delayMs, op) {\r\n this.verifyNotFailed();\r\n // Fast-forward delays for timerIds that have been overriden.\r\n if (this.timerIdsToSkip.indexOf(timerId) > -1) {\r\n delayMs = 0;\r\n }\r\n const delayedOp = DelayedOperation.createAndSchedule(this, timerId, delayMs, op, removedOp => this.removeDelayedOperation(removedOp));\r\n this.delayedOperations.push(delayedOp);\r\n return delayedOp;\r\n }\r\n verifyNotFailed() {\r\n if (this.failure) {\r\n fail();\r\n }\r\n }\r\n verifyOperationInProgress() {\r\n }\r\n /**\r\n * Waits until all currently queued tasks are finished executing. Delayed\r\n * operations are not run.\r\n */\r\n async drain() {\r\n // Operations in the queue prior to draining may have enqueued additional\r\n // operations. Keep draining the queue until the tail is no longer advanced,\r\n // which indicates that no more new operations were enqueued and that all\r\n // operations were executed.\r\n let currentTail;\r\n do {\r\n currentTail = this.tail;\r\n await currentTail;\r\n } while (currentTail !== this.tail);\r\n }\r\n /**\r\n * For Tests: Determine if a delayed operation with a particular TimerId\r\n * exists.\r\n */\r\n containsDelayedOperation(timerId) {\r\n for (const op of this.delayedOperations) {\r\n if (op.timerId === timerId) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * For Tests: Runs some or all delayed operations early.\r\n *\r\n * @param lastTimerId - Delayed operations up to and including this TimerId\r\n * will be drained. Pass TimerId.All to run all delayed operations.\r\n * @returns a Promise that resolves once all operations have been run.\r\n */\r\n runAllDelayedOperationsUntil(lastTimerId) {\r\n // Note that draining may generate more delayed ops, so we do that first.\r\n return this.drain().then(() => {\r\n // Run ops in the same order they'd run if they ran naturally.\r\n this.delayedOperations.sort((a, b) => a.targetTimeMs - b.targetTimeMs);\r\n for (const op of this.delayedOperations) {\r\n op.skipDelay();\r\n if (lastTimerId !== \"all\" /* TimerId.All */ && op.timerId === lastTimerId) {\r\n break;\r\n }\r\n }\r\n return this.drain();\r\n });\r\n }\r\n /**\r\n * For Tests: Skip all subsequent delays for a timer id.\r\n */\r\n skipDelaysForTimerId(timerId) {\r\n this.timerIdsToSkip.push(timerId);\r\n }\r\n /** Called once a DelayedOperation is run or canceled. */\r\n removeDelayedOperation(op) {\r\n // NOTE: indexOf / slice are O(n), but delayedOperations is expected to be small.\r\n const index = this.delayedOperations.indexOf(op);\r\n this.delayedOperations.splice(index, 1);\r\n }\r\n}\r\nfunction newAsyncQueue() {\r\n return new AsyncQueueImpl();\r\n}\r\n/**\r\n * Chrome includes Error.message in Error.stack. Other browsers do not.\r\n * This returns expected output of message + stack when available.\r\n * @param error - Error or FirestoreError\r\n */\r\nfunction getMessageOrStack(error) {\r\n let message = error.message || '';\r\n if (error.stack) {\r\n if (error.stack.includes(error.message)) {\r\n message = error.stack;\r\n }\r\n else {\r\n message = error.message + '\\n' + error.stack;\r\n }\r\n }\r\n return message;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Represents the task of loading a Firestore bundle. It provides progress of bundle\r\n * loading, as well as task completion and error events.\r\n *\r\n * The API is compatible with `Promise`.\r\n */\r\nclass LoadBundleTask {\r\n constructor() {\r\n this._progressObserver = {};\r\n this._taskCompletionResolver = new Deferred();\r\n this._lastProgress = {\r\n taskState: 'Running',\r\n totalBytes: 0,\r\n totalDocuments: 0,\r\n bytesLoaded: 0,\r\n documentsLoaded: 0\r\n };\r\n }\r\n /**\r\n * Registers functions to listen to bundle loading progress events.\r\n * @param next - Called when there is a progress update from bundle loading. Typically `next` calls occur\r\n * each time a Firestore document is loaded from the bundle.\r\n * @param error - Called when an error occurs during bundle loading. The task aborts after reporting the\r\n * error, and there should be no more updates after this.\r\n * @param complete - Called when the loading task is complete.\r\n */\r\n onProgress(next, error, complete) {\r\n this._progressObserver = {\r\n next,\r\n error,\r\n complete\r\n };\r\n }\r\n /**\r\n * Implements the `Promise.catch` interface.\r\n *\r\n * @param onRejected - Called when an error occurs during bundle loading.\r\n */\r\n catch(onRejected) {\r\n return this._taskCompletionResolver.promise.catch(onRejected);\r\n }\r\n /**\r\n * Implements the `Promise.then` interface.\r\n *\r\n * @param onFulfilled - Called on the completion of the loading task with a final `LoadBundleTaskProgress` update.\r\n * The update will always have its `taskState` set to `\"Success\"`.\r\n * @param onRejected - Called when an error occurs during bundle loading.\r\n */\r\n then(onFulfilled, onRejected) {\r\n return this._taskCompletionResolver.promise.then(onFulfilled, onRejected);\r\n }\r\n /**\r\n * Notifies all observers that bundle loading has completed, with a provided\r\n * `LoadBundleTaskProgress` object.\r\n *\r\n * @private\r\n */\r\n _completeWith(progress) {\r\n this._updateProgress(progress);\r\n if (this._progressObserver.complete) {\r\n this._progressObserver.complete();\r\n }\r\n this._taskCompletionResolver.resolve(progress);\r\n }\r\n /**\r\n * Notifies all observers that bundle loading has failed, with a provided\r\n * `Error` as the reason.\r\n *\r\n * @private\r\n */\r\n _failWith(error) {\r\n this._lastProgress.taskState = 'Error';\r\n if (this._progressObserver.next) {\r\n this._progressObserver.next(this._lastProgress);\r\n }\r\n if (this._progressObserver.error) {\r\n this._progressObserver.error(error);\r\n }\r\n this._taskCompletionResolver.reject(error);\r\n }\r\n /**\r\n * Notifies a progress update of loading a bundle.\r\n * @param progress - The new progress.\r\n *\r\n * @private\r\n */\r\n _updateProgress(progress) {\r\n this._lastProgress = progress;\r\n if (this._progressObserver.next) {\r\n this._progressObserver.next(progress);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** DOMException error code constants. */\r\nconst DOM_EXCEPTION_INVALID_STATE = 11;\r\nconst DOM_EXCEPTION_ABORTED = 20;\r\nconst DOM_EXCEPTION_QUOTA_EXCEEDED = 22;\r\n/**\r\n * Constant used to indicate the LRU garbage collection should be disabled.\r\n * Set this value as the `cacheSizeBytes` on the settings passed to the\r\n * {@link Firestore} instance.\r\n */\r\nconst CACHE_SIZE_UNLIMITED = LRU_COLLECTION_DISABLED;\r\n/**\r\n * The Cloud Firestore service interface.\r\n *\r\n * Do not call this constructor directly. Instead, use {@link (getFirestore:1)}.\r\n */\r\nclass Firestore extends Firestore$1 {\r\n /** @hideconstructor */\r\n constructor(authCredentialsProvider, appCheckCredentialsProvider, databaseId, app) {\r\n super(authCredentialsProvider, appCheckCredentialsProvider, databaseId, app);\r\n /**\r\n * Whether it's a {@link Firestore} or Firestore Lite instance.\r\n */\r\n this.type = 'firestore';\r\n this._queue = newAsyncQueue();\r\n this._persistenceKey = (app === null || app === void 0 ? void 0 : app.name) || '[DEFAULT]';\r\n }\r\n _terminate() {\r\n if (!this._firestoreClient) {\r\n // The client must be initialized to ensure that all subsequent API\r\n // usage throws an exception.\r\n configureFirestore(this);\r\n }\r\n return this._firestoreClient.terminate();\r\n }\r\n}\r\n/**\r\n * Initializes a new instance of {@link Firestore} with the provided settings.\r\n * Can only be called before any other function, including\r\n * {@link (getFirestore:1)}. If the custom settings are empty, this function is\r\n * equivalent to calling {@link (getFirestore:1)}.\r\n *\r\n * @param app - The {@link @firebase/app#FirebaseApp} with which the {@link Firestore} instance will\r\n * be associated.\r\n * @param settings - A settings object to configure the {@link Firestore} instance.\r\n * @param databaseId - The name of database.\r\n * @returns A newly initialized {@link Firestore} instance.\r\n */\r\nfunction initializeFirestore(app, settings, databaseId) {\r\n if (!databaseId) {\r\n databaseId = DEFAULT_DATABASE_NAME;\r\n }\r\n const provider = _getProvider(app, 'firestore');\r\n if (provider.isInitialized(databaseId)) {\r\n const existingInstance = provider.getImmediate({\r\n identifier: databaseId\r\n });\r\n const initialSettings = provider.getOptions(databaseId);\r\n if (deepEqual(initialSettings, settings)) {\r\n return existingInstance;\r\n }\r\n else {\r\n throw new FirestoreError(Code.FAILED_PRECONDITION, 'initializeFirestore() has already been called with ' +\r\n 'different options. To avoid this error, call initializeFirestore() with the ' +\r\n 'same options as when it was originally called, or call getFirestore() to return the' +\r\n ' already initialized instance.');\r\n }\r\n }\r\n if (settings.cacheSizeBytes !== undefined &&\r\n settings.cacheSizeBytes !== CACHE_SIZE_UNLIMITED &&\r\n settings.cacheSizeBytes < LRU_MINIMUM_CACHE_SIZE_BYTES) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `cacheSizeBytes must be at least ${LRU_MINIMUM_CACHE_SIZE_BYTES}`);\r\n }\r\n return provider.initialize({\r\n options: settings,\r\n instanceIdentifier: databaseId\r\n });\r\n}\r\nfunction getFirestore(appOrDatabaseId, optionalDatabaseId) {\r\n const app = typeof appOrDatabaseId === 'object' ? appOrDatabaseId : getApp();\r\n const databaseId = typeof appOrDatabaseId === 'string'\r\n ? appOrDatabaseId\r\n : optionalDatabaseId || DEFAULT_DATABASE_NAME;\r\n const db = _getProvider(app, 'firestore').getImmediate({\r\n identifier: databaseId\r\n });\r\n if (!db._initialized) {\r\n const emulator = getDefaultEmulatorHostnameAndPort('firestore');\r\n if (emulator) {\r\n connectFirestoreEmulator(db, ...emulator);\r\n }\r\n }\r\n return db;\r\n}\r\n/**\r\n * @internal\r\n */\r\nfunction ensureFirestoreConfigured(firestore) {\r\n if (!firestore._firestoreClient) {\r\n configureFirestore(firestore);\r\n }\r\n firestore._firestoreClient.verifyNotTerminated();\r\n return firestore._firestoreClient;\r\n}\r\nfunction configureFirestore(firestore) {\r\n var _a;\r\n const settings = firestore._freezeSettings();\r\n const databaseInfo = makeDatabaseInfo(firestore._databaseId, ((_a = firestore._app) === null || _a === void 0 ? void 0 : _a.options.appId) || '', firestore._persistenceKey, settings);\r\n firestore._firestoreClient = new FirestoreClient(firestore._authCredentials, firestore._appCheckCredentials, firestore._queue, databaseInfo);\r\n}\r\n/**\r\n * Attempts to enable persistent storage, if possible.\r\n *\r\n * Must be called before any other functions (other than\r\n * {@link initializeFirestore}, {@link (getFirestore:1)} or\r\n * {@link clearIndexedDbPersistence}.\r\n *\r\n * If this fails, `enableIndexedDbPersistence()` will reject the promise it\r\n * returns. Note that even after this failure, the {@link Firestore} instance will\r\n * remain usable, however offline persistence will be disabled.\r\n *\r\n * There are several reasons why this can fail, which can be identified by\r\n * the `code` on the error.\r\n *\r\n * * failed-precondition: The app is already open in another browser tab.\r\n * * unimplemented: The browser is incompatible with the offline\r\n * persistence implementation.\r\n *\r\n * @param firestore - The {@link Firestore} instance to enable persistence for.\r\n * @param persistenceSettings - Optional settings object to configure\r\n * persistence.\r\n * @returns A `Promise` that represents successfully enabling persistent storage.\r\n */\r\nfunction enableIndexedDbPersistence(firestore, persistenceSettings) {\r\n firestore = cast(firestore, Firestore);\r\n verifyNotInitialized(firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n const settings = firestore._freezeSettings();\r\n const onlineComponentProvider = new OnlineComponentProvider();\r\n const offlineComponentProvider = new IndexedDbOfflineComponentProvider(onlineComponentProvider, settings.cacheSizeBytes, persistenceSettings === null || persistenceSettings === void 0 ? void 0 : persistenceSettings.forceOwnership);\r\n return setPersistenceProviders(client, onlineComponentProvider, offlineComponentProvider);\r\n}\r\n/**\r\n * Attempts to enable multi-tab persistent storage, if possible. If enabled\r\n * across all tabs, all operations share access to local persistence, including\r\n * shared execution of queries and latency-compensated local document updates\r\n * across all connected instances.\r\n *\r\n * If this fails, `enableMultiTabIndexedDbPersistence()` will reject the promise\r\n * it returns. Note that even after this failure, the {@link Firestore} instance will\r\n * remain usable, however offline persistence will be disabled.\r\n *\r\n * There are several reasons why this can fail, which can be identified by\r\n * the `code` on the error.\r\n *\r\n * * failed-precondition: The app is already open in another browser tab and\r\n * multi-tab is not enabled.\r\n * * unimplemented: The browser is incompatible with the offline\r\n * persistence implementation.\r\n *\r\n * @param firestore - The {@link Firestore} instance to enable persistence for.\r\n * @returns A `Promise` that represents successfully enabling persistent\r\n * storage.\r\n */\r\nfunction enableMultiTabIndexedDbPersistence(firestore) {\r\n firestore = cast(firestore, Firestore);\r\n verifyNotInitialized(firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n const settings = firestore._freezeSettings();\r\n const onlineComponentProvider = new OnlineComponentProvider();\r\n const offlineComponentProvider = new MultiTabOfflineComponentProvider(onlineComponentProvider, settings.cacheSizeBytes);\r\n return setPersistenceProviders(client, onlineComponentProvider, offlineComponentProvider);\r\n}\r\n/**\r\n * Registers both the `OfflineComponentProvider` and `OnlineComponentProvider`.\r\n * If the operation fails with a recoverable error (see\r\n * `canRecoverFromIndexedDbError()` below), the returned Promise is rejected\r\n * but the client remains usable.\r\n */\r\nfunction setPersistenceProviders(client, onlineComponentProvider, offlineComponentProvider) {\r\n const persistenceResult = new Deferred();\r\n return client.asyncQueue\r\n .enqueue(async () => {\r\n try {\r\n await setOfflineComponentProvider(client, offlineComponentProvider);\r\n await setOnlineComponentProvider(client, onlineComponentProvider);\r\n persistenceResult.resolve();\r\n }\r\n catch (e) {\r\n const error = e;\r\n if (!canFallbackFromIndexedDbError(error)) {\r\n throw error;\r\n }\r\n logWarn('Error enabling offline persistence. Falling back to ' +\r\n 'persistence disabled: ' +\r\n error);\r\n persistenceResult.reject(error);\r\n }\r\n })\r\n .then(() => persistenceResult.promise);\r\n}\r\n/**\r\n * Decides whether the provided error allows us to gracefully disable\r\n * persistence (as opposed to crashing the client).\r\n */\r\nfunction canFallbackFromIndexedDbError(error) {\r\n if (error.name === 'FirebaseError') {\r\n return (error.code === Code.FAILED_PRECONDITION ||\r\n error.code === Code.UNIMPLEMENTED);\r\n }\r\n else if (typeof DOMException !== 'undefined' &&\r\n error instanceof DOMException) {\r\n // There are a few known circumstances where we can open IndexedDb but\r\n // trying to read/write will fail (e.g. quota exceeded). For\r\n // well-understood cases, we attempt to detect these and then gracefully\r\n // fall back to memory persistence.\r\n // NOTE: Rather than continue to add to this list, we could decide to\r\n // always fall back, with the risk that we might accidentally hide errors\r\n // representing actual SDK bugs.\r\n return (\r\n // When the browser is out of quota we could get either quota exceeded\r\n // or an aborted error depending on whether the error happened during\r\n // schema migration.\r\n error.code === DOM_EXCEPTION_QUOTA_EXCEEDED ||\r\n error.code === DOM_EXCEPTION_ABORTED ||\r\n // Firefox Private Browsing mode disables IndexedDb and returns\r\n // INVALID_STATE for any usage.\r\n error.code === DOM_EXCEPTION_INVALID_STATE);\r\n }\r\n return true;\r\n}\r\n/**\r\n * Clears the persistent storage. This includes pending writes and cached\r\n * documents.\r\n *\r\n * Must be called while the {@link Firestore} instance is not started (after the app is\r\n * terminated or when the app is first initialized). On startup, this function\r\n * must be called before other functions (other than {@link\r\n * initializeFirestore} or {@link (getFirestore:1)})). If the {@link Firestore}\r\n * instance is still running, the promise will be rejected with the error code\r\n * of `failed-precondition`.\r\n *\r\n * Note: `clearIndexedDbPersistence()` is primarily intended to help write\r\n * reliable tests that use Cloud Firestore. It uses an efficient mechanism for\r\n * dropping existing data but does not attempt to securely overwrite or\r\n * otherwise make cached data unrecoverable. For applications that are sensitive\r\n * to the disclosure of cached data in between user sessions, we strongly\r\n * recommend not enabling persistence at all.\r\n *\r\n * @param firestore - The {@link Firestore} instance to clear persistence for.\r\n * @returns A `Promise` that is resolved when the persistent storage is\r\n * cleared. Otherwise, the promise is rejected with an error.\r\n */\r\nfunction clearIndexedDbPersistence(firestore) {\r\n if (firestore._initialized && !firestore._terminated) {\r\n throw new FirestoreError(Code.FAILED_PRECONDITION, 'Persistence can only be cleared before a Firestore instance is ' +\r\n 'initialized or after it is terminated.');\r\n }\r\n const deferred = new Deferred();\r\n firestore._queue.enqueueAndForgetEvenWhileRestricted(async () => {\r\n try {\r\n await indexedDbClearPersistence(indexedDbStoragePrefix(firestore._databaseId, firestore._persistenceKey));\r\n deferred.resolve();\r\n }\r\n catch (e) {\r\n deferred.reject(e);\r\n }\r\n });\r\n return deferred.promise;\r\n}\r\n/**\r\n * Waits until all currently pending writes for the active user have been\r\n * acknowledged by the backend.\r\n *\r\n * The returned promise resolves immediately if there are no outstanding writes.\r\n * Otherwise, the promise waits for all previously issued writes (including\r\n * those written in a previous app session), but it does not wait for writes\r\n * that were added after the function is called. If you want to wait for\r\n * additional writes, call `waitForPendingWrites()` again.\r\n *\r\n * Any outstanding `waitForPendingWrites()` promises are rejected during user\r\n * changes.\r\n *\r\n * @returns A `Promise` which resolves when all currently pending writes have been\r\n * acknowledged by the backend.\r\n */\r\nfunction waitForPendingWrites(firestore) {\r\n firestore = cast(firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n return firestoreClientWaitForPendingWrites(client);\r\n}\r\n/**\r\n * Re-enables use of the network for this {@link Firestore} instance after a prior\r\n * call to {@link disableNetwork}.\r\n *\r\n * @returns A `Promise` that is resolved once the network has been enabled.\r\n */\r\nfunction enableNetwork(firestore) {\r\n firestore = cast(firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n return firestoreClientEnableNetwork(client);\r\n}\r\n/**\r\n * Disables network usage for this instance. It can be re-enabled via {@link\r\n * enableNetwork}. While the network is disabled, any snapshot listeners,\r\n * `getDoc()` or `getDocs()` calls will return results from cache, and any write\r\n * operations will be queued until the network is restored.\r\n *\r\n * @returns A `Promise` that is resolved once the network has been disabled.\r\n */\r\nfunction disableNetwork(firestore) {\r\n firestore = cast(firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n return firestoreClientDisableNetwork(client);\r\n}\r\n/**\r\n * Terminates the provided {@link Firestore} instance.\r\n *\r\n * After calling `terminate()` only the `clearIndexedDbPersistence()` function\r\n * may be used. Any other function will throw a `FirestoreError`.\r\n *\r\n * To restart after termination, create a new instance of FirebaseFirestore with\r\n * {@link (getFirestore:1)}.\r\n *\r\n * Termination does not cancel any pending writes, and any promises that are\r\n * awaiting a response from the server will not be resolved. If you have\r\n * persistence enabled, the next time you start this instance, it will resume\r\n * sending these writes to the server.\r\n *\r\n * Note: Under normal circumstances, calling `terminate()` is not required. This\r\n * function is useful only when you want to force this instance to release all\r\n * of its resources or in combination with `clearIndexedDbPersistence()` to\r\n * ensure that all local state is destroyed between test runs.\r\n *\r\n * @returns A `Promise` that is resolved when the instance has been successfully\r\n * terminated.\r\n */\r\nfunction terminate(firestore) {\r\n _removeServiceInstance(firestore.app, 'firestore', firestore._databaseId.database);\r\n return firestore._delete();\r\n}\r\n/**\r\n * Loads a Firestore bundle into the local cache.\r\n *\r\n * @param firestore - The {@link Firestore} instance to load bundles for.\r\n * @param bundleData - An object representing the bundle to be loaded. Valid\r\n * objects are `ArrayBuffer`, `ReadableStream` or `string`.\r\n *\r\n * @returns A `LoadBundleTask` object, which notifies callers with progress\r\n * updates, and completion or error events. It can be used as a\r\n * `Promise`.\r\n */\r\nfunction loadBundle(firestore, bundleData) {\r\n firestore = cast(firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n const resultTask = new LoadBundleTask();\r\n firestoreClientLoadBundle(client, firestore._databaseId, bundleData, resultTask);\r\n return resultTask;\r\n}\r\n/**\r\n * Reads a Firestore {@link Query} from local cache, identified by the given\r\n * name.\r\n *\r\n * The named queries are packaged into bundles on the server side (along\r\n * with resulting documents), and loaded to local cache using `loadBundle`. Once\r\n * in local cache, use this method to extract a {@link Query} by name.\r\n *\r\n * @param firestore - The {@link Firestore} instance to read the query from.\r\n * @param name - The name of the query.\r\n * @returns A `Promise` that is resolved with the Query or `null`.\r\n */\r\nfunction namedQuery(firestore, name) {\r\n firestore = cast(firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n return firestoreClientGetNamedQuery(client, name).then(namedQuery => {\r\n if (!namedQuery) {\r\n return null;\r\n }\r\n return new Query(firestore, null, namedQuery.query);\r\n });\r\n}\r\nfunction verifyNotInitialized(firestore) {\r\n if (firestore._initialized || firestore._terminated) {\r\n throw new FirestoreError(Code.FAILED_PRECONDITION, 'Firestore has already been started and persistence can no longer be ' +\r\n 'enabled. You can only enable persistence before calling any other ' +\r\n 'methods on a Firestore object.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerFirestore(variant, useFetchStreams = true) {\r\n setSDKVersion(SDK_VERSION$1);\r\n _registerComponent(new Component('firestore', (container, { instanceIdentifier: databaseId, options: settings }) => {\r\n const app = container.getProvider('app').getImmediate();\r\n const firestoreInstance = new Firestore(new FirebaseAuthCredentialsProvider(container.getProvider('auth-internal')), new FirebaseAppCheckTokenProvider(container.getProvider('app-check-internal')), databaseIdFromApp(app, databaseId), app);\r\n settings = Object.assign({ useFetchStreams }, settings);\r\n firestoreInstance._setSettings(settings);\r\n return firestoreInstance;\r\n }, 'PUBLIC').setMultipleInstances(true));\r\n registerVersion(name, version$1, variant);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name, version$1, '__BUILD_TARGET__');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction isPartialObserver(obj) {\r\n return implementsAnyMethods(obj, ['next', 'error', 'complete']);\r\n}\r\n/**\r\n * Returns true if obj is an object and contains at least one of the specified\r\n * methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return false;\r\n }\r\n const object = obj;\r\n for (const method of methods) {\r\n if (method in object && typeof object[method] === 'function') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An immutable object representing an array of bytes.\r\n */\r\nclass Bytes {\r\n /** @hideconstructor */\r\n constructor(byteString) {\r\n this._byteString = byteString;\r\n }\r\n /**\r\n * Creates a new `Bytes` object from the given Base64 string, converting it to\r\n * bytes.\r\n *\r\n * @param base64 - The Base64 string used to create the `Bytes` object.\r\n */\r\n static fromBase64String(base64) {\r\n try {\r\n return new Bytes(ByteString.fromBase64String(base64));\r\n }\r\n catch (e) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Failed to construct data from Base64 string: ' + e);\r\n }\r\n }\r\n /**\r\n * Creates a new `Bytes` object from the given Uint8Array.\r\n *\r\n * @param array - The Uint8Array used to create the `Bytes` object.\r\n */\r\n static fromUint8Array(array) {\r\n return new Bytes(ByteString.fromUint8Array(array));\r\n }\r\n /**\r\n * Returns the underlying bytes as a Base64-encoded string.\r\n *\r\n * @returns The Base64-encoded string created from the `Bytes` object.\r\n */\r\n toBase64() {\r\n return this._byteString.toBase64();\r\n }\r\n /**\r\n * Returns the underlying bytes in a new `Uint8Array`.\r\n *\r\n * @returns The Uint8Array created from the `Bytes` object.\r\n */\r\n toUint8Array() {\r\n return this._byteString.toUint8Array();\r\n }\r\n /**\r\n * Returns a string representation of the `Bytes` object.\r\n *\r\n * @returns A string representation of the `Bytes` object.\r\n */\r\n toString() {\r\n return 'Bytes(base64: ' + this.toBase64() + ')';\r\n }\r\n /**\r\n * Returns true if this `Bytes` object is equal to the provided one.\r\n *\r\n * @param other - The `Bytes` object to compare against.\r\n * @returns true if this `Bytes` object is equal to the provided one.\r\n */\r\n isEqual(other) {\r\n return this._byteString.isEqual(other._byteString);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A `FieldPath` refers to a field in a document. The path may consist of a\r\n * single field name (referring to a top-level field in the document), or a\r\n * list of field names (referring to a nested field in the document).\r\n *\r\n * Create a `FieldPath` by providing field names. If more than one field\r\n * name is provided, the path will point to a nested field in a document.\r\n */\r\nclass FieldPath {\r\n /**\r\n * Creates a `FieldPath` from the provided field names. If more than one field\r\n * name is provided, the path will point to a nested field in a document.\r\n *\r\n * @param fieldNames - A list of field names.\r\n */\r\n constructor(...fieldNames) {\r\n for (let i = 0; i < fieldNames.length; ++i) {\r\n if (fieldNames[i].length === 0) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid field name at argument $(i + 1). ` +\r\n 'Field names must not be empty.');\r\n }\r\n }\r\n this._internalPath = new FieldPath$1(fieldNames);\r\n }\r\n /**\r\n * Returns true if this `FieldPath` is equal to the provided one.\r\n *\r\n * @param other - The `FieldPath` to compare against.\r\n * @returns true if this `FieldPath` is equal to the provided one.\r\n */\r\n isEqual(other) {\r\n return this._internalPath.isEqual(other._internalPath);\r\n }\r\n}\r\n/**\r\n * Returns a special sentinel `FieldPath` to refer to the ID of a document.\r\n * It can be used in queries to sort or filter by the document ID.\r\n */\r\nfunction documentId() {\r\n return new FieldPath(DOCUMENT_KEY_NAME);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Sentinel values that can be used when writing document fields with `set()`\r\n * or `update()`.\r\n */\r\nclass FieldValue {\r\n /**\r\n * @param _methodName - The public API endpoint that returns this class.\r\n * @hideconstructor\r\n */\r\n constructor(_methodName) {\r\n this._methodName = _methodName;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An immutable object representing a geographic location in Firestore. The\r\n * location is represented as latitude/longitude pair.\r\n *\r\n * Latitude values are in the range of [-90, 90].\r\n * Longitude values are in the range of [-180, 180].\r\n */\r\nclass GeoPoint {\r\n /**\r\n * Creates a new immutable `GeoPoint` object with the provided latitude and\r\n * longitude values.\r\n * @param latitude - The latitude as number between -90 and 90.\r\n * @param longitude - The longitude as number between -180 and 180.\r\n */\r\n constructor(latitude, longitude) {\r\n if (!isFinite(latitude) || latitude < -90 || latitude > 90) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Latitude must be a number between -90 and 90, but was: ' + latitude);\r\n }\r\n if (!isFinite(longitude) || longitude < -180 || longitude > 180) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Longitude must be a number between -180 and 180, but was: ' + longitude);\r\n }\r\n this._lat = latitude;\r\n this._long = longitude;\r\n }\r\n /**\r\n * The latitude of this `GeoPoint` instance.\r\n */\r\n get latitude() {\r\n return this._lat;\r\n }\r\n /**\r\n * The longitude of this `GeoPoint` instance.\r\n */\r\n get longitude() {\r\n return this._long;\r\n }\r\n /**\r\n * Returns true if this `GeoPoint` is equal to the provided one.\r\n *\r\n * @param other - The `GeoPoint` to compare against.\r\n * @returns true if this `GeoPoint` is equal to the provided one.\r\n */\r\n isEqual(other) {\r\n return this._lat === other._lat && this._long === other._long;\r\n }\r\n /** Returns a JSON-serializable representation of this GeoPoint. */\r\n toJSON() {\r\n return { latitude: this._lat, longitude: this._long };\r\n }\r\n /**\r\n * Actually private to JS consumers of our API, so this function is prefixed\r\n * with an underscore.\r\n */\r\n _compareTo(other) {\r\n return (primitiveComparator(this._lat, other._lat) ||\r\n primitiveComparator(this._long, other._long));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst RESERVED_FIELD_REGEX = /^__.*__$/;\r\n/** The result of parsing document data (e.g. for a setData call). */\r\nclass ParsedSetData {\r\n constructor(data, fieldMask, fieldTransforms) {\r\n this.data = data;\r\n this.fieldMask = fieldMask;\r\n this.fieldTransforms = fieldTransforms;\r\n }\r\n toMutation(key, precondition) {\r\n if (this.fieldMask !== null) {\r\n return new PatchMutation(key, this.data, this.fieldMask, precondition, this.fieldTransforms);\r\n }\r\n else {\r\n return new SetMutation(key, this.data, precondition, this.fieldTransforms);\r\n }\r\n }\r\n}\r\n/** The result of parsing \"update\" data (i.e. for an updateData call). */\r\nclass ParsedUpdateData {\r\n constructor(data, \r\n // The fieldMask does not include document transforms.\r\n fieldMask, fieldTransforms) {\r\n this.data = data;\r\n this.fieldMask = fieldMask;\r\n this.fieldTransforms = fieldTransforms;\r\n }\r\n toMutation(key, precondition) {\r\n return new PatchMutation(key, this.data, this.fieldMask, precondition, this.fieldTransforms);\r\n }\r\n}\r\nfunction isWrite(dataSource) {\r\n switch (dataSource) {\r\n case 0 /* UserDataSource.Set */: // fall through\r\n case 2 /* UserDataSource.MergeSet */: // fall through\r\n case 1 /* UserDataSource.Update */:\r\n return true;\r\n case 3 /* UserDataSource.Argument */:\r\n case 4 /* UserDataSource.ArrayArgument */:\r\n return false;\r\n default:\r\n throw fail();\r\n }\r\n}\r\n/** A \"context\" object passed around while parsing user data. */\r\nclass ParseContextImpl {\r\n /**\r\n * Initializes a ParseContext with the given source and path.\r\n *\r\n * @param settings - The settings for the parser.\r\n * @param databaseId - The database ID of the Firestore instance.\r\n * @param serializer - The serializer to use to generate the Value proto.\r\n * @param ignoreUndefinedProperties - Whether to ignore undefined properties\r\n * rather than throw.\r\n * @param fieldTransforms - A mutable list of field transforms encountered\r\n * while parsing the data.\r\n * @param fieldMask - A mutable list of field paths encountered while parsing\r\n * the data.\r\n *\r\n * TODO(b/34871131): We don't support array paths right now, so path can be\r\n * null to indicate the context represents any location within an array (in\r\n * which case certain features will not work and errors will be somewhat\r\n * compromised).\r\n */\r\n constructor(settings, databaseId, serializer, ignoreUndefinedProperties, fieldTransforms, fieldMask) {\r\n this.settings = settings;\r\n this.databaseId = databaseId;\r\n this.serializer = serializer;\r\n this.ignoreUndefinedProperties = ignoreUndefinedProperties;\r\n // Minor hack: If fieldTransforms is undefined, we assume this is an\r\n // external call and we need to validate the entire path.\r\n if (fieldTransforms === undefined) {\r\n this.validatePath();\r\n }\r\n this.fieldTransforms = fieldTransforms || [];\r\n this.fieldMask = fieldMask || [];\r\n }\r\n get path() {\r\n return this.settings.path;\r\n }\r\n get dataSource() {\r\n return this.settings.dataSource;\r\n }\r\n /** Returns a new context with the specified settings overwritten. */\r\n contextWith(configuration) {\r\n return new ParseContextImpl(Object.assign(Object.assign({}, this.settings), configuration), this.databaseId, this.serializer, this.ignoreUndefinedProperties, this.fieldTransforms, this.fieldMask);\r\n }\r\n childContextForField(field) {\r\n var _a;\r\n const childPath = (_a = this.path) === null || _a === void 0 ? void 0 : _a.child(field);\r\n const context = this.contextWith({ path: childPath, arrayElement: false });\r\n context.validatePathSegment(field);\r\n return context;\r\n }\r\n childContextForFieldPath(field) {\r\n var _a;\r\n const childPath = (_a = this.path) === null || _a === void 0 ? void 0 : _a.child(field);\r\n const context = this.contextWith({ path: childPath, arrayElement: false });\r\n context.validatePath();\r\n return context;\r\n }\r\n childContextForArray(index) {\r\n // TODO(b/34871131): We don't support array paths right now; so make path\r\n // undefined.\r\n return this.contextWith({ path: undefined, arrayElement: true });\r\n }\r\n createError(reason) {\r\n return createError(reason, this.settings.methodName, this.settings.hasConverter || false, this.path, this.settings.targetDoc);\r\n }\r\n /** Returns 'true' if 'fieldPath' was traversed when creating this context. */\r\n contains(fieldPath) {\r\n return (this.fieldMask.find(field => fieldPath.isPrefixOf(field)) !== undefined ||\r\n this.fieldTransforms.find(transform => fieldPath.isPrefixOf(transform.field)) !== undefined);\r\n }\r\n validatePath() {\r\n // TODO(b/34871131): Remove null check once we have proper paths for fields\r\n // within arrays.\r\n if (!this.path) {\r\n return;\r\n }\r\n for (let i = 0; i < this.path.length; i++) {\r\n this.validatePathSegment(this.path.get(i));\r\n }\r\n }\r\n validatePathSegment(segment) {\r\n if (segment.length === 0) {\r\n throw this.createError('Document fields must not be empty');\r\n }\r\n if (isWrite(this.dataSource) && RESERVED_FIELD_REGEX.test(segment)) {\r\n throw this.createError('Document fields cannot begin and end with \"__\"');\r\n }\r\n }\r\n}\r\n/**\r\n * Helper for parsing raw user input (provided via the API) into internal model\r\n * classes.\r\n */\r\nclass UserDataReader {\r\n constructor(databaseId, ignoreUndefinedProperties, serializer) {\r\n this.databaseId = databaseId;\r\n this.ignoreUndefinedProperties = ignoreUndefinedProperties;\r\n this.serializer = serializer || newSerializer(databaseId);\r\n }\r\n /** Creates a new top-level parse context. */\r\n createContext(dataSource, methodName, targetDoc, hasConverter = false) {\r\n return new ParseContextImpl({\r\n dataSource,\r\n methodName,\r\n targetDoc,\r\n path: FieldPath$1.emptyPath(),\r\n arrayElement: false,\r\n hasConverter\r\n }, this.databaseId, this.serializer, this.ignoreUndefinedProperties);\r\n }\r\n}\r\nfunction newUserDataReader(firestore) {\r\n const settings = firestore._freezeSettings();\r\n const serializer = newSerializer(firestore._databaseId);\r\n return new UserDataReader(firestore._databaseId, !!settings.ignoreUndefinedProperties, serializer);\r\n}\r\n/** Parse document data from a set() call. */\r\nfunction parseSetData(userDataReader, methodName, targetDoc, input, hasConverter, options = {}) {\r\n const context = userDataReader.createContext(options.merge || options.mergeFields\r\n ? 2 /* UserDataSource.MergeSet */\r\n : 0 /* UserDataSource.Set */, methodName, targetDoc, hasConverter);\r\n validatePlainObject('Data must be an object, but it was:', context, input);\r\n const updateData = parseObject(input, context);\r\n let fieldMask;\r\n let fieldTransforms;\r\n if (options.merge) {\r\n fieldMask = new FieldMask(context.fieldMask);\r\n fieldTransforms = context.fieldTransforms;\r\n }\r\n else if (options.mergeFields) {\r\n const validatedFieldPaths = [];\r\n for (const stringOrFieldPath of options.mergeFields) {\r\n const fieldPath = fieldPathFromArgument$1(methodName, stringOrFieldPath, targetDoc);\r\n if (!context.contains(fieldPath)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Field '${fieldPath}' is specified in your field mask but missing from your input data.`);\r\n }\r\n if (!fieldMaskContains(validatedFieldPaths, fieldPath)) {\r\n validatedFieldPaths.push(fieldPath);\r\n }\r\n }\r\n fieldMask = new FieldMask(validatedFieldPaths);\r\n fieldTransforms = context.fieldTransforms.filter(transform => fieldMask.covers(transform.field));\r\n }\r\n else {\r\n fieldMask = null;\r\n fieldTransforms = context.fieldTransforms;\r\n }\r\n return new ParsedSetData(new ObjectValue(updateData), fieldMask, fieldTransforms);\r\n}\r\nclass DeleteFieldValueImpl extends FieldValue {\r\n _toFieldTransform(context) {\r\n if (context.dataSource === 2 /* UserDataSource.MergeSet */) {\r\n // No transform to add for a delete, but we need to add it to our\r\n // fieldMask so it gets deleted.\r\n context.fieldMask.push(context.path);\r\n }\r\n else if (context.dataSource === 1 /* UserDataSource.Update */) {\r\n throw context.createError(`${this._methodName}() can only appear at the top level ` +\r\n 'of your update data');\r\n }\r\n else {\r\n // We shouldn't encounter delete sentinels for queries or non-merge set() calls.\r\n throw context.createError(`${this._methodName}() cannot be used with set() unless you pass ` +\r\n '{merge:true}');\r\n }\r\n return null;\r\n }\r\n isEqual(other) {\r\n return other instanceof DeleteFieldValueImpl;\r\n }\r\n}\r\n/**\r\n * Creates a child context for parsing SerializableFieldValues.\r\n *\r\n * This is different than calling `ParseContext.contextWith` because it keeps\r\n * the fieldTransforms and fieldMask separate.\r\n *\r\n * The created context has its `dataSource` set to `UserDataSource.Argument`.\r\n * Although these values are used with writes, any elements in these FieldValues\r\n * are not considered writes since they cannot contain any FieldValue sentinels,\r\n * etc.\r\n *\r\n * @param fieldValue - The sentinel FieldValue for which to create a child\r\n * context.\r\n * @param context - The parent context.\r\n * @param arrayElement - Whether or not the FieldValue has an array.\r\n */\r\nfunction createSentinelChildContext(fieldValue, context, arrayElement) {\r\n return new ParseContextImpl({\r\n dataSource: 3 /* UserDataSource.Argument */,\r\n targetDoc: context.settings.targetDoc,\r\n methodName: fieldValue._methodName,\r\n arrayElement\r\n }, context.databaseId, context.serializer, context.ignoreUndefinedProperties);\r\n}\r\nclass ServerTimestampFieldValueImpl extends FieldValue {\r\n _toFieldTransform(context) {\r\n return new FieldTransform(context.path, new ServerTimestampTransform());\r\n }\r\n isEqual(other) {\r\n return other instanceof ServerTimestampFieldValueImpl;\r\n }\r\n}\r\nclass ArrayUnionFieldValueImpl extends FieldValue {\r\n constructor(methodName, _elements) {\r\n super(methodName);\r\n this._elements = _elements;\r\n }\r\n _toFieldTransform(context) {\r\n const parseContext = createSentinelChildContext(this, context, \r\n /*array=*/ true);\r\n const parsedElements = this._elements.map(element => parseData(element, parseContext));\r\n const arrayUnion = new ArrayUnionTransformOperation(parsedElements);\r\n return new FieldTransform(context.path, arrayUnion);\r\n }\r\n isEqual(other) {\r\n // TODO(mrschmidt): Implement isEquals\r\n return this === other;\r\n }\r\n}\r\nclass ArrayRemoveFieldValueImpl extends FieldValue {\r\n constructor(methodName, _elements) {\r\n super(methodName);\r\n this._elements = _elements;\r\n }\r\n _toFieldTransform(context) {\r\n const parseContext = createSentinelChildContext(this, context, \r\n /*array=*/ true);\r\n const parsedElements = this._elements.map(element => parseData(element, parseContext));\r\n const arrayUnion = new ArrayRemoveTransformOperation(parsedElements);\r\n return new FieldTransform(context.path, arrayUnion);\r\n }\r\n isEqual(other) {\r\n // TODO(mrschmidt): Implement isEquals\r\n return this === other;\r\n }\r\n}\r\nclass NumericIncrementFieldValueImpl extends FieldValue {\r\n constructor(methodName, _operand) {\r\n super(methodName);\r\n this._operand = _operand;\r\n }\r\n _toFieldTransform(context) {\r\n const numericIncrement = new NumericIncrementTransformOperation(context.serializer, toNumber(context.serializer, this._operand));\r\n return new FieldTransform(context.path, numericIncrement);\r\n }\r\n isEqual(other) {\r\n // TODO(mrschmidt): Implement isEquals\r\n return this === other;\r\n }\r\n}\r\n/** Parse update data from an update() call. */\r\nfunction parseUpdateData(userDataReader, methodName, targetDoc, input) {\r\n const context = userDataReader.createContext(1 /* UserDataSource.Update */, methodName, targetDoc);\r\n validatePlainObject('Data must be an object, but it was:', context, input);\r\n const fieldMaskPaths = [];\r\n const updateData = ObjectValue.empty();\r\n forEach(input, (key, value) => {\r\n const path = fieldPathFromDotSeparatedString(methodName, key, targetDoc);\r\n // For Compat types, we have to \"extract\" the underlying types before\r\n // performing validation.\r\n value = getModularInstance(value);\r\n const childContext = context.childContextForFieldPath(path);\r\n if (value instanceof DeleteFieldValueImpl) {\r\n // Add it to the field mask, but don't add anything to updateData.\r\n fieldMaskPaths.push(path);\r\n }\r\n else {\r\n const parsedValue = parseData(value, childContext);\r\n if (parsedValue != null) {\r\n fieldMaskPaths.push(path);\r\n updateData.set(path, parsedValue);\r\n }\r\n }\r\n });\r\n const mask = new FieldMask(fieldMaskPaths);\r\n return new ParsedUpdateData(updateData, mask, context.fieldTransforms);\r\n}\r\n/** Parse update data from a list of field/value arguments. */\r\nfunction parseUpdateVarargs(userDataReader, methodName, targetDoc, field, value, moreFieldsAndValues) {\r\n const context = userDataReader.createContext(1 /* UserDataSource.Update */, methodName, targetDoc);\r\n const keys = [fieldPathFromArgument$1(methodName, field, targetDoc)];\r\n const values = [value];\r\n if (moreFieldsAndValues.length % 2 !== 0) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Function ${methodName}() needs to be called with an even number ` +\r\n 'of arguments that alternate between field names and values.');\r\n }\r\n for (let i = 0; i < moreFieldsAndValues.length; i += 2) {\r\n keys.push(fieldPathFromArgument$1(methodName, moreFieldsAndValues[i]));\r\n values.push(moreFieldsAndValues[i + 1]);\r\n }\r\n const fieldMaskPaths = [];\r\n const updateData = ObjectValue.empty();\r\n // We iterate in reverse order to pick the last value for a field if the\r\n // user specified the field multiple times.\r\n for (let i = keys.length - 1; i >= 0; --i) {\r\n if (!fieldMaskContains(fieldMaskPaths, keys[i])) {\r\n const path = keys[i];\r\n let value = values[i];\r\n // For Compat types, we have to \"extract\" the underlying types before\r\n // performing validation.\r\n value = getModularInstance(value);\r\n const childContext = context.childContextForFieldPath(path);\r\n if (value instanceof DeleteFieldValueImpl) {\r\n // Add it to the field mask, but don't add anything to updateData.\r\n fieldMaskPaths.push(path);\r\n }\r\n else {\r\n const parsedValue = parseData(value, childContext);\r\n if (parsedValue != null) {\r\n fieldMaskPaths.push(path);\r\n updateData.set(path, parsedValue);\r\n }\r\n }\r\n }\r\n }\r\n const mask = new FieldMask(fieldMaskPaths);\r\n return new ParsedUpdateData(updateData, mask, context.fieldTransforms);\r\n}\r\n/**\r\n * Parse a \"query value\" (e.g. value in a where filter or a value in a cursor\r\n * bound).\r\n *\r\n * @param allowArrays - Whether the query value is an array that may directly\r\n * contain additional arrays (e.g. the operand of an `in` query).\r\n */\r\nfunction parseQueryValue(userDataReader, methodName, input, allowArrays = false) {\r\n const context = userDataReader.createContext(allowArrays ? 4 /* UserDataSource.ArrayArgument */ : 3 /* UserDataSource.Argument */, methodName);\r\n const parsed = parseData(input, context);\r\n return parsed;\r\n}\r\n/**\r\n * Parses user data to Protobuf Values.\r\n *\r\n * @param input - Data to be parsed.\r\n * @param context - A context object representing the current path being parsed,\r\n * the source of the data being parsed, etc.\r\n * @returns The parsed value, or null if the value was a FieldValue sentinel\r\n * that should not be included in the resulting parsed data.\r\n */\r\nfunction parseData(input, context) {\r\n // Unwrap the API type from the Compat SDK. This will return the API type\r\n // from firestore-exp.\r\n input = getModularInstance(input);\r\n if (looksLikeJsonObject(input)) {\r\n validatePlainObject('Unsupported field value:', context, input);\r\n return parseObject(input, context);\r\n }\r\n else if (input instanceof FieldValue) {\r\n // FieldValues usually parse into transforms (except deleteField())\r\n // in which case we do not want to include this field in our parsed data\r\n // (as doing so will overwrite the field directly prior to the transform\r\n // trying to transform it). So we don't add this location to\r\n // context.fieldMask and we return null as our parsing result.\r\n parseSentinelFieldValue(input, context);\r\n return null;\r\n }\r\n else if (input === undefined && context.ignoreUndefinedProperties) {\r\n // If the input is undefined it can never participate in the fieldMask, so\r\n // don't handle this below. If `ignoreUndefinedProperties` is false,\r\n // `parseScalarValue` will reject an undefined value.\r\n return null;\r\n }\r\n else {\r\n // If context.path is null we are inside an array and we don't support\r\n // field mask paths more granular than the top-level array.\r\n if (context.path) {\r\n context.fieldMask.push(context.path);\r\n }\r\n if (input instanceof Array) {\r\n // TODO(b/34871131): Include the path containing the array in the error\r\n // message.\r\n // In the case of IN queries, the parsed data is an array (representing\r\n // the set of values to be included for the IN query) that may directly\r\n // contain additional arrays (each representing an individual field\r\n // value), so we disable this validation.\r\n if (context.settings.arrayElement &&\r\n context.dataSource !== 4 /* UserDataSource.ArrayArgument */) {\r\n throw context.createError('Nested arrays are not supported');\r\n }\r\n return parseArray(input, context);\r\n }\r\n else {\r\n return parseScalarValue(input, context);\r\n }\r\n }\r\n}\r\nfunction parseObject(obj, context) {\r\n const fields = {};\r\n if (isEmpty(obj)) {\r\n // If we encounter an empty object, we explicitly add it to the update\r\n // mask to ensure that the server creates a map entry.\r\n if (context.path && context.path.length > 0) {\r\n context.fieldMask.push(context.path);\r\n }\r\n }\r\n else {\r\n forEach(obj, (key, val) => {\r\n const parsedValue = parseData(val, context.childContextForField(key));\r\n if (parsedValue != null) {\r\n fields[key] = parsedValue;\r\n }\r\n });\r\n }\r\n return { mapValue: { fields } };\r\n}\r\nfunction parseArray(array, context) {\r\n const values = [];\r\n let entryIndex = 0;\r\n for (const entry of array) {\r\n let parsedEntry = parseData(entry, context.childContextForArray(entryIndex));\r\n if (parsedEntry == null) {\r\n // Just include nulls in the array for fields being replaced with a\r\n // sentinel.\r\n parsedEntry = { nullValue: 'NULL_VALUE' };\r\n }\r\n values.push(parsedEntry);\r\n entryIndex++;\r\n }\r\n return { arrayValue: { values } };\r\n}\r\n/**\r\n * \"Parses\" the provided FieldValueImpl, adding any necessary transforms to\r\n * context.fieldTransforms.\r\n */\r\nfunction parseSentinelFieldValue(value, context) {\r\n // Sentinels are only supported with writes, and not within arrays.\r\n if (!isWrite(context.dataSource)) {\r\n throw context.createError(`${value._methodName}() can only be used with update() and set()`);\r\n }\r\n if (!context.path) {\r\n throw context.createError(`${value._methodName}() is not currently supported inside arrays`);\r\n }\r\n const fieldTransform = value._toFieldTransform(context);\r\n if (fieldTransform) {\r\n context.fieldTransforms.push(fieldTransform);\r\n }\r\n}\r\n/**\r\n * Helper to parse a scalar value (i.e. not an Object, Array, or FieldValue)\r\n *\r\n * @returns The parsed value\r\n */\r\nfunction parseScalarValue(value, context) {\r\n value = getModularInstance(value);\r\n if (value === null) {\r\n return { nullValue: 'NULL_VALUE' };\r\n }\r\n else if (typeof value === 'number') {\r\n return toNumber(context.serializer, value);\r\n }\r\n else if (typeof value === 'boolean') {\r\n return { booleanValue: value };\r\n }\r\n else if (typeof value === 'string') {\r\n return { stringValue: value };\r\n }\r\n else if (value instanceof Date) {\r\n const timestamp = Timestamp.fromDate(value);\r\n return {\r\n timestampValue: toTimestamp(context.serializer, timestamp)\r\n };\r\n }\r\n else if (value instanceof Timestamp) {\r\n // Firestore backend truncates precision down to microseconds. To ensure\r\n // offline mode works the same with regards to truncation, perform the\r\n // truncation immediately without waiting for the backend to do that.\r\n const timestamp = new Timestamp(value.seconds, Math.floor(value.nanoseconds / 1000) * 1000);\r\n return {\r\n timestampValue: toTimestamp(context.serializer, timestamp)\r\n };\r\n }\r\n else if (value instanceof GeoPoint) {\r\n return {\r\n geoPointValue: {\r\n latitude: value.latitude,\r\n longitude: value.longitude\r\n }\r\n };\r\n }\r\n else if (value instanceof Bytes) {\r\n return { bytesValue: toBytes(context.serializer, value._byteString) };\r\n }\r\n else if (value instanceof DocumentReference) {\r\n const thisDb = context.databaseId;\r\n const otherDb = value.firestore._databaseId;\r\n if (!otherDb.isEqual(thisDb)) {\r\n throw context.createError('Document reference is for database ' +\r\n `${otherDb.projectId}/${otherDb.database} but should be ` +\r\n `for database ${thisDb.projectId}/${thisDb.database}`);\r\n }\r\n return {\r\n referenceValue: toResourceName(value.firestore._databaseId || context.databaseId, value._key.path)\r\n };\r\n }\r\n else {\r\n throw context.createError(`Unsupported field value: ${valueDescription(value)}`);\r\n }\r\n}\r\n/**\r\n * Checks whether an object looks like a JSON object that should be converted\r\n * into a struct. Normal class/prototype instances are considered to look like\r\n * JSON objects since they should be converted to a struct value. Arrays, Dates,\r\n * GeoPoints, etc. are not considered to look like JSON objects since they map\r\n * to specific FieldValue types other than ObjectValue.\r\n */\r\nfunction looksLikeJsonObject(input) {\r\n return (typeof input === 'object' &&\r\n input !== null &&\r\n !(input instanceof Array) &&\r\n !(input instanceof Date) &&\r\n !(input instanceof Timestamp) &&\r\n !(input instanceof GeoPoint) &&\r\n !(input instanceof Bytes) &&\r\n !(input instanceof DocumentReference) &&\r\n !(input instanceof FieldValue));\r\n}\r\nfunction validatePlainObject(message, context, input) {\r\n if (!looksLikeJsonObject(input) || !isPlainObject(input)) {\r\n const description = valueDescription(input);\r\n if (description === 'an object') {\r\n // Massage the error if it was an object.\r\n throw context.createError(message + ' a custom object');\r\n }\r\n else {\r\n throw context.createError(message + ' ' + description);\r\n }\r\n }\r\n}\r\n/**\r\n * Helper that calls fromDotSeparatedString() but wraps any error thrown.\r\n */\r\nfunction fieldPathFromArgument$1(methodName, path, targetDoc) {\r\n // If required, replace the FieldPath Compat class with with the firestore-exp\r\n // FieldPath.\r\n path = getModularInstance(path);\r\n if (path instanceof FieldPath) {\r\n return path._internalPath;\r\n }\r\n else if (typeof path === 'string') {\r\n return fieldPathFromDotSeparatedString(methodName, path);\r\n }\r\n else {\r\n const message = 'Field path arguments must be of type string or ';\r\n throw createError(message, methodName, \r\n /* hasConverter= */ false, \r\n /* path= */ undefined, targetDoc);\r\n }\r\n}\r\n/**\r\n * Matches any characters in a field path string that are reserved.\r\n */\r\nconst FIELD_PATH_RESERVED = new RegExp('[~\\\\*/\\\\[\\\\]]');\r\n/**\r\n * Wraps fromDotSeparatedString with an error message about the method that\r\n * was thrown.\r\n * @param methodName - The publicly visible method name\r\n * @param path - The dot-separated string form of a field path which will be\r\n * split on dots.\r\n * @param targetDoc - The document against which the field path will be\r\n * evaluated.\r\n */\r\nfunction fieldPathFromDotSeparatedString(methodName, path, targetDoc) {\r\n const found = path.search(FIELD_PATH_RESERVED);\r\n if (found >= 0) {\r\n throw createError(`Invalid field path (${path}). Paths must not contain ` +\r\n `'~', '*', '/', '[', or ']'`, methodName, \r\n /* hasConverter= */ false, \r\n /* path= */ undefined, targetDoc);\r\n }\r\n try {\r\n return new FieldPath(...path.split('.'))._internalPath;\r\n }\r\n catch (e) {\r\n throw createError(`Invalid field path (${path}). Paths must not be empty, ` +\r\n `begin with '.', end with '.', or contain '..'`, methodName, \r\n /* hasConverter= */ false, \r\n /* path= */ undefined, targetDoc);\r\n }\r\n}\r\nfunction createError(reason, methodName, hasConverter, path, targetDoc) {\r\n const hasPath = path && !path.isEmpty();\r\n const hasDocument = targetDoc !== undefined;\r\n let message = `Function ${methodName}() called with invalid data`;\r\n if (hasConverter) {\r\n message += ' (via `toFirestore()`)';\r\n }\r\n message += '. ';\r\n let description = '';\r\n if (hasPath || hasDocument) {\r\n description += ' (found';\r\n if (hasPath) {\r\n description += ` in field ${path}`;\r\n }\r\n if (hasDocument) {\r\n description += ` in document ${targetDoc}`;\r\n }\r\n description += ')';\r\n }\r\n return new FirestoreError(Code.INVALID_ARGUMENT, message + reason + description);\r\n}\r\n/** Checks `haystack` if FieldPath `needle` is present. Runs in O(n). */\r\nfunction fieldMaskContains(haystack, needle) {\r\n return haystack.some(v => v.isEqual(needle));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A `DocumentSnapshot` contains data read from a document in your Firestore\r\n * database. The data can be extracted with `.data()` or `.get()` to\r\n * get a specific field.\r\n *\r\n * For a `DocumentSnapshot` that points to a non-existing document, any data\r\n * access will return 'undefined'. You can use the `exists()` method to\r\n * explicitly verify a document's existence.\r\n */\r\nclass DocumentSnapshot$1 {\r\n // Note: This class is stripped down version of the DocumentSnapshot in\r\n // the legacy SDK. The changes are:\r\n // - No support for SnapshotMetadata.\r\n // - No support for SnapshotOptions.\r\n /** @hideconstructor protected */\r\n constructor(_firestore, _userDataWriter, _key, _document, _converter) {\r\n this._firestore = _firestore;\r\n this._userDataWriter = _userDataWriter;\r\n this._key = _key;\r\n this._document = _document;\r\n this._converter = _converter;\r\n }\r\n /** Property of the `DocumentSnapshot` that provides the document's ID. */\r\n get id() {\r\n return this._key.path.lastSegment();\r\n }\r\n /**\r\n * The `DocumentReference` for the document included in the `DocumentSnapshot`.\r\n */\r\n get ref() {\r\n return new DocumentReference(this._firestore, this._converter, this._key);\r\n }\r\n /**\r\n * Signals whether or not the document at the snapshot's location exists.\r\n *\r\n * @returns true if the document exists.\r\n */\r\n exists() {\r\n return this._document !== null;\r\n }\r\n /**\r\n * Retrieves all fields in the document as an `Object`. Returns `undefined` if\r\n * the document doesn't exist.\r\n *\r\n * @returns An `Object` containing all fields in the document or `undefined`\r\n * if the document doesn't exist.\r\n */\r\n data() {\r\n if (!this._document) {\r\n return undefined;\r\n }\r\n else if (this._converter) {\r\n // We only want to use the converter and create a new DocumentSnapshot\r\n // if a converter has been provided.\r\n const snapshot = new QueryDocumentSnapshot$1(this._firestore, this._userDataWriter, this._key, this._document, \r\n /* converter= */ null);\r\n return this._converter.fromFirestore(snapshot);\r\n }\r\n else {\r\n return this._userDataWriter.convertValue(this._document.data.value);\r\n }\r\n }\r\n /**\r\n * Retrieves the field specified by `fieldPath`. Returns `undefined` if the\r\n * document or field doesn't exist.\r\n *\r\n * @param fieldPath - The path (for example 'foo' or 'foo.bar') to a specific\r\n * field.\r\n * @returns The data at the specified field location or undefined if no such\r\n * field exists in the document.\r\n */\r\n // We are using `any` here to avoid an explicit cast by our users.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get(fieldPath) {\r\n if (this._document) {\r\n const value = this._document.data.field(fieldPathFromArgument('DocumentSnapshot.get', fieldPath));\r\n if (value !== null) {\r\n return this._userDataWriter.convertValue(value);\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n/**\r\n * A `QueryDocumentSnapshot` contains data read from a document in your\r\n * Firestore database as part of a query. The document is guaranteed to exist\r\n * and its data can be extracted with `.data()` or `.get()` to get a\r\n * specific field.\r\n *\r\n * A `QueryDocumentSnapshot` offers the same API surface as a\r\n * `DocumentSnapshot`. Since query results contain only existing documents, the\r\n * `exists` property will always be true and `data()` will never return\r\n * 'undefined'.\r\n */\r\nclass QueryDocumentSnapshot$1 extends DocumentSnapshot$1 {\r\n /**\r\n * Retrieves all fields in the document as an `Object`.\r\n *\r\n * @override\r\n * @returns An `Object` containing all fields in the document.\r\n */\r\n data() {\r\n return super.data();\r\n }\r\n}\r\n/**\r\n * Helper that calls `fromDotSeparatedString()` but wraps any error thrown.\r\n */\r\nfunction fieldPathFromArgument(methodName, arg) {\r\n if (typeof arg === 'string') {\r\n return fieldPathFromDotSeparatedString(methodName, arg);\r\n }\r\n else if (arg instanceof FieldPath) {\r\n return arg._internalPath;\r\n }\r\n else {\r\n return arg._delegate._internalPath;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction validateHasExplicitOrderByForLimitToLast(query) {\r\n if (query.limitType === \"L\" /* LimitType.Last */ &&\r\n query.explicitOrderBy.length === 0) {\r\n throw new FirestoreError(Code.UNIMPLEMENTED, 'limitToLast() queries require specifying at least one orderBy() clause');\r\n }\r\n}\r\n/**\r\n * An `AppliableConstraint` is an abstraction of a constraint that can be applied\r\n * to a Firestore query.\r\n */\r\nclass AppliableConstraint {\r\n}\r\n/**\r\n * A `QueryConstraint` is used to narrow the set of documents returned by a\r\n * Firestore query. `QueryConstraint`s are created by invoking {@link where},\r\n * {@link orderBy}, {@link startAt}, {@link startAfter}, {@link\r\n * endBefore}, {@link endAt}, {@link limit}, {@link limitToLast} and\r\n * can then be passed to {@link query} to create a new query instance that\r\n * also contains this `QueryConstraint`.\r\n */\r\nclass QueryConstraint extends AppliableConstraint {\r\n}\r\nfunction query(query, queryConstraint, ...additionalQueryConstraints) {\r\n let queryConstraints = [];\r\n if (queryConstraint instanceof AppliableConstraint) {\r\n queryConstraints.push(queryConstraint);\r\n }\r\n queryConstraints = queryConstraints.concat(additionalQueryConstraints);\r\n validateQueryConstraintArray(queryConstraints);\r\n for (const constraint of queryConstraints) {\r\n query = constraint._apply(query);\r\n }\r\n return query;\r\n}\r\n/**\r\n * A `QueryFieldFilterConstraint` is used to narrow the set of documents returned by\r\n * a Firestore query by filtering on one or more document fields.\r\n * `QueryFieldFilterConstraint`s are created by invoking {@link where} and can then\r\n * be passed to {@link query} to create a new query instance that also contains\r\n * this `QueryFieldFilterConstraint`.\r\n */\r\nclass QueryFieldFilterConstraint extends QueryConstraint {\r\n /**\r\n * @internal\r\n */\r\n constructor(_field, _op, _value) {\r\n super();\r\n this._field = _field;\r\n this._op = _op;\r\n this._value = _value;\r\n /** The type of this query constraint */\r\n this.type = 'where';\r\n }\r\n static _create(_field, _op, _value) {\r\n return new QueryFieldFilterConstraint(_field, _op, _value);\r\n }\r\n _apply(query) {\r\n const filter = this._parse(query);\r\n validateNewFieldFilter(query._query, filter);\r\n return new Query(query.firestore, query.converter, queryWithAddedFilter(query._query, filter));\r\n }\r\n _parse(query) {\r\n const reader = newUserDataReader(query.firestore);\r\n const filter = newQueryFilter(query._query, 'where', reader, query.firestore._databaseId, this._field, this._op, this._value);\r\n return filter;\r\n }\r\n}\r\n/**\r\n * Creates a {@link QueryFieldFilterConstraint} that enforces that documents\r\n * must contain the specified field and that the value should satisfy the\r\n * relation constraint provided.\r\n *\r\n * @param fieldPath - The path to compare\r\n * @param opStr - The operation string (e.g \"<\", \"<=\", \"==\", \"<\",\r\n * \"<=\", \"!=\").\r\n * @param value - The value for comparison\r\n * @returns The created {@link QueryFieldFilterConstraint}.\r\n */\r\nfunction where(fieldPath, opStr, value) {\r\n const op = opStr;\r\n const field = fieldPathFromArgument('where', fieldPath);\r\n return QueryFieldFilterConstraint._create(field, op, value);\r\n}\r\n/**\r\n * A `QueryCompositeFilterConstraint` is used to narrow the set of documents\r\n * returned by a Firestore query by performing the logical OR or AND of multiple\r\n * {@link QueryFieldFilterConstraint}s or {@link QueryCompositeFilterConstraint}s.\r\n * `QueryCompositeFilterConstraint`s are created by invoking {@link or} or\r\n * {@link and} and can then be passed to {@link query} to create a new query\r\n * instance that also contains the `QueryCompositeFilterConstraint`.\r\n * @internal TODO remove this internal tag with OR Query support in the server\r\n */\r\nclass QueryCompositeFilterConstraint extends AppliableConstraint {\r\n /**\r\n * @internal\r\n */\r\n constructor(\r\n /** The type of this query constraint */\r\n type, _queryConstraints) {\r\n super();\r\n this.type = type;\r\n this._queryConstraints = _queryConstraints;\r\n }\r\n static _create(type, _queryConstraints) {\r\n return new QueryCompositeFilterConstraint(type, _queryConstraints);\r\n }\r\n _parse(query) {\r\n const parsedFilters = this._queryConstraints\r\n .map(queryConstraint => {\r\n return queryConstraint._parse(query);\r\n })\r\n .filter(parsedFilter => parsedFilter.getFilters().length > 0);\r\n if (parsedFilters.length === 1) {\r\n return parsedFilters[0];\r\n }\r\n return CompositeFilter.create(parsedFilters, this._getOperator());\r\n }\r\n _apply(query) {\r\n const parsedFilter = this._parse(query);\r\n if (parsedFilter.getFilters().length === 0) {\r\n // Return the existing query if not adding any more filters (e.g. an empty\r\n // composite filter).\r\n return query;\r\n }\r\n validateNewFilter(query._query, parsedFilter);\r\n return new Query(query.firestore, query.converter, queryWithAddedFilter(query._query, parsedFilter));\r\n }\r\n _getQueryConstraints() {\r\n return this._queryConstraints;\r\n }\r\n _getOperator() {\r\n return this.type === 'and' ? \"and\" /* CompositeOperator.AND */ : \"or\" /* CompositeOperator.OR */;\r\n }\r\n}\r\n/**\r\n * Creates a new {@link QueryCompositeFilterConstraint} that is a disjunction of\r\n * the given filter constraints. A disjunction filter includes a document if it\r\n * satisfies any of the given filters.\r\n *\r\n * @param queryConstraints - Optional. The list of\r\n * {@link QueryFilterConstraint}s to perform a disjunction for. These must be\r\n * created with calls to {@link where}, {@link or}, or {@link and}.\r\n * @returns The newly created {@link QueryCompositeFilterConstraint}.\r\n * @internal TODO remove this internal tag with OR Query support in the server\r\n */\r\nfunction or(...queryConstraints) {\r\n // Only support QueryFilterConstraints\r\n queryConstraints.forEach(queryConstraint => validateQueryFilterConstraint('or', queryConstraint));\r\n return QueryCompositeFilterConstraint._create(\"or\" /* CompositeOperator.OR */, queryConstraints);\r\n}\r\n/**\r\n * Creates a new {@link QueryCompositeFilterConstraint} that is a conjunction of\r\n * the given filter constraints. A conjunction filter includes a document if it\r\n * satisfies all of the given filters.\r\n *\r\n * @param queryConstraints - Optional. The list of\r\n * {@link QueryFilterConstraint}s to perform a conjunction for. These must be\r\n * created with calls to {@link where}, {@link or}, or {@link and}.\r\n * @returns The newly created {@link QueryCompositeFilterConstraint}.\r\n * @internal TODO remove this internal tag with OR Query support in the server\r\n */\r\nfunction and(...queryConstraints) {\r\n // Only support QueryFilterConstraints\r\n queryConstraints.forEach(queryConstraint => validateQueryFilterConstraint('and', queryConstraint));\r\n return QueryCompositeFilterConstraint._create(\"and\" /* CompositeOperator.AND */, queryConstraints);\r\n}\r\n/**\r\n * A `QueryOrderByConstraint` is used to sort the set of documents returned by a\r\n * Firestore query. `QueryOrderByConstraint`s are created by invoking\r\n * {@link orderBy} and can then be passed to {@link query} to create a new query\r\n * instance that also contains this `QueryOrderByConstraint`.\r\n *\r\n * Note: Documents that do not contain the orderBy field will not be present in\r\n * the query result.\r\n */\r\nclass QueryOrderByConstraint extends QueryConstraint {\r\n /**\r\n * @internal\r\n */\r\n constructor(_field, _direction) {\r\n super();\r\n this._field = _field;\r\n this._direction = _direction;\r\n /** The type of this query constraint */\r\n this.type = 'orderBy';\r\n }\r\n static _create(_field, _direction) {\r\n return new QueryOrderByConstraint(_field, _direction);\r\n }\r\n _apply(query) {\r\n const orderBy = newQueryOrderBy(query._query, this._field, this._direction);\r\n return new Query(query.firestore, query.converter, queryWithAddedOrderBy(query._query, orderBy));\r\n }\r\n}\r\n/**\r\n * Creates a {@link QueryOrderByConstraint} that sorts the query result by the\r\n * specified field, optionally in descending order instead of ascending.\r\n *\r\n * Note: Documents that do not contain the specified field will not be present\r\n * in the query result.\r\n *\r\n * @param fieldPath - The field to sort by.\r\n * @param directionStr - Optional direction to sort by ('asc' or 'desc'). If\r\n * not specified, order will be ascending.\r\n * @returns The created {@link QueryOrderByConstraint}.\r\n */\r\nfunction orderBy(fieldPath, directionStr = 'asc') {\r\n const direction = directionStr;\r\n const path = fieldPathFromArgument('orderBy', fieldPath);\r\n return QueryOrderByConstraint._create(path, direction);\r\n}\r\n/**\r\n * A `QueryLimitConstraint` is used to limit the number of documents returned by\r\n * a Firestore query.\r\n * `QueryLimitConstraint`s are created by invoking {@link limit} or\r\n * {@link limitToLast} and can then be passed to {@link query} to create a new\r\n * query instance that also contains this `QueryLimitConstraint`.\r\n */\r\nclass QueryLimitConstraint extends QueryConstraint {\r\n /**\r\n * @internal\r\n */\r\n constructor(\r\n /** The type of this query constraint */\r\n type, _limit, _limitType) {\r\n super();\r\n this.type = type;\r\n this._limit = _limit;\r\n this._limitType = _limitType;\r\n }\r\n static _create(type, _limit, _limitType) {\r\n return new QueryLimitConstraint(type, _limit, _limitType);\r\n }\r\n _apply(query) {\r\n return new Query(query.firestore, query.converter, queryWithLimit(query._query, this._limit, this._limitType));\r\n }\r\n}\r\n/**\r\n * Creates a {@link QueryLimitConstraint} that only returns the first matching\r\n * documents.\r\n *\r\n * @param limit - The maximum number of items to return.\r\n * @returns The created {@link QueryLimitConstraint}.\r\n */\r\nfunction limit(limit) {\r\n validatePositiveNumber('limit', limit);\r\n return QueryLimitConstraint._create('limit', limit, \"F\" /* LimitType.First */);\r\n}\r\n/**\r\n * Creates a {@link QueryLimitConstraint} that only returns the last matching\r\n * documents.\r\n *\r\n * You must specify at least one `orderBy` clause for `limitToLast` queries,\r\n * otherwise an exception will be thrown during execution.\r\n *\r\n * @param limit - The maximum number of items to return.\r\n * @returns The created {@link QueryLimitConstraint}.\r\n */\r\nfunction limitToLast(limit) {\r\n validatePositiveNumber('limitToLast', limit);\r\n return QueryLimitConstraint._create('limitToLast', limit, \"L\" /* LimitType.Last */);\r\n}\r\n/**\r\n * A `QueryStartAtConstraint` is used to exclude documents from the start of a\r\n * result set returned by a Firestore query.\r\n * `QueryStartAtConstraint`s are created by invoking {@link (startAt:1)} or\r\n * {@link (startAfter:1)} and can then be passed to {@link query} to create a\r\n * new query instance that also contains this `QueryStartAtConstraint`.\r\n */\r\nclass QueryStartAtConstraint extends QueryConstraint {\r\n /**\r\n * @internal\r\n */\r\n constructor(\r\n /** The type of this query constraint */\r\n type, _docOrFields, _inclusive) {\r\n super();\r\n this.type = type;\r\n this._docOrFields = _docOrFields;\r\n this._inclusive = _inclusive;\r\n }\r\n static _create(type, _docOrFields, _inclusive) {\r\n return new QueryStartAtConstraint(type, _docOrFields, _inclusive);\r\n }\r\n _apply(query) {\r\n const bound = newQueryBoundFromDocOrFields(query, this.type, this._docOrFields, this._inclusive);\r\n return new Query(query.firestore, query.converter, queryWithStartAt(query._query, bound));\r\n }\r\n}\r\nfunction startAt(...docOrFields) {\r\n return QueryStartAtConstraint._create('startAt', docOrFields, \r\n /*inclusive=*/ true);\r\n}\r\nfunction startAfter(...docOrFields) {\r\n return QueryStartAtConstraint._create('startAfter', docOrFields, \r\n /*inclusive=*/ false);\r\n}\r\n/**\r\n * A `QueryEndAtConstraint` is used to exclude documents from the end of a\r\n * result set returned by a Firestore query.\r\n * `QueryEndAtConstraint`s are created by invoking {@link (endAt:1)} or\r\n * {@link (endBefore:1)} and can then be passed to {@link query} to create a new\r\n * query instance that also contains this `QueryEndAtConstraint`.\r\n */\r\nclass QueryEndAtConstraint extends QueryConstraint {\r\n /**\r\n * @internal\r\n */\r\n constructor(\r\n /** The type of this query constraint */\r\n type, _docOrFields, _inclusive) {\r\n super();\r\n this.type = type;\r\n this._docOrFields = _docOrFields;\r\n this._inclusive = _inclusive;\r\n }\r\n static _create(type, _docOrFields, _inclusive) {\r\n return new QueryEndAtConstraint(type, _docOrFields, _inclusive);\r\n }\r\n _apply(query) {\r\n const bound = newQueryBoundFromDocOrFields(query, this.type, this._docOrFields, this._inclusive);\r\n return new Query(query.firestore, query.converter, queryWithEndAt(query._query, bound));\r\n }\r\n}\r\nfunction endBefore(...docOrFields) {\r\n return QueryEndAtConstraint._create('endBefore', docOrFields, \r\n /*inclusive=*/ false);\r\n}\r\nfunction endAt(...docOrFields) {\r\n return QueryEndAtConstraint._create('endAt', docOrFields, \r\n /*inclusive=*/ true);\r\n}\r\n/** Helper function to create a bound from a document or fields */\r\nfunction newQueryBoundFromDocOrFields(query, methodName, docOrFields, inclusive) {\r\n docOrFields[0] = getModularInstance(docOrFields[0]);\r\n if (docOrFields[0] instanceof DocumentSnapshot$1) {\r\n return newQueryBoundFromDocument(query._query, query.firestore._databaseId, methodName, docOrFields[0]._document, inclusive);\r\n }\r\n else {\r\n const reader = newUserDataReader(query.firestore);\r\n return newQueryBoundFromFields(query._query, query.firestore._databaseId, reader, methodName, docOrFields, inclusive);\r\n }\r\n}\r\nfunction newQueryFilter(query, methodName, dataReader, databaseId, fieldPath, op, value) {\r\n let fieldValue;\r\n if (fieldPath.isKeyField()) {\r\n if (op === \"array-contains\" /* Operator.ARRAY_CONTAINS */ || op === \"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid Query. You can't perform '${op}' queries on documentId().`);\r\n }\r\n else if (op === \"in\" /* Operator.IN */ || op === \"not-in\" /* Operator.NOT_IN */) {\r\n validateDisjunctiveFilterElements(value, op);\r\n const referenceList = [];\r\n for (const arrayValue of value) {\r\n referenceList.push(parseDocumentIdValue(databaseId, query, arrayValue));\r\n }\r\n fieldValue = { arrayValue: { values: referenceList } };\r\n }\r\n else {\r\n fieldValue = parseDocumentIdValue(databaseId, query, value);\r\n }\r\n }\r\n else {\r\n if (op === \"in\" /* Operator.IN */ ||\r\n op === \"not-in\" /* Operator.NOT_IN */ ||\r\n op === \"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */) {\r\n validateDisjunctiveFilterElements(value, op);\r\n }\r\n fieldValue = parseQueryValue(dataReader, methodName, value, \r\n /* allowArrays= */ op === \"in\" /* Operator.IN */ || op === \"not-in\" /* Operator.NOT_IN */);\r\n }\r\n const filter = FieldFilter.create(fieldPath, op, fieldValue);\r\n return filter;\r\n}\r\nfunction newQueryOrderBy(query, fieldPath, direction) {\r\n if (query.startAt !== null) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid query. You must not call startAt() or startAfter() before ' +\r\n 'calling orderBy().');\r\n }\r\n if (query.endAt !== null) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid query. You must not call endAt() or endBefore() before ' +\r\n 'calling orderBy().');\r\n }\r\n const orderBy = new OrderBy(fieldPath, direction);\r\n validateNewOrderBy(query, orderBy);\r\n return orderBy;\r\n}\r\n/**\r\n * Create a `Bound` from a query and a document.\r\n *\r\n * Note that the `Bound` will always include the key of the document\r\n * and so only the provided document will compare equal to the returned\r\n * position.\r\n *\r\n * Will throw if the document does not contain all fields of the order by\r\n * of the query or if any of the fields in the order by are an uncommitted\r\n * server timestamp.\r\n */\r\nfunction newQueryBoundFromDocument(query, databaseId, methodName, doc, inclusive) {\r\n if (!doc) {\r\n throw new FirestoreError(Code.NOT_FOUND, `Can't use a DocumentSnapshot that doesn't exist for ` +\r\n `${methodName}().`);\r\n }\r\n const components = [];\r\n // Because people expect to continue/end a query at the exact document\r\n // provided, we need to use the implicit sort order rather than the explicit\r\n // sort order, because it's guaranteed to contain the document key. That way\r\n // the position becomes unambiguous and the query continues/ends exactly at\r\n // the provided document. Without the key (by using the explicit sort\r\n // orders), multiple documents could match the position, yielding duplicate\r\n // results.\r\n for (const orderBy of queryOrderBy(query)) {\r\n if (orderBy.field.isKeyField()) {\r\n components.push(refValue(databaseId, doc.key));\r\n }\r\n else {\r\n const value = doc.data.field(orderBy.field);\r\n if (isServerTimestamp(value)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid query. You are trying to start or end a query using a ' +\r\n 'document for which the field \"' +\r\n orderBy.field +\r\n '\" is an uncommitted server timestamp. (Since the value of ' +\r\n 'this field is unknown, you cannot start/end a query with it.)');\r\n }\r\n else if (value !== null) {\r\n components.push(value);\r\n }\r\n else {\r\n const field = orderBy.field.canonicalString();\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid query. You are trying to start or end a query using a ` +\r\n `document for which the field '${field}' (used as the ` +\r\n `orderBy) does not exist.`);\r\n }\r\n }\r\n }\r\n return new Bound(components, inclusive);\r\n}\r\n/**\r\n * Converts a list of field values to a `Bound` for the given query.\r\n */\r\nfunction newQueryBoundFromFields(query, databaseId, dataReader, methodName, values, inclusive) {\r\n // Use explicit order by's because it has to match the query the user made\r\n const orderBy = query.explicitOrderBy;\r\n if (values.length > orderBy.length) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Too many arguments provided to ${methodName}(). ` +\r\n `The number of arguments must be less than or equal to the ` +\r\n `number of orderBy() clauses`);\r\n }\r\n const components = [];\r\n for (let i = 0; i < values.length; i++) {\r\n const rawValue = values[i];\r\n const orderByComponent = orderBy[i];\r\n if (orderByComponent.field.isKeyField()) {\r\n if (typeof rawValue !== 'string') {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid query. Expected a string for document ID in ` +\r\n `${methodName}(), but got a ${typeof rawValue}`);\r\n }\r\n if (!isCollectionGroupQuery(query) && rawValue.indexOf('/') !== -1) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid query. When querying a collection and ordering by documentId(), ` +\r\n `the value passed to ${methodName}() must be a plain document ID, but ` +\r\n `'${rawValue}' contains a slash.`);\r\n }\r\n const path = query.path.child(ResourcePath.fromString(rawValue));\r\n if (!DocumentKey.isDocumentKey(path)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid query. When querying a collection group and ordering by ` +\r\n `documentId(), the value passed to ${methodName}() must result in a ` +\r\n `valid document path, but '${path}' is not because it contains an odd number ` +\r\n `of segments.`);\r\n }\r\n const key = new DocumentKey(path);\r\n components.push(refValue(databaseId, key));\r\n }\r\n else {\r\n const wrapped = parseQueryValue(dataReader, methodName, rawValue);\r\n components.push(wrapped);\r\n }\r\n }\r\n return new Bound(components, inclusive);\r\n}\r\n/**\r\n * Parses the given `documentIdValue` into a `ReferenceValue`, throwing\r\n * appropriate errors if the value is anything other than a `DocumentReference`\r\n * or `string`, or if the string is malformed.\r\n */\r\nfunction parseDocumentIdValue(databaseId, query, documentIdValue) {\r\n documentIdValue = getModularInstance(documentIdValue);\r\n if (typeof documentIdValue === 'string') {\r\n if (documentIdValue === '') {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid query. When querying with documentId(), you ' +\r\n 'must provide a valid document ID, but it was an empty string.');\r\n }\r\n if (!isCollectionGroupQuery(query) && documentIdValue.indexOf('/') !== -1) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid query. When querying a collection by ` +\r\n `documentId(), you must provide a plain document ID, but ` +\r\n `'${documentIdValue}' contains a '/' character.`);\r\n }\r\n const path = query.path.child(ResourcePath.fromString(documentIdValue));\r\n if (!DocumentKey.isDocumentKey(path)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid query. When querying a collection group by ` +\r\n `documentId(), the value provided must result in a valid document path, ` +\r\n `but '${path}' is not because it has an odd number of segments (${path.length}).`);\r\n }\r\n return refValue(databaseId, new DocumentKey(path));\r\n }\r\n else if (documentIdValue instanceof DocumentReference) {\r\n return refValue(databaseId, documentIdValue._key);\r\n }\r\n else {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid query. When querying with documentId(), you must provide a valid ` +\r\n `string or a DocumentReference, but it was: ` +\r\n `${valueDescription(documentIdValue)}.`);\r\n }\r\n}\r\n/**\r\n * Validates that the value passed into a disjunctive filter satisfies all\r\n * array requirements.\r\n */\r\nfunction validateDisjunctiveFilterElements(value, operator) {\r\n if (!Array.isArray(value) || value.length === 0) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid Query. A non-empty array is required for ' +\r\n `'${operator.toString()}' filters.`);\r\n }\r\n if (value.length > 10) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid Query. '${operator.toString()}' filters support a ` +\r\n 'maximum of 10 elements in the value array.');\r\n }\r\n}\r\n/**\r\n * Given an operator, returns the set of operators that cannot be used with it.\r\n *\r\n * Operators in a query must adhere to the following set of rules:\r\n * 1. Only one array operator is allowed.\r\n * 2. Only one disjunctive operator is allowed.\r\n * 3. `NOT_EQUAL` cannot be used with another `NOT_EQUAL` operator.\r\n * 4. `NOT_IN` cannot be used with array, disjunctive, or `NOT_EQUAL` operators.\r\n *\r\n * Array operators: `ARRAY_CONTAINS`, `ARRAY_CONTAINS_ANY`\r\n * Disjunctive operators: `IN`, `ARRAY_CONTAINS_ANY`, `NOT_IN`\r\n */\r\nfunction conflictingOps(op) {\r\n switch (op) {\r\n case \"!=\" /* Operator.NOT_EQUAL */:\r\n return [\"!=\" /* Operator.NOT_EQUAL */, \"not-in\" /* Operator.NOT_IN */];\r\n case \"array-contains\" /* Operator.ARRAY_CONTAINS */:\r\n return [\r\n \"array-contains\" /* Operator.ARRAY_CONTAINS */,\r\n \"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */,\r\n \"not-in\" /* Operator.NOT_IN */\r\n ];\r\n case \"in\" /* Operator.IN */:\r\n return [\"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */, \"in\" /* Operator.IN */, \"not-in\" /* Operator.NOT_IN */];\r\n case \"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */:\r\n return [\r\n \"array-contains\" /* Operator.ARRAY_CONTAINS */,\r\n \"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */,\r\n \"in\" /* Operator.IN */,\r\n \"not-in\" /* Operator.NOT_IN */\r\n ];\r\n case \"not-in\" /* Operator.NOT_IN */:\r\n return [\r\n \"array-contains\" /* Operator.ARRAY_CONTAINS */,\r\n \"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */,\r\n \"in\" /* Operator.IN */,\r\n \"not-in\" /* Operator.NOT_IN */,\r\n \"!=\" /* Operator.NOT_EQUAL */\r\n ];\r\n default:\r\n return [];\r\n }\r\n}\r\nfunction validateNewFieldFilter(query, fieldFilter) {\r\n if (fieldFilter.isInequality()) {\r\n const existingInequality = getInequalityFilterField(query);\r\n const newInequality = fieldFilter.field;\r\n if (existingInequality !== null &&\r\n !existingInequality.isEqual(newInequality)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid query. All where filters with an inequality' +\r\n ' (<, <=, !=, not-in, >, or >=) must be on the same field. But you have' +\r\n ` inequality filters on '${existingInequality.toString()}'` +\r\n ` and '${newInequality.toString()}'`);\r\n }\r\n const firstOrderByField = getFirstOrderByField(query);\r\n if (firstOrderByField !== null) {\r\n validateOrderByAndInequalityMatch(query, newInequality, firstOrderByField);\r\n }\r\n }\r\n const conflictingOp = findOpInsideFilters(query.filters, conflictingOps(fieldFilter.op));\r\n if (conflictingOp !== null) {\r\n // Special case when it's a duplicate op to give a slightly clearer error message.\r\n if (conflictingOp === fieldFilter.op) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid query. You cannot use more than one ' +\r\n `'${fieldFilter.op.toString()}' filter.`);\r\n }\r\n else {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid query. You cannot use '${fieldFilter.op.toString()}' filters ` +\r\n `with '${conflictingOp.toString()}' filters.`);\r\n }\r\n }\r\n}\r\nfunction validateNewFilter(query, filter) {\r\n let testQuery = query;\r\n const subFilters = filter.getFlattenedFilters();\r\n for (const subFilter of subFilters) {\r\n validateNewFieldFilter(testQuery, subFilter);\r\n testQuery = queryWithAddedFilter(testQuery, subFilter);\r\n }\r\n}\r\n// Checks if any of the provided filter operators are included in the given list of filters and\r\n// returns the first one that is, or null if none are.\r\nfunction findOpInsideFilters(filters, operators) {\r\n for (const filter of filters) {\r\n for (const fieldFilter of filter.getFlattenedFilters()) {\r\n if (operators.indexOf(fieldFilter.op) >= 0) {\r\n return fieldFilter.op;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\nfunction validateNewOrderBy(query, orderBy) {\r\n if (getFirstOrderByField(query) === null) {\r\n // This is the first order by. It must match any inequality.\r\n const inequalityField = getInequalityFilterField(query);\r\n if (inequalityField !== null) {\r\n validateOrderByAndInequalityMatch(query, inequalityField, orderBy.field);\r\n }\r\n }\r\n}\r\nfunction validateOrderByAndInequalityMatch(baseQuery, inequality, orderBy) {\r\n if (!orderBy.isEqual(inequality)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid query. You have a where filter with an inequality ` +\r\n `(<, <=, !=, not-in, >, or >=) on field '${inequality.toString()}' ` +\r\n `and so you must also use '${inequality.toString()}' ` +\r\n `as your first argument to orderBy(), but your first orderBy() ` +\r\n `is on field '${orderBy.toString()}' instead.`);\r\n }\r\n}\r\nfunction validateQueryFilterConstraint(functionName, queryConstraint) {\r\n if (!(queryConstraint instanceof QueryFieldFilterConstraint) &&\r\n !(queryConstraint instanceof QueryCompositeFilterConstraint)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Function ${functionName}() requires AppliableConstraints created with a call to 'where(...)', 'or(...)', or 'and(...)'.`);\r\n }\r\n}\r\nfunction validateQueryConstraintArray(queryConstraint) {\r\n const compositeFilterCount = queryConstraint.filter(filter => filter instanceof QueryCompositeFilterConstraint).length;\r\n const fieldFilterCount = queryConstraint.filter(filter => filter instanceof QueryFieldFilterConstraint).length;\r\n if (compositeFilterCount > 1 ||\r\n (compositeFilterCount > 0 && fieldFilterCount > 0)) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'InvalidQuery. When using composite filters, you cannot use ' +\r\n 'more than one filter at the top level. Consider nesting the multiple ' +\r\n 'filters within an `and(...)` statement. For example: ' +\r\n 'change `query(query, where(...), or(...))` to ' +\r\n '`query(query, and(where(...), or(...)))`.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Converts Firestore's internal types to the JavaScript types that we expose\r\n * to the user.\r\n *\r\n * @internal\r\n */\r\nclass AbstractUserDataWriter {\r\n convertValue(value, serverTimestampBehavior = 'none') {\r\n switch (typeOrder(value)) {\r\n case 0 /* TypeOrder.NullValue */:\r\n return null;\r\n case 1 /* TypeOrder.BooleanValue */:\r\n return value.booleanValue;\r\n case 2 /* TypeOrder.NumberValue */:\r\n return normalizeNumber(value.integerValue || value.doubleValue);\r\n case 3 /* TypeOrder.TimestampValue */:\r\n return this.convertTimestamp(value.timestampValue);\r\n case 4 /* TypeOrder.ServerTimestampValue */:\r\n return this.convertServerTimestamp(value, serverTimestampBehavior);\r\n case 5 /* TypeOrder.StringValue */:\r\n return value.stringValue;\r\n case 6 /* TypeOrder.BlobValue */:\r\n return this.convertBytes(normalizeByteString(value.bytesValue));\r\n case 7 /* TypeOrder.RefValue */:\r\n return this.convertReference(value.referenceValue);\r\n case 8 /* TypeOrder.GeoPointValue */:\r\n return this.convertGeoPoint(value.geoPointValue);\r\n case 9 /* TypeOrder.ArrayValue */:\r\n return this.convertArray(value.arrayValue, serverTimestampBehavior);\r\n case 10 /* TypeOrder.ObjectValue */:\r\n return this.convertObject(value.mapValue, serverTimestampBehavior);\r\n default:\r\n throw fail();\r\n }\r\n }\r\n convertObject(mapValue, serverTimestampBehavior) {\r\n const result = {};\r\n forEach(mapValue.fields, (key, value) => {\r\n result[key] = this.convertValue(value, serverTimestampBehavior);\r\n });\r\n return result;\r\n }\r\n convertGeoPoint(value) {\r\n return new GeoPoint(normalizeNumber(value.latitude), normalizeNumber(value.longitude));\r\n }\r\n convertArray(arrayValue, serverTimestampBehavior) {\r\n return (arrayValue.values || []).map(value => this.convertValue(value, serverTimestampBehavior));\r\n }\r\n convertServerTimestamp(value, serverTimestampBehavior) {\r\n switch (serverTimestampBehavior) {\r\n case 'previous':\r\n const previousValue = getPreviousValue(value);\r\n if (previousValue == null) {\r\n return null;\r\n }\r\n return this.convertValue(previousValue, serverTimestampBehavior);\r\n case 'estimate':\r\n return this.convertTimestamp(getLocalWriteTime(value));\r\n default:\r\n return null;\r\n }\r\n }\r\n convertTimestamp(value) {\r\n const normalizedValue = normalizeTimestamp(value);\r\n return new Timestamp(normalizedValue.seconds, normalizedValue.nanos);\r\n }\r\n convertDocumentKey(name, expectedDatabaseId) {\r\n const resourcePath = ResourcePath.fromString(name);\r\n hardAssert(isValidResourceName(resourcePath));\r\n const databaseId = new DatabaseId(resourcePath.get(1), resourcePath.get(3));\r\n const key = new DocumentKey(resourcePath.popFirst(5));\r\n if (!databaseId.isEqual(expectedDatabaseId)) {\r\n // TODO(b/64130202): Somehow support foreign references.\r\n logError(`Document ${key} contains a document ` +\r\n `reference within a different database (` +\r\n `${databaseId.projectId}/${databaseId.database}) which is not ` +\r\n `supported. It will be treated as a reference in the current ` +\r\n `database (${expectedDatabaseId.projectId}/${expectedDatabaseId.database}) ` +\r\n `instead.`);\r\n }\r\n return key;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Converts custom model object of type T into `DocumentData` by applying the\r\n * converter if it exists.\r\n *\r\n * This function is used when converting user objects to `DocumentData`\r\n * because we want to provide the user with a more specific error message if\r\n * their `set()` or fails due to invalid data originating from a `toFirestore()`\r\n * call.\r\n */\r\nfunction applyFirestoreDataConverter(converter, value, options) {\r\n let convertedValue;\r\n if (converter) {\r\n if (options && (options.merge || options.mergeFields)) {\r\n // Cast to `any` in order to satisfy the union type constraint on\r\n // toFirestore().\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n convertedValue = converter.toFirestore(value, options);\r\n }\r\n else {\r\n convertedValue = converter.toFirestore(value);\r\n }\r\n }\r\n else {\r\n convertedValue = value;\r\n }\r\n return convertedValue;\r\n}\r\nclass LiteUserDataWriter extends AbstractUserDataWriter {\r\n constructor(firestore) {\r\n super();\r\n this.firestore = firestore;\r\n }\r\n convertBytes(bytes) {\r\n return new Bytes(bytes);\r\n }\r\n convertReference(name) {\r\n const key = this.convertDocumentKey(name, this.firestore._databaseId);\r\n return new DocumentReference(this.firestore, /* converter= */ null, key);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Metadata about a snapshot, describing the state of the snapshot.\r\n */\r\nclass SnapshotMetadata {\r\n /** @hideconstructor */\r\n constructor(hasPendingWrites, fromCache) {\r\n this.hasPendingWrites = hasPendingWrites;\r\n this.fromCache = fromCache;\r\n }\r\n /**\r\n * Returns true if this `SnapshotMetadata` is equal to the provided one.\r\n *\r\n * @param other - The `SnapshotMetadata` to compare against.\r\n * @returns true if this `SnapshotMetadata` is equal to the provided one.\r\n */\r\n isEqual(other) {\r\n return (this.hasPendingWrites === other.hasPendingWrites &&\r\n this.fromCache === other.fromCache);\r\n }\r\n}\r\n/**\r\n * A `DocumentSnapshot` contains data read from a document in your Firestore\r\n * database. The data can be extracted with `.data()` or `.get()` to\r\n * get a specific field.\r\n *\r\n * For a `DocumentSnapshot` that points to a non-existing document, any data\r\n * access will return 'undefined'. You can use the `exists()` method to\r\n * explicitly verify a document's existence.\r\n */\r\nclass DocumentSnapshot extends DocumentSnapshot$1 {\r\n /** @hideconstructor protected */\r\n constructor(_firestore, userDataWriter, key, document, metadata, converter) {\r\n super(_firestore, userDataWriter, key, document, converter);\r\n this._firestore = _firestore;\r\n this._firestoreImpl = _firestore;\r\n this.metadata = metadata;\r\n }\r\n /**\r\n * Returns whether or not the data exists. True if the document exists.\r\n */\r\n exists() {\r\n return super.exists();\r\n }\r\n /**\r\n * Retrieves all fields in the document as an `Object`. Returns `undefined` if\r\n * the document doesn't exist.\r\n *\r\n * By default, `serverTimestamp()` values that have not yet been\r\n * set to their final value will be returned as `null`. You can override\r\n * this by passing an options object.\r\n *\r\n * @param options - An options object to configure how data is retrieved from\r\n * the snapshot (for example the desired behavior for server timestamps that\r\n * have not yet been set to their final value).\r\n * @returns An `Object` containing all fields in the document or `undefined` if\r\n * the document doesn't exist.\r\n */\r\n data(options = {}) {\r\n if (!this._document) {\r\n return undefined;\r\n }\r\n else if (this._converter) {\r\n // We only want to use the converter and create a new DocumentSnapshot\r\n // if a converter has been provided.\r\n const snapshot = new QueryDocumentSnapshot(this._firestore, this._userDataWriter, this._key, this._document, this.metadata, \r\n /* converter= */ null);\r\n return this._converter.fromFirestore(snapshot, options);\r\n }\r\n else {\r\n return this._userDataWriter.convertValue(this._document.data.value, options.serverTimestamps);\r\n }\r\n }\r\n /**\r\n * Retrieves the field specified by `fieldPath`. Returns `undefined` if the\r\n * document or field doesn't exist.\r\n *\r\n * By default, a `serverTimestamp()` that has not yet been set to\r\n * its final value will be returned as `null`. You can override this by\r\n * passing an options object.\r\n *\r\n * @param fieldPath - The path (for example 'foo' or 'foo.bar') to a specific\r\n * field.\r\n * @param options - An options object to configure how the field is retrieved\r\n * from the snapshot (for example the desired behavior for server timestamps\r\n * that have not yet been set to their final value).\r\n * @returns The data at the specified field location or undefined if no such\r\n * field exists in the document.\r\n */\r\n // We are using `any` here to avoid an explicit cast by our users.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n get(fieldPath, options = {}) {\r\n if (this._document) {\r\n const value = this._document.data.field(fieldPathFromArgument('DocumentSnapshot.get', fieldPath));\r\n if (value !== null) {\r\n return this._userDataWriter.convertValue(value, options.serverTimestamps);\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n/**\r\n * A `QueryDocumentSnapshot` contains data read from a document in your\r\n * Firestore database as part of a query. The document is guaranteed to exist\r\n * and its data can be extracted with `.data()` or `.get()` to get a\r\n * specific field.\r\n *\r\n * A `QueryDocumentSnapshot` offers the same API surface as a\r\n * `DocumentSnapshot`. Since query results contain only existing documents, the\r\n * `exists` property will always be true and `data()` will never return\r\n * 'undefined'.\r\n */\r\nclass QueryDocumentSnapshot extends DocumentSnapshot {\r\n /**\r\n * Retrieves all fields in the document as an `Object`.\r\n *\r\n * By default, `serverTimestamp()` values that have not yet been\r\n * set to their final value will be returned as `null`. You can override\r\n * this by passing an options object.\r\n *\r\n * @override\r\n * @param options - An options object to configure how data is retrieved from\r\n * the snapshot (for example the desired behavior for server timestamps that\r\n * have not yet been set to their final value).\r\n * @returns An `Object` containing all fields in the document.\r\n */\r\n data(options = {}) {\r\n return super.data(options);\r\n }\r\n}\r\n/**\r\n * A `QuerySnapshot` contains zero or more `DocumentSnapshot` objects\r\n * representing the results of a query. The documents can be accessed as an\r\n * array via the `docs` property or enumerated using the `forEach` method. The\r\n * number of documents can be determined via the `empty` and `size`\r\n * properties.\r\n */\r\nclass QuerySnapshot {\r\n /** @hideconstructor */\r\n constructor(_firestore, _userDataWriter, query, _snapshot) {\r\n this._firestore = _firestore;\r\n this._userDataWriter = _userDataWriter;\r\n this._snapshot = _snapshot;\r\n this.metadata = new SnapshotMetadata(_snapshot.hasPendingWrites, _snapshot.fromCache);\r\n this.query = query;\r\n }\r\n /** An array of all the documents in the `QuerySnapshot`. */\r\n get docs() {\r\n const result = [];\r\n this.forEach(doc => result.push(doc));\r\n return result;\r\n }\r\n /** The number of documents in the `QuerySnapshot`. */\r\n get size() {\r\n return this._snapshot.docs.size;\r\n }\r\n /** True if there are no documents in the `QuerySnapshot`. */\r\n get empty() {\r\n return this.size === 0;\r\n }\r\n /**\r\n * Enumerates all of the documents in the `QuerySnapshot`.\r\n *\r\n * @param callback - A callback to be called with a `QueryDocumentSnapshot` for\r\n * each document in the snapshot.\r\n * @param thisArg - The `this` binding for the callback.\r\n */\r\n forEach(callback, thisArg) {\r\n this._snapshot.docs.forEach(doc => {\r\n callback.call(thisArg, new QueryDocumentSnapshot(this._firestore, this._userDataWriter, doc.key, doc, new SnapshotMetadata(this._snapshot.mutatedKeys.has(doc.key), this._snapshot.fromCache), this.query.converter));\r\n });\r\n }\r\n /**\r\n * Returns an array of the documents changes since the last snapshot. If this\r\n * is the first snapshot, all documents will be in the list as 'added'\r\n * changes.\r\n *\r\n * @param options - `SnapshotListenOptions` that control whether metadata-only\r\n * changes (i.e. only `DocumentSnapshot.metadata` changed) should trigger\r\n * snapshot events.\r\n */\r\n docChanges(options = {}) {\r\n const includeMetadataChanges = !!options.includeMetadataChanges;\r\n if (includeMetadataChanges && this._snapshot.excludesMetadataChanges) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'To include metadata changes with your document changes, you must ' +\r\n 'also pass { includeMetadataChanges:true } to onSnapshot().');\r\n }\r\n if (!this._cachedChanges ||\r\n this._cachedChangesIncludeMetadataChanges !== includeMetadataChanges) {\r\n this._cachedChanges = changesFromSnapshot(this, includeMetadataChanges);\r\n this._cachedChangesIncludeMetadataChanges = includeMetadataChanges;\r\n }\r\n return this._cachedChanges;\r\n }\r\n}\r\n/** Calculates the array of `DocumentChange`s for a given `ViewSnapshot`. */\r\nfunction changesFromSnapshot(querySnapshot, includeMetadataChanges) {\r\n if (querySnapshot._snapshot.oldDocs.isEmpty()) {\r\n let index = 0;\r\n return querySnapshot._snapshot.docChanges.map(change => {\r\n const doc = new QueryDocumentSnapshot(querySnapshot._firestore, querySnapshot._userDataWriter, change.doc.key, change.doc, new SnapshotMetadata(querySnapshot._snapshot.mutatedKeys.has(change.doc.key), querySnapshot._snapshot.fromCache), querySnapshot.query.converter);\r\n change.doc;\r\n return {\r\n type: 'added',\r\n doc,\r\n oldIndex: -1,\r\n newIndex: index++\r\n };\r\n });\r\n }\r\n else {\r\n // A `DocumentSet` that is updated incrementally as changes are applied to use\r\n // to lookup the index of a document.\r\n let indexTracker = querySnapshot._snapshot.oldDocs;\r\n return querySnapshot._snapshot.docChanges\r\n .filter(change => includeMetadataChanges || change.type !== 3 /* ChangeType.Metadata */)\r\n .map(change => {\r\n const doc = new QueryDocumentSnapshot(querySnapshot._firestore, querySnapshot._userDataWriter, change.doc.key, change.doc, new SnapshotMetadata(querySnapshot._snapshot.mutatedKeys.has(change.doc.key), querySnapshot._snapshot.fromCache), querySnapshot.query.converter);\r\n let oldIndex = -1;\r\n let newIndex = -1;\r\n if (change.type !== 0 /* ChangeType.Added */) {\r\n oldIndex = indexTracker.indexOf(change.doc.key);\r\n indexTracker = indexTracker.delete(change.doc.key);\r\n }\r\n if (change.type !== 1 /* ChangeType.Removed */) {\r\n indexTracker = indexTracker.add(change.doc);\r\n newIndex = indexTracker.indexOf(change.doc.key);\r\n }\r\n return {\r\n type: resultChangeType(change.type),\r\n doc,\r\n oldIndex,\r\n newIndex\r\n };\r\n });\r\n }\r\n}\r\nfunction resultChangeType(type) {\r\n switch (type) {\r\n case 0 /* ChangeType.Added */:\r\n return 'added';\r\n case 2 /* ChangeType.Modified */:\r\n case 3 /* ChangeType.Metadata */:\r\n return 'modified';\r\n case 1 /* ChangeType.Removed */:\r\n return 'removed';\r\n default:\r\n return fail();\r\n }\r\n}\r\n// TODO(firestoreexp): Add tests for snapshotEqual with different snapshot\r\n// metadata\r\n/**\r\n * Returns true if the provided snapshots are equal.\r\n *\r\n * @param left - A snapshot to compare.\r\n * @param right - A snapshot to compare.\r\n * @returns true if the snapshots are equal.\r\n */\r\nfunction snapshotEqual(left, right) {\r\n if (left instanceof DocumentSnapshot && right instanceof DocumentSnapshot) {\r\n return (left._firestore === right._firestore &&\r\n left._key.isEqual(right._key) &&\r\n (left._document === null\r\n ? right._document === null\r\n : left._document.isEqual(right._document)) &&\r\n left._converter === right._converter);\r\n }\r\n else if (left instanceof QuerySnapshot && right instanceof QuerySnapshot) {\r\n return (left._firestore === right._firestore &&\r\n queryEqual(left.query, right.query) &&\r\n left.metadata.isEqual(right.metadata) &&\r\n left._snapshot.isEqual(right._snapshot));\r\n }\r\n return false;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Reads the document referred to by this `DocumentReference`.\r\n *\r\n * Note: `getDoc()` attempts to provide up-to-date data when possible by waiting\r\n * for data from the server, but it may return cached data or fail if you are\r\n * offline and the server cannot be reached. To specify this behavior, invoke\r\n * {@link getDocFromCache} or {@link getDocFromServer}.\r\n *\r\n * @param reference - The reference of the document to fetch.\r\n * @returns A Promise resolved with a `DocumentSnapshot` containing the\r\n * current document contents.\r\n */\r\nfunction getDoc(reference) {\r\n reference = cast(reference, DocumentReference);\r\n const firestore = cast(reference.firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n return firestoreClientGetDocumentViaSnapshotListener(client, reference._key).then(snapshot => convertToDocSnapshot(firestore, reference, snapshot));\r\n}\r\nclass ExpUserDataWriter extends AbstractUserDataWriter {\r\n constructor(firestore) {\r\n super();\r\n this.firestore = firestore;\r\n }\r\n convertBytes(bytes) {\r\n return new Bytes(bytes);\r\n }\r\n convertReference(name) {\r\n const key = this.convertDocumentKey(name, this.firestore._databaseId);\r\n return new DocumentReference(this.firestore, /* converter= */ null, key);\r\n }\r\n}\r\n/**\r\n * Reads the document referred to by this `DocumentReference` from cache.\r\n * Returns an error if the document is not currently cached.\r\n *\r\n * @returns A `Promise` resolved with a `DocumentSnapshot` containing the\r\n * current document contents.\r\n */\r\nfunction getDocFromCache(reference) {\r\n reference = cast(reference, DocumentReference);\r\n const firestore = cast(reference.firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n const userDataWriter = new ExpUserDataWriter(firestore);\r\n return firestoreClientGetDocumentFromLocalCache(client, reference._key).then(doc => new DocumentSnapshot(firestore, userDataWriter, reference._key, doc, new SnapshotMetadata(doc !== null && doc.hasLocalMutations, \r\n /* fromCache= */ true), reference.converter));\r\n}\r\n/**\r\n * Reads the document referred to by this `DocumentReference` from the server.\r\n * Returns an error if the network is not available.\r\n *\r\n * @returns A `Promise` resolved with a `DocumentSnapshot` containing the\r\n * current document contents.\r\n */\r\nfunction getDocFromServer(reference) {\r\n reference = cast(reference, DocumentReference);\r\n const firestore = cast(reference.firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n return firestoreClientGetDocumentViaSnapshotListener(client, reference._key, {\r\n source: 'server'\r\n }).then(snapshot => convertToDocSnapshot(firestore, reference, snapshot));\r\n}\r\n/**\r\n * Executes the query and returns the results as a `QuerySnapshot`.\r\n *\r\n * Note: `getDocs()` attempts to provide up-to-date data when possible by\r\n * waiting for data from the server, but it may return cached data or fail if\r\n * you are offline and the server cannot be reached. To specify this behavior,\r\n * invoke {@link getDocsFromCache} or {@link getDocsFromServer}.\r\n *\r\n * @returns A `Promise` that will be resolved with the results of the query.\r\n */\r\nfunction getDocs(query) {\r\n query = cast(query, Query);\r\n const firestore = cast(query.firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n const userDataWriter = new ExpUserDataWriter(firestore);\r\n validateHasExplicitOrderByForLimitToLast(query._query);\r\n return firestoreClientGetDocumentsViaSnapshotListener(client, query._query).then(snapshot => new QuerySnapshot(firestore, userDataWriter, query, snapshot));\r\n}\r\n/**\r\n * Executes the query and returns the results as a `QuerySnapshot` from cache.\r\n * Returns an empty result set if no documents matching the query are currently\r\n * cached.\r\n *\r\n * @returns A `Promise` that will be resolved with the results of the query.\r\n */\r\nfunction getDocsFromCache(query) {\r\n query = cast(query, Query);\r\n const firestore = cast(query.firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n const userDataWriter = new ExpUserDataWriter(firestore);\r\n return firestoreClientGetDocumentsFromLocalCache(client, query._query).then(snapshot => new QuerySnapshot(firestore, userDataWriter, query, snapshot));\r\n}\r\n/**\r\n * Executes the query and returns the results as a `QuerySnapshot` from the\r\n * server. Returns an error if the network is not available.\r\n *\r\n * @returns A `Promise` that will be resolved with the results of the query.\r\n */\r\nfunction getDocsFromServer(query) {\r\n query = cast(query, Query);\r\n const firestore = cast(query.firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n const userDataWriter = new ExpUserDataWriter(firestore);\r\n return firestoreClientGetDocumentsViaSnapshotListener(client, query._query, {\r\n source: 'server'\r\n }).then(snapshot => new QuerySnapshot(firestore, userDataWriter, query, snapshot));\r\n}\r\nfunction setDoc(reference, data, options) {\r\n reference = cast(reference, DocumentReference);\r\n const firestore = cast(reference.firestore, Firestore);\r\n const convertedValue = applyFirestoreDataConverter(reference.converter, data, options);\r\n const dataReader = newUserDataReader(firestore);\r\n const parsed = parseSetData(dataReader, 'setDoc', reference._key, convertedValue, reference.converter !== null, options);\r\n const mutation = parsed.toMutation(reference._key, Precondition.none());\r\n return executeWrite(firestore, [mutation]);\r\n}\r\nfunction updateDoc(reference, fieldOrUpdateData, value, ...moreFieldsAndValues) {\r\n reference = cast(reference, DocumentReference);\r\n const firestore = cast(reference.firestore, Firestore);\r\n const dataReader = newUserDataReader(firestore);\r\n // For Compat types, we have to \"extract\" the underlying types before\r\n // performing validation.\r\n fieldOrUpdateData = getModularInstance(fieldOrUpdateData);\r\n let parsed;\r\n if (typeof fieldOrUpdateData === 'string' ||\r\n fieldOrUpdateData instanceof FieldPath) {\r\n parsed = parseUpdateVarargs(dataReader, 'updateDoc', reference._key, fieldOrUpdateData, value, moreFieldsAndValues);\r\n }\r\n else {\r\n parsed = parseUpdateData(dataReader, 'updateDoc', reference._key, fieldOrUpdateData);\r\n }\r\n const mutation = parsed.toMutation(reference._key, Precondition.exists(true));\r\n return executeWrite(firestore, [mutation]);\r\n}\r\n/**\r\n * Deletes the document referred to by the specified `DocumentReference`.\r\n *\r\n * @param reference - A reference to the document to delete.\r\n * @returns A Promise resolved once the document has been successfully\r\n * deleted from the backend (note that it won't resolve while you're offline).\r\n */\r\nfunction deleteDoc(reference) {\r\n const firestore = cast(reference.firestore, Firestore);\r\n const mutations = [new DeleteMutation(reference._key, Precondition.none())];\r\n return executeWrite(firestore, mutations);\r\n}\r\n/**\r\n * Add a new document to specified `CollectionReference` with the given data,\r\n * assigning it a document ID automatically.\r\n *\r\n * @param reference - A reference to the collection to add this document to.\r\n * @param data - An Object containing the data for the new document.\r\n * @returns A `Promise` resolved with a `DocumentReference` pointing to the\r\n * newly created document after it has been written to the backend (Note that it\r\n * won't resolve while you're offline).\r\n */\r\nfunction addDoc(reference, data) {\r\n const firestore = cast(reference.firestore, Firestore);\r\n const docRef = doc(reference);\r\n const convertedValue = applyFirestoreDataConverter(reference.converter, data);\r\n const dataReader = newUserDataReader(reference.firestore);\r\n const parsed = parseSetData(dataReader, 'addDoc', docRef._key, convertedValue, reference.converter !== null, {});\r\n const mutation = parsed.toMutation(docRef._key, Precondition.exists(false));\r\n return executeWrite(firestore, [mutation]).then(() => docRef);\r\n}\r\nfunction onSnapshot(reference, ...args) {\r\n var _a, _b, _c;\r\n reference = getModularInstance(reference);\r\n let options = {\r\n includeMetadataChanges: false\r\n };\r\n let currArg = 0;\r\n if (typeof args[currArg] === 'object' && !isPartialObserver(args[currArg])) {\r\n options = args[currArg];\r\n currArg++;\r\n }\r\n const internalOptions = {\r\n includeMetadataChanges: options.includeMetadataChanges\r\n };\r\n if (isPartialObserver(args[currArg])) {\r\n const userObserver = args[currArg];\r\n args[currArg] = (_a = userObserver.next) === null || _a === void 0 ? void 0 : _a.bind(userObserver);\r\n args[currArg + 1] = (_b = userObserver.error) === null || _b === void 0 ? void 0 : _b.bind(userObserver);\r\n args[currArg + 2] = (_c = userObserver.complete) === null || _c === void 0 ? void 0 : _c.bind(userObserver);\r\n }\r\n let observer;\r\n let firestore;\r\n let internalQuery;\r\n if (reference instanceof DocumentReference) {\r\n firestore = cast(reference.firestore, Firestore);\r\n internalQuery = newQueryForPath(reference._key.path);\r\n observer = {\r\n next: snapshot => {\r\n if (args[currArg]) {\r\n args[currArg](convertToDocSnapshot(firestore, reference, snapshot));\r\n }\r\n },\r\n error: args[currArg + 1],\r\n complete: args[currArg + 2]\r\n };\r\n }\r\n else {\r\n const query = cast(reference, Query);\r\n firestore = cast(query.firestore, Firestore);\r\n internalQuery = query._query;\r\n const userDataWriter = new ExpUserDataWriter(firestore);\r\n observer = {\r\n next: snapshot => {\r\n if (args[currArg]) {\r\n args[currArg](new QuerySnapshot(firestore, userDataWriter, query, snapshot));\r\n }\r\n },\r\n error: args[currArg + 1],\r\n complete: args[currArg + 2]\r\n };\r\n validateHasExplicitOrderByForLimitToLast(reference._query);\r\n }\r\n const client = ensureFirestoreConfigured(firestore);\r\n return firestoreClientListen(client, internalQuery, internalOptions, observer);\r\n}\r\nfunction onSnapshotsInSync(firestore, arg) {\r\n firestore = cast(firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n const observer = isPartialObserver(arg)\r\n ? arg\r\n : {\r\n next: arg\r\n };\r\n return firestoreClientAddSnapshotsInSyncListener(client, observer);\r\n}\r\n/**\r\n * Locally writes `mutations` on the async queue.\r\n * @internal\r\n */\r\nfunction executeWrite(firestore, mutations) {\r\n const client = ensureFirestoreConfigured(firestore);\r\n return firestoreClientWrite(client, mutations);\r\n}\r\n/**\r\n * Converts a {@link ViewSnapshot} that contains the single document specified by `ref`\r\n * to a {@link DocumentSnapshot}.\r\n */\r\nfunction convertToDocSnapshot(firestore, ref, snapshot) {\r\n const doc = snapshot.docs.get(ref._key);\r\n const userDataWriter = new ExpUserDataWriter(firestore);\r\n return new DocumentSnapshot(firestore, userDataWriter, ref._key, doc, new SnapshotMetadata(snapshot.hasPendingWrites, snapshot.fromCache), ref.converter);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Compares two `AggregateQuerySnapshot` instances for equality.\r\n *\r\n * Two `AggregateQuerySnapshot` instances are considered \"equal\" if they have\r\n * underlying queries that compare equal, and the same data.\r\n *\r\n * @param left - The first `AggregateQuerySnapshot` to compare.\r\n * @param right - The second `AggregateQuerySnapshot` to compare.\r\n *\r\n * @returns `true` if the objects are \"equal\", as defined above, or `false`\r\n * otherwise.\r\n */\r\nfunction aggregateQuerySnapshotEqual(left, right) {\r\n return (queryEqual(left.query, right.query) && deepEqual(left.data(), right.data()));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Calculates the number of documents in the result set of the given query,\r\n * without actually downloading the documents.\r\n *\r\n * Using this function to count the documents is efficient because only the\r\n * final count, not the documents' data, is downloaded. This function can even\r\n * count the documents if the result set would be prohibitively large to\r\n * download entirely (e.g. thousands of documents).\r\n *\r\n * The result received from the server is presented, unaltered, without\r\n * considering any local state. That is, documents in the local cache are not\r\n * taken into consideration, neither are local modifications not yet\r\n * synchronized with the server. Previously-downloaded results, if any, are not\r\n * used: every request using this source necessarily involves a round trip to\r\n * the server.\r\n *\r\n * @param query - The query whose result set size to calculate.\r\n * @returns A Promise that will be resolved with the count; the count can be\r\n * retrieved from `snapshot.data().count`, where `snapshot` is the\r\n * `AggregateQuerySnapshot` to which the returned Promise resolves.\r\n */\r\nfunction getCountFromServer(query) {\r\n const firestore = cast(query.firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n const userDataWriter = new ExpUserDataWriter(firestore);\r\n return firestoreClientRunCountQuery(client, query, userDataWriter);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_TRANSACTION_OPTIONS = {\r\n maxAttempts: 5\r\n};\r\nfunction validateTransactionOptions(options) {\r\n if (options.maxAttempts < 1) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Max attempts must be at least 1');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A write batch, used to perform multiple writes as a single atomic unit.\r\n *\r\n * A `WriteBatch` object can be acquired by calling {@link writeBatch}. It\r\n * provides methods for adding writes to the write batch. None of the writes\r\n * will be committed (or visible locally) until {@link WriteBatch.commit} is\r\n * called.\r\n */\r\nclass WriteBatch {\r\n /** @hideconstructor */\r\n constructor(_firestore, _commitHandler) {\r\n this._firestore = _firestore;\r\n this._commitHandler = _commitHandler;\r\n this._mutations = [];\r\n this._committed = false;\r\n this._dataReader = newUserDataReader(_firestore);\r\n }\r\n set(documentRef, data, options) {\r\n this._verifyNotCommitted();\r\n const ref = validateReference(documentRef, this._firestore);\r\n const convertedValue = applyFirestoreDataConverter(ref.converter, data, options);\r\n const parsed = parseSetData(this._dataReader, 'WriteBatch.set', ref._key, convertedValue, ref.converter !== null, options);\r\n this._mutations.push(parsed.toMutation(ref._key, Precondition.none()));\r\n return this;\r\n }\r\n update(documentRef, fieldOrUpdateData, value, ...moreFieldsAndValues) {\r\n this._verifyNotCommitted();\r\n const ref = validateReference(documentRef, this._firestore);\r\n // For Compat types, we have to \"extract\" the underlying types before\r\n // performing validation.\r\n fieldOrUpdateData = getModularInstance(fieldOrUpdateData);\r\n let parsed;\r\n if (typeof fieldOrUpdateData === 'string' ||\r\n fieldOrUpdateData instanceof FieldPath) {\r\n parsed = parseUpdateVarargs(this._dataReader, 'WriteBatch.update', ref._key, fieldOrUpdateData, value, moreFieldsAndValues);\r\n }\r\n else {\r\n parsed = parseUpdateData(this._dataReader, 'WriteBatch.update', ref._key, fieldOrUpdateData);\r\n }\r\n this._mutations.push(parsed.toMutation(ref._key, Precondition.exists(true)));\r\n return this;\r\n }\r\n /**\r\n * Deletes the document referred to by the provided {@link DocumentReference}.\r\n *\r\n * @param documentRef - A reference to the document to be deleted.\r\n * @returns This `WriteBatch` instance. Used for chaining method calls.\r\n */\r\n delete(documentRef) {\r\n this._verifyNotCommitted();\r\n const ref = validateReference(documentRef, this._firestore);\r\n this._mutations = this._mutations.concat(new DeleteMutation(ref._key, Precondition.none()));\r\n return this;\r\n }\r\n /**\r\n * Commits all of the writes in this write batch as a single atomic unit.\r\n *\r\n * The result of these writes will only be reflected in document reads that\r\n * occur after the returned promise resolves. If the client is offline, the\r\n * write fails. If you would like to see local modifications or buffer writes\r\n * until the client is online, use the full Firestore SDK.\r\n *\r\n * @returns A `Promise` resolved once all of the writes in the batch have been\r\n * successfully written to the backend as an atomic unit (note that it won't\r\n * resolve while you're offline).\r\n */\r\n commit() {\r\n this._verifyNotCommitted();\r\n this._committed = true;\r\n if (this._mutations.length > 0) {\r\n return this._commitHandler(this._mutations);\r\n }\r\n return Promise.resolve();\r\n }\r\n _verifyNotCommitted() {\r\n if (this._committed) {\r\n throw new FirestoreError(Code.FAILED_PRECONDITION, 'A write batch can no longer be used after commit() ' +\r\n 'has been called.');\r\n }\r\n }\r\n}\r\nfunction validateReference(documentRef, firestore) {\r\n documentRef = getModularInstance(documentRef);\r\n if (documentRef.firestore !== firestore) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Provided document reference is from a different Firestore instance.');\r\n }\r\n else {\r\n return documentRef;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// TODO(mrschmidt) Consider using `BaseTransaction` as the base class in the\r\n// legacy SDK.\r\n/**\r\n * A reference to a transaction.\r\n *\r\n * The `Transaction` object passed to a transaction's `updateFunction` provides\r\n * the methods to read and write data within the transaction context. See\r\n * {@link runTransaction}.\r\n */\r\nclass Transaction$1 {\r\n /** @hideconstructor */\r\n constructor(_firestore, _transaction) {\r\n this._firestore = _firestore;\r\n this._transaction = _transaction;\r\n this._dataReader = newUserDataReader(_firestore);\r\n }\r\n /**\r\n * Reads the document referenced by the provided {@link DocumentReference}.\r\n *\r\n * @param documentRef - A reference to the document to be read.\r\n * @returns A `DocumentSnapshot` with the read data.\r\n */\r\n get(documentRef) {\r\n const ref = validateReference(documentRef, this._firestore);\r\n const userDataWriter = new LiteUserDataWriter(this._firestore);\r\n return this._transaction.lookup([ref._key]).then(docs => {\r\n if (!docs || docs.length !== 1) {\r\n return fail();\r\n }\r\n const doc = docs[0];\r\n if (doc.isFoundDocument()) {\r\n return new DocumentSnapshot$1(this._firestore, userDataWriter, doc.key, doc, ref.converter);\r\n }\r\n else if (doc.isNoDocument()) {\r\n return new DocumentSnapshot$1(this._firestore, userDataWriter, ref._key, null, ref.converter);\r\n }\r\n else {\r\n throw fail();\r\n }\r\n });\r\n }\r\n set(documentRef, value, options) {\r\n const ref = validateReference(documentRef, this._firestore);\r\n const convertedValue = applyFirestoreDataConverter(ref.converter, value, options);\r\n const parsed = parseSetData(this._dataReader, 'Transaction.set', ref._key, convertedValue, ref.converter !== null, options);\r\n this._transaction.set(ref._key, parsed);\r\n return this;\r\n }\r\n update(documentRef, fieldOrUpdateData, value, ...moreFieldsAndValues) {\r\n const ref = validateReference(documentRef, this._firestore);\r\n // For Compat types, we have to \"extract\" the underlying types before\r\n // performing validation.\r\n fieldOrUpdateData = getModularInstance(fieldOrUpdateData);\r\n let parsed;\r\n if (typeof fieldOrUpdateData === 'string' ||\r\n fieldOrUpdateData instanceof FieldPath) {\r\n parsed = parseUpdateVarargs(this._dataReader, 'Transaction.update', ref._key, fieldOrUpdateData, value, moreFieldsAndValues);\r\n }\r\n else {\r\n parsed = parseUpdateData(this._dataReader, 'Transaction.update', ref._key, fieldOrUpdateData);\r\n }\r\n this._transaction.update(ref._key, parsed);\r\n return this;\r\n }\r\n /**\r\n * Deletes the document referred to by the provided {@link DocumentReference}.\r\n *\r\n * @param documentRef - A reference to the document to be deleted.\r\n * @returns This `Transaction` instance. Used for chaining method calls.\r\n */\r\n delete(documentRef) {\r\n const ref = validateReference(documentRef, this._firestore);\r\n this._transaction.delete(ref._key);\r\n return this;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A reference to a transaction.\r\n *\r\n * The `Transaction` object passed to a transaction's `updateFunction` provides\r\n * the methods to read and write data within the transaction context. See\r\n * {@link runTransaction}.\r\n */\r\nclass Transaction extends Transaction$1 {\r\n // This class implements the same logic as the Transaction API in the Lite SDK\r\n // but is subclassed in order to return its own DocumentSnapshot types.\r\n /** @hideconstructor */\r\n constructor(_firestore, _transaction) {\r\n super(_firestore, _transaction);\r\n this._firestore = _firestore;\r\n }\r\n /**\r\n * Reads the document referenced by the provided {@link DocumentReference}.\r\n *\r\n * @param documentRef - A reference to the document to be read.\r\n * @returns A `DocumentSnapshot` with the read data.\r\n */\r\n get(documentRef) {\r\n const ref = validateReference(documentRef, this._firestore);\r\n const userDataWriter = new ExpUserDataWriter(this._firestore);\r\n return super\r\n .get(documentRef)\r\n .then(liteDocumentSnapshot => new DocumentSnapshot(this._firestore, userDataWriter, ref._key, liteDocumentSnapshot._document, new SnapshotMetadata(\r\n /* hasPendingWrites= */ false, \r\n /* fromCache= */ false), ref.converter));\r\n }\r\n}\r\n/**\r\n * Executes the given `updateFunction` and then attempts to commit the changes\r\n * applied within the transaction. If any document read within the transaction\r\n * has changed, Cloud Firestore retries the `updateFunction`. If it fails to\r\n * commit after 5 attempts, the transaction fails.\r\n *\r\n * The maximum number of writes allowed in a single transaction is 500.\r\n *\r\n * @param firestore - A reference to the Firestore database to run this\r\n * transaction against.\r\n * @param updateFunction - The function to execute within the transaction\r\n * context.\r\n * @param options - An options object to configure maximum number of attempts to\r\n * commit.\r\n * @returns If the transaction completed successfully or was explicitly aborted\r\n * (the `updateFunction` returned a failed promise), the promise returned by the\r\n * `updateFunction `is returned here. Otherwise, if the transaction failed, a\r\n * rejected promise with the corresponding failure error is returned.\r\n */\r\nfunction runTransaction(firestore, updateFunction, options) {\r\n firestore = cast(firestore, Firestore);\r\n const optionsWithDefaults = Object.assign(Object.assign({}, DEFAULT_TRANSACTION_OPTIONS), options);\r\n validateTransactionOptions(optionsWithDefaults);\r\n const client = ensureFirestoreConfigured(firestore);\r\n return firestoreClientTransaction(client, internalTransaction => updateFunction(new Transaction(firestore, internalTransaction)), optionsWithDefaults);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a sentinel for use with {@link @firebase/firestore/lite#(updateDoc:1)} or\r\n * {@link @firebase/firestore/lite#(setDoc:1)} with `{merge: true}` to mark a field for deletion.\r\n */\r\nfunction deleteField() {\r\n return new DeleteFieldValueImpl('deleteField');\r\n}\r\n/**\r\n * Returns a sentinel used with {@link @firebase/firestore/lite#(setDoc:1)} or {@link @firebase/firestore/lite#(updateDoc:1)} to\r\n * include a server-generated timestamp in the written data.\r\n */\r\nfunction serverTimestamp() {\r\n return new ServerTimestampFieldValueImpl('serverTimestamp');\r\n}\r\n/**\r\n * Returns a special value that can be used with {@link @firebase/firestore/lite#(setDoc:1)} or {@link\r\n * @firebase/firestore/lite#(updateDoc:1)} that tells the server to union the given elements with any array\r\n * value that already exists on the server. Each specified element that doesn't\r\n * already exist in the array will be added to the end. If the field being\r\n * modified is not already an array it will be overwritten with an array\r\n * containing exactly the specified elements.\r\n *\r\n * @param elements - The elements to union into the array.\r\n * @returns The `FieldValue` sentinel for use in a call to `setDoc()` or\r\n * `updateDoc()`.\r\n */\r\nfunction arrayUnion(...elements) {\r\n // NOTE: We don't actually parse the data until it's used in set() or\r\n // update() since we'd need the Firestore instance to do this.\r\n return new ArrayUnionFieldValueImpl('arrayUnion', elements);\r\n}\r\n/**\r\n * Returns a special value that can be used with {@link (setDoc:1)} or {@link\r\n * updateDoc:1} that tells the server to remove the given elements from any\r\n * array value that already exists on the server. All instances of each element\r\n * specified will be removed from the array. If the field being modified is not\r\n * already an array it will be overwritten with an empty array.\r\n *\r\n * @param elements - The elements to remove from the array.\r\n * @returns The `FieldValue` sentinel for use in a call to `setDoc()` or\r\n * `updateDoc()`\r\n */\r\nfunction arrayRemove(...elements) {\r\n // NOTE: We don't actually parse the data until it's used in set() or\r\n // update() since we'd need the Firestore instance to do this.\r\n return new ArrayRemoveFieldValueImpl('arrayRemove', elements);\r\n}\r\n/**\r\n * Returns a special value that can be used with {@link @firebase/firestore/lite#(setDoc:1)} or {@link\r\n * @firebase/firestore/lite#(updateDoc:1)} that tells the server to increment the field's current value by\r\n * the given value.\r\n *\r\n * If either the operand or the current field value uses floating point\r\n * precision, all arithmetic follows IEEE 754 semantics. If both values are\r\n * integers, values outside of JavaScript's safe number range\r\n * (`Number.MIN_SAFE_INTEGER` to `Number.MAX_SAFE_INTEGER`) are also subject to\r\n * precision loss. Furthermore, once processed by the Firestore backend, all\r\n * integer operations are capped between -2^63 and 2^63-1.\r\n *\r\n * If the current field value is not of type `number`, or if the field does not\r\n * yet exist, the transformation sets the field to the given value.\r\n *\r\n * @param n - The value to increment by.\r\n * @returns The `FieldValue` sentinel for use in a call to `setDoc()` or\r\n * `updateDoc()`\r\n */\r\nfunction increment(n) {\r\n return new NumericIncrementFieldValueImpl('increment', n);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Creates a write batch, used for performing multiple writes as a single\r\n * atomic operation. The maximum number of writes allowed in a single {@link WriteBatch}\r\n * is 500.\r\n *\r\n * Unlike transactions, write batches are persisted offline and therefore are\r\n * preferable when you don't need to condition your writes on read data.\r\n *\r\n * @returns A {@link WriteBatch} that can be used to atomically execute multiple\r\n * writes.\r\n */\r\nfunction writeBatch(firestore) {\r\n firestore = cast(firestore, Firestore);\r\n ensureFirestoreConfigured(firestore);\r\n return new WriteBatch(firestore, mutations => executeWrite(firestore, mutations));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction setIndexConfiguration(firestore, jsonOrConfiguration) {\r\n var _a;\r\n firestore = cast(firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n // PORTING NOTE: We don't return an error if the user has not enabled\r\n // persistence since `enableIndexeddbPersistence()` can fail on the Web.\r\n if (!((_a = client.offlineComponents) === null || _a === void 0 ? void 0 : _a.indexBackfillerScheduler)) {\r\n logWarn('Cannot enable indexes when persistence is disabled');\r\n return Promise.resolve();\r\n }\r\n const parsedIndexes = parseIndexes(jsonOrConfiguration);\r\n return getLocalStore(client).then(localStore => localStoreConfigureFieldIndexes(localStore, parsedIndexes));\r\n}\r\nfunction parseIndexes(jsonOrConfiguration) {\r\n const indexConfiguration = typeof jsonOrConfiguration === 'string'\r\n ? tryParseJson(jsonOrConfiguration)\r\n : jsonOrConfiguration;\r\n const parsedIndexes = [];\r\n if (Array.isArray(indexConfiguration.indexes)) {\r\n for (const index of indexConfiguration.indexes) {\r\n const collectionGroup = tryGetString(index, 'collectionGroup');\r\n const segments = [];\r\n if (Array.isArray(index.fields)) {\r\n for (const field of index.fields) {\r\n const fieldPathString = tryGetString(field, 'fieldPath');\r\n const fieldPath = fieldPathFromDotSeparatedString('setIndexConfiguration', fieldPathString);\r\n if (field.arrayConfig === 'CONTAINS') {\r\n segments.push(new IndexSegment(fieldPath, 2 /* IndexKind.CONTAINS */));\r\n }\r\n else if (field.order === 'ASCENDING') {\r\n segments.push(new IndexSegment(fieldPath, 0 /* IndexKind.ASCENDING */));\r\n }\r\n else if (field.order === 'DESCENDING') {\r\n segments.push(new IndexSegment(fieldPath, 1 /* IndexKind.DESCENDING */));\r\n }\r\n }\r\n }\r\n parsedIndexes.push(new FieldIndex(FieldIndex.UNKNOWN_ID, collectionGroup, segments, IndexState.empty()));\r\n }\r\n }\r\n return parsedIndexes;\r\n}\r\nfunction tryParseJson(json) {\r\n try {\r\n return JSON.parse(json);\r\n }\r\n catch (e) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Failed to parse JSON: ' + (e === null || e === void 0 ? void 0 : e.message));\r\n }\r\n}\r\nfunction tryGetString(data, property) {\r\n if (typeof data[property] !== 'string') {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Missing string value for: ' + property);\r\n }\r\n return data[property];\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nregisterFirestore('node');\n\nexport { AbstractUserDataWriter, AggregateField, AggregateQuerySnapshot, Bytes, CACHE_SIZE_UNLIMITED, CollectionReference, DocumentReference, DocumentSnapshot, FieldPath, FieldValue, Firestore, FirestoreError, GeoPoint, LoadBundleTask, Query, QueryCompositeFilterConstraint, QueryConstraint, QueryDocumentSnapshot, QueryEndAtConstraint, QueryFieldFilterConstraint, QueryLimitConstraint, QueryOrderByConstraint, QuerySnapshot, QueryStartAtConstraint, SnapshotMetadata, Timestamp, Transaction, WriteBatch, DatabaseId as _DatabaseId, DocumentKey as _DocumentKey, EmptyAppCheckTokenProvider as _EmptyAppCheckTokenProvider, EmptyAuthCredentialsProvider as _EmptyAuthCredentialsProvider, FieldPath$1 as _FieldPath, cast as _cast, debugAssert as _debugAssert, isBase64Available as _isBase64Available, logWarn as _logWarn, validateIsNotUsedTogether as _validateIsNotUsedTogether, addDoc, aggregateQuerySnapshotEqual, and, arrayRemove, arrayUnion, clearIndexedDbPersistence, collection, collectionGroup, connectFirestoreEmulator, deleteDoc, deleteField, disableNetwork, doc, documentId, enableIndexedDbPersistence, enableMultiTabIndexedDbPersistence, enableNetwork, endAt, endBefore, ensureFirestoreConfigured, executeWrite, getCountFromServer, getDoc, getDocFromCache, getDocFromServer, getDocs, getDocsFromCache, getDocsFromServer, getFirestore, increment, initializeFirestore, limit, limitToLast, loadBundle, namedQuery, onSnapshot, onSnapshotsInSync, or, orderBy, query, queryEqual, refEqual, runTransaction, serverTimestamp, setDoc, setIndexConfiguration, setLogLevel, snapshotEqual, startAfter, startAt, terminate, updateDoc, waitForPendingWrites, where, writeBatch };\n//# sourceMappingURL=index.node.mjs.map\n"],"names":[],"mappings":"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AW,EAAE;AACb,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAI,GAAG;AACb;AACA;AACA;AACA,IAAI,EAAE,EAAE,IAAI;AACZ;AACA,IAAI,SAAS,EAAE,WAAW;AAC1B;AACA,IAAI,OAAO,EAAE,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,EAAE,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,EAAE,mBAAmB;AAC1C;AACA,IAAI,SAAS,EAAE,WAAW;AAC1B;AACA;AACA;AACA;AACA,IAAI,cAAc,EAAE,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,EAAE,mBAAmB;AAC1C;AACA;AACA;AACA;AACA,IAAI,eAAe,EAAE,iBAAiB;AACtC;AACA;AACA;AACA;AACA,IAAI,kBAAkB,EAAE,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,EAAE,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,EAAE,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,EAAE,cAAc;AAChC;AACA,IAAI,aAAa,EAAE,eAAe;AAClC;AACA;AACA;AACA;AACA,IAAI,QAAQ,EAAE,UAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,EAAE,aAAa;AAC9B;AACA,IAAI,SAAS,EAAE,WAAW;AAC1B,CAAC,CAAC;AACF;AACA,MAAM,cAAc,SAAS,aAAa,CAAC;AAC3C;AACA,IAAI,WAAW;AACf;AACA;AACA;AACA,IAAI,IAAI;AACR;AACA;AACA;AACA,I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"}