UNPKG

2.12 MBSource Map (JSON)View Raw
1{"version":3,"file":"index.node.mjs","sources":["index.node.mjs"],"sourcesContent":["import { _getProvider, getApp, _removeServiceInstance, _registerComponent, registerVersion, SDK_VERSION as SDK_VERSION$1 } from '@firebase/app';\nimport { Component } from '@firebase/component';\nimport { Logger, LogLevel } from '@firebase/logger';\nimport { inspect, TextEncoder, TextDecoder } from 'util';\nimport { FirebaseError, getUA, isIndexedDBAvailable, isSafari, createMockUserToken, getModularInstance, deepEqual, getDefaultEmulatorHostnameAndPort } from '@firebase/util';\nimport { randomBytes as randomBytes$1 } from 'crypto';\nimport * as grpc from '@grpc/grpc-js';\nimport * as protoLoader from '@grpc/proto-loader';\n\nconst name = \"@firebase/firestore\";\nconst version$1 = \"3.9.0\";\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 * Simple wrapper around a nullable UID. Mostly exists to make code more\r\n * readable.\r\n */\r\nclass User {\r\n constructor(uid) {\r\n this.uid = uid;\r\n }\r\n isAuthenticated() {\r\n return this.uid != null;\r\n }\r\n /**\r\n * Returns a key representing this user, suitable for inclusion in a\r\n * dictionary.\r\n */\r\n toKey() {\r\n if (this.isAuthenticated()) {\r\n return 'uid:' + this.uid;\r\n }\r\n else {\r\n return 'anonymous-user';\r\n }\r\n }\r\n isEqual(otherUser) {\r\n return otherUser.uid === this.uid;\r\n }\r\n}\r\n/** A user with a null UID. */\r\nUser.UNAUTHENTICATED = new User(null);\r\n// TODO(mikelehen): Look into getting a proper uid-equivalent for\r\n// non-FirebaseAuth providers.\r\nUser.GOOGLE_CREDENTIALS = new User('google-credentials-uid');\r\nUser.FIRST_PARTY = new User('first-party-uid');\r\nUser.MOCK_USER = new User('mock-user');\n\nconst version = \"9.18.0\";\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\nlet SDK_VERSION = version;\r\nfunction setSDKVersion(version) {\r\n SDK_VERSION = version;\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/** Formats an object as a JSON string, suitable for logging. */\r\nfunction formatJSON(value) {\r\n // util.inspect() results in much more readable output than JSON.stringify()\r\n return inspect(value, { depth: 100 });\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 logClient = new Logger('@firebase/firestore');\r\n// Helper methods are needed because variables can't be exported as read/write\r\nfunction getLogLevel() {\r\n return logClient.logLevel;\r\n}\r\n/**\r\n * Sets the verbosity of Cloud Firestore logs (debug, error, or silent).\r\n *\r\n * @param logLevel - The verbosity you set for activity and error logging. Can\r\n * be any of the following values:\r\n *\r\n * <ul>\r\n * <li>`debug` for the most verbose logging level, primarily for\r\n * debugging.</li>\r\n * <li>`error` to log errors only.</li>\r\n * <li><code>`silent` to turn off logging.</li>\r\n * </ul>\r\n */\r\nfunction setLogLevel(logLevel) {\r\n logClient.setLogLevel(logLevel);\r\n}\r\nfunction logDebug(msg, ...obj) {\r\n if (logClient.logLevel <= LogLevel.DEBUG) {\r\n const args = obj.map(argToString);\r\n logClient.debug(`Firestore (${SDK_VERSION}): ${msg}`, ...args);\r\n }\r\n}\r\nfunction logError(msg, ...obj) {\r\n if (logClient.logLevel <= LogLevel.ERROR) {\r\n const args = obj.map(argToString);\r\n logClient.error(`Firestore (${SDK_VERSION}): ${msg}`, ...args);\r\n }\r\n}\r\n/**\r\n * @internal\r\n */\r\nfunction logWarn(msg, ...obj) {\r\n if (logClient.logLevel <= LogLevel.WARN) {\r\n const args = obj.map(argToString);\r\n logClient.warn(`Firestore (${SDK_VERSION}): ${msg}`, ...args);\r\n }\r\n}\r\n/**\r\n * Converts an additional log parameter to a string representation.\r\n */\r\nfunction argToString(obj) {\r\n if (typeof obj === 'string') {\r\n return obj;\r\n }\r\n else {\r\n try {\r\n return formatJSON(obj);\r\n }\r\n catch (e) {\r\n // Converting to JSON failed, just log the object directly\r\n return obj;\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 * Unconditionally fails, throwing an Error with the given message.\r\n * Messages are stripped in production builds.\r\n *\r\n * Returns `never` and can be used in expressions:\r\n * @example\r\n * let futureVar = fail('not implemented yet');\r\n */\r\nfunction fail(failure = 'Unexpected state') {\r\n // Log the failure in addition to throw an exception, just in case the\r\n // exception is swallowed.\r\n const message = `FIRESTORE (${SDK_VERSION}) INTERNAL ASSERTION FAILED: ` + failure;\r\n logError(message);\r\n // NOTE: We don't use FirestoreError here because these are internal failures\r\n // that cannot be handled by the user. (Also it would create a circular\r\n // dependency between the error and assert modules which doesn't work.)\r\n throw new Error(message);\r\n}\r\n/**\r\n * Fails if the given assertion condition is false, throwing an Error with the\r\n * given message if it did.\r\n *\r\n * Messages are stripped in production builds.\r\n */\r\nfunction hardAssert(assertion, message) {\r\n if (!assertion) {\r\n fail();\r\n }\r\n}\r\n/**\r\n * Fails if the given assertion condition is false, throwing an Error with the\r\n * given message if it did.\r\n *\r\n * The code of callsites invoking this function are stripped out in production\r\n * builds. Any side-effects of code within the debugAssert() invocation will not\r\n * happen in this case.\r\n *\r\n * @internal\r\n */\r\nfunction debugAssert(assertion, message) {\r\n if (!assertion) {\r\n fail();\r\n }\r\n}\r\n/**\r\n * Casts `obj` to `T`. In non-production builds, verifies that `obj` is an\r\n * instance of `T` before casting.\r\n */\r\nfunction debugCast(obj, \r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconstructor) {\r\n return obj;\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 Code = {\r\n // Causes are copied from:\r\n // https://github.com/grpc/grpc/blob/bceec94ea4fc5f0085d81235d8e1c06798dc341a/include/grpc%2B%2B/impl/codegen/status_code_enum.h\r\n /** Not an error; returned on success. */\r\n OK: 'ok',\r\n /** The operation was cancelled (typically by the caller). */\r\n CANCELLED: 'cancelled',\r\n /** Unknown error or an error from a different error domain. */\r\n UNKNOWN: 'unknown',\r\n /**\r\n * Client specified an invalid argument. Note that this differs from\r\n * FAILED_PRECONDITION. INVALID_ARGUMENT indicates arguments that are\r\n * problematic regardless of the state of the system (e.g., a malformed file\r\n * name).\r\n */\r\n INVALID_ARGUMENT: 'invalid-argument',\r\n /**\r\n * Deadline expired before operation could complete. For operations that\r\n * change the state of the system, this error may be returned even if the\r\n * operation has completed successfully. For example, a successful response\r\n * from a server could have been delayed long enough for the deadline to\r\n * expire.\r\n */\r\n DEADLINE_EXCEEDED: 'deadline-exceeded',\r\n /** Some requested entity (e.g., file or directory) was not found. */\r\n NOT_FOUND: 'not-found',\r\n /**\r\n * Some entity that we attempted to create (e.g., file or directory) already\r\n * exists.\r\n */\r\n ALREADY_EXISTS: 'already-exists',\r\n /**\r\n * The caller does not have permission to execute the specified operation.\r\n * PERMISSION_DENIED must not be used for rejections caused by exhausting\r\n * some resource (use RESOURCE_EXHAUSTED instead for those errors).\r\n * PERMISSION_DENIED must not be used if the caller can not be identified\r\n * (use UNAUTHENTICATED instead for those errors).\r\n */\r\n PERMISSION_DENIED: 'permission-denied',\r\n /**\r\n * The request does not have valid authentication credentials for the\r\n * operation.\r\n */\r\n UNAUTHENTICATED: 'unauthenticated',\r\n /**\r\n * Some resource has been exhausted, perhaps a per-user quota, or perhaps the\r\n * entire file system is out of space.\r\n */\r\n RESOURCE_EXHAUSTED: 'resource-exhausted',\r\n /**\r\n * Operation was rejected because the system is not in a state required for\r\n * the operation's execution. For example, directory to be deleted may be\r\n * non-empty, an rmdir operation is applied to a non-directory, etc.\r\n *\r\n * A litmus test that may help a service implementor in deciding\r\n * between FAILED_PRECONDITION, ABORTED, and UNAVAILABLE:\r\n * (a) Use UNAVAILABLE if the client can retry just the failing call.\r\n * (b) Use ABORTED if the client should retry at a higher-level\r\n * (e.g., restarting a read-modify-write sequence).\r\n * (c) Use FAILED_PRECONDITION if the client should not retry until\r\n * the system state has been explicitly fixed. E.g., if an \"rmdir\"\r\n * fails because the directory is non-empty, FAILED_PRECONDITION\r\n * should be returned since the client should not retry unless\r\n * they have first fixed up the directory by deleting files from it.\r\n * (d) Use FAILED_PRECONDITION if the client performs conditional\r\n * REST Get/Update/Delete on a resource and the resource on the\r\n * server does not match the condition. E.g., conflicting\r\n * read-modify-write on the same resource.\r\n */\r\n FAILED_PRECONDITION: 'failed-precondition',\r\n /**\r\n * The operation was aborted, typically due to a concurrency issue like\r\n * sequencer check failures, transaction aborts, etc.\r\n *\r\n * See litmus test above for deciding between FAILED_PRECONDITION, ABORTED,\r\n * and UNAVAILABLE.\r\n */\r\n ABORTED: 'aborted',\r\n /**\r\n * Operation was attempted past the valid range. E.g., seeking or reading\r\n * past end of file.\r\n *\r\n * Unlike INVALID_ARGUMENT, this error indicates a problem that may be fixed\r\n * if the system state changes. For example, a 32-bit file system will\r\n * generate INVALID_ARGUMENT if asked to read at an offset that is not in the\r\n * range [0,2^32-1], but it will generate OUT_OF_RANGE if asked to read from\r\n * an offset past the current file size.\r\n *\r\n * There is a fair bit of overlap between FAILED_PRECONDITION and\r\n * OUT_OF_RANGE. We recommend using OUT_OF_RANGE (the more specific error)\r\n * when it applies so that callers who are iterating through a space can\r\n * easily look for an OUT_OF_RANGE error to detect when they are done.\r\n */\r\n OUT_OF_RANGE: 'out-of-range',\r\n /** Operation is not implemented or not supported/enabled in this service. */\r\n UNIMPLEMENTED: 'unimplemented',\r\n /**\r\n * Internal errors. Means some invariants expected by underlying System has\r\n * been broken. If you see one of these errors, Something is very broken.\r\n */\r\n INTERNAL: 'internal',\r\n /**\r\n * The service is currently unavailable. This is a most likely a transient\r\n * condition and may be corrected by retrying with a backoff.\r\n *\r\n * See litmus test above for deciding between FAILED_PRECONDITION, ABORTED,\r\n * and UNAVAILABLE.\r\n */\r\n UNAVAILABLE: 'unavailable',\r\n /** Unrecoverable data loss or corruption. */\r\n DATA_LOSS: 'data-loss'\r\n};\r\n/** An error returned by a Firestore operation. */\r\nclass FirestoreError extends FirebaseError {\r\n /** @hideconstructor */\r\n constructor(\r\n /**\r\n * The backend error code associated with this error.\r\n */\r\n code, \r\n /**\r\n * A custom error description.\r\n */\r\n message) {\r\n super(code, message);\r\n this.code = code;\r\n this.message = message;\r\n // HACK: We write a toString property directly because Error is not a real\r\n // class and so inheritance does not work correctly. We could alternatively\r\n // do the same \"back-door inheritance\" trick that FirebaseError does.\r\n this.toString = () => `${this.name}: [code=${this.code}]: ${this.message}`;\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 Deferred {\r\n constructor() {\r\n this.promise = new Promise((resolve, reject) => {\r\n this.resolve = resolve;\r\n this.reject = reject;\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\nclass OAuthToken {\r\n constructor(value, user) {\r\n this.user = user;\r\n this.type = 'OAuth';\r\n this.headers = new Map();\r\n this.headers.set('Authorization', `Bearer ${value}`);\r\n }\r\n}\r\n/**\r\n * A CredentialsProvider that always yields an empty token.\r\n * @internal\r\n */\r\nclass EmptyAuthCredentialsProvider {\r\n getToken() {\r\n return Promise.resolve(null);\r\n }\r\n invalidateToken() { }\r\n start(asyncQueue, changeListener) {\r\n // Fire with initial user.\r\n asyncQueue.enqueueRetryable(() => changeListener(User.UNAUTHENTICATED));\r\n }\r\n shutdown() { }\r\n}\r\n/**\r\n * A CredentialsProvider that always returns a constant token. Used for\r\n * emulator token mocking.\r\n */\r\nclass EmulatorAuthCredentialsProvider {\r\n constructor(token) {\r\n this.token = token;\r\n /**\r\n * Stores the listener registered with setChangeListener()\r\n * This isn't actually necessary since the UID never changes, but we use this\r\n * to verify the listen contract is adhered to in tests.\r\n */\r\n this.changeListener = null;\r\n }\r\n getToken() {\r\n return Promise.resolve(this.token);\r\n }\r\n invalidateToken() { }\r\n start(asyncQueue, changeListener) {\r\n this.changeListener = changeListener;\r\n // Fire with initial user.\r\n asyncQueue.enqueueRetryable(() => changeListener(this.token.user));\r\n }\r\n shutdown() {\r\n this.changeListener = null;\r\n }\r\n}\r\nclass FirebaseAuthCredentialsProvider {\r\n constructor(authProvider) {\r\n this.authProvider = authProvider;\r\n /** Tracks the current User. */\r\n this.currentUser = User.UNAUTHENTICATED;\r\n /**\r\n * Counter used to detect if the token changed while a getToken request was\r\n * outstanding.\r\n */\r\n this.tokenCounter = 0;\r\n this.forceRefresh = false;\r\n this.auth = null;\r\n }\r\n start(asyncQueue, changeListener) {\r\n let lastTokenId = this.tokenCounter;\r\n // A change listener that prevents double-firing for the same token change.\r\n const guardedChangeListener = user => {\r\n if (this.tokenCounter !== lastTokenId) {\r\n lastTokenId = this.tokenCounter;\r\n return changeListener(user);\r\n }\r\n else {\r\n return Promise.resolve();\r\n }\r\n };\r\n // A promise that can be waited on to block on the next token change.\r\n // This promise is re-created after each change.\r\n let nextToken = new Deferred();\r\n this.tokenListener = () => {\r\n this.tokenCounter++;\r\n this.currentUser = this.getUser();\r\n nextToken.resolve();\r\n nextToken = new Deferred();\r\n asyncQueue.enqueueRetryable(() => guardedChangeListener(this.currentUser));\r\n };\r\n const awaitNextToken = () => {\r\n const currentTokenAttempt = nextToken;\r\n asyncQueue.enqueueRetryable(async () => {\r\n await currentTokenAttempt.promise;\r\n await guardedChangeListener(this.currentUser);\r\n });\r\n };\r\n const registerAuth = (auth) => {\r\n logDebug('FirebaseAuthCredentialsProvider', 'Auth detected');\r\n this.auth = auth;\r\n this.auth.addAuthTokenListener(this.tokenListener);\r\n awaitNextToken();\r\n };\r\n this.authProvider.onInit(auth => registerAuth(auth));\r\n // Our users can initialize Auth right after Firestore, so we give it\r\n // a chance to register itself with the component framework before we\r\n // determine whether to start up in unauthenticated mode.\r\n setTimeout(() => {\r\n if (!this.auth) {\r\n const auth = this.authProvider.getImmediate({ optional: true });\r\n if (auth) {\r\n registerAuth(auth);\r\n }\r\n else {\r\n // If auth is still not available, proceed with `null` user\r\n logDebug('FirebaseAuthCredentialsProvider', 'Auth not yet detected');\r\n nextToken.resolve();\r\n nextToken = new Deferred();\r\n }\r\n }\r\n }, 0);\r\n awaitNextToken();\r\n }\r\n getToken() {\r\n // Take note of the current value of the tokenCounter so that this method\r\n // can fail (with an ABORTED error) if there is a token change while the\r\n // request is outstanding.\r\n const initialTokenCounter = this.tokenCounter;\r\n const forceRefresh = this.forceRefresh;\r\n this.forceRefresh = false;\r\n if (!this.auth) {\r\n return Promise.resolve(null);\r\n }\r\n return this.auth.getToken(forceRefresh).then(tokenData => {\r\n // Cancel the request since the token changed while the request was\r\n // outstanding so the response is potentially for a previous user (which\r\n // user, we can't be sure).\r\n if (this.tokenCounter !== initialTokenCounter) {\r\n logDebug('FirebaseAuthCredentialsProvider', 'getToken aborted due to token change.');\r\n return this.getToken();\r\n }\r\n else {\r\n if (tokenData) {\r\n hardAssert(typeof tokenData.accessToken === 'string');\r\n return new OAuthToken(tokenData.accessToken, this.currentUser);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n });\r\n }\r\n invalidateToken() {\r\n this.forceRefresh = true;\r\n }\r\n shutdown() {\r\n if (this.auth) {\r\n this.auth.removeAuthTokenListener(this.tokenListener);\r\n }\r\n }\r\n // Auth.getUid() can return null even with a user logged in. It is because\r\n // getUid() is synchronous, but the auth code populating Uid is asynchronous.\r\n // This method should only be called in the AuthTokenListener callback\r\n // to guarantee to get the actual user.\r\n getUser() {\r\n const currentUid = this.auth && this.auth.getUid();\r\n hardAssert(currentUid === null || typeof currentUid === 'string');\r\n return new User(currentUid);\r\n }\r\n}\r\n/*\r\n * FirstPartyToken provides a fresh token each time its value\r\n * is requested, because if the token is too old, requests will be rejected.\r\n * Technically this may no longer be necessary since the SDK should gracefully\r\n * recover from unauthenticated errors (see b/33147818 for context), but it's\r\n * safer to keep the implementation as-is.\r\n */\r\nclass FirstPartyToken {\r\n constructor(gapi, sessionIndex, iamToken, authTokenFactory) {\r\n this.gapi = gapi;\r\n this.sessionIndex = sessionIndex;\r\n this.iamToken = iamToken;\r\n this.authTokenFactory = authTokenFactory;\r\n this.type = 'FirstParty';\r\n this.user = User.FIRST_PARTY;\r\n this._headers = new Map();\r\n }\r\n /** Gets an authorization token, using a provided factory function, or falling back to First Party GAPI. */\r\n getAuthToken() {\r\n if (this.authTokenFactory) {\r\n return this.authTokenFactory();\r\n }\r\n else {\r\n // Make sure this really is a Gapi client.\r\n hardAssert(!!(typeof this.gapi === 'object' &&\r\n this.gapi !== null &&\r\n this.gapi['auth'] &&\r\n this.gapi['auth']['getAuthHeaderValueForFirstParty']));\r\n return this.gapi['auth']['getAuthHeaderValueForFirstParty']([]);\r\n }\r\n }\r\n get headers() {\r\n this._headers.set('X-Goog-AuthUser', this.sessionIndex);\r\n // Use array notation to prevent minification\r\n const authHeaderTokenValue = this.getAuthToken();\r\n if (authHeaderTokenValue) {\r\n this._headers.set('Authorization', authHeaderTokenValue);\r\n }\r\n if (this.iamToken) {\r\n this._headers.set('X-Goog-Iam-Authorization-Token', this.iamToken);\r\n }\r\n return this._headers;\r\n }\r\n}\r\n/*\r\n * Provides user credentials required for the Firestore JavaScript SDK\r\n * to authenticate the user, using technique that is only available\r\n * to applications hosted by Google.\r\n */\r\nclass FirstPartyAuthCredentialsProvider {\r\n constructor(gapi, sessionIndex, iamToken, authTokenFactory) {\r\n this.gapi = gapi;\r\n this.sessionIndex = sessionIndex;\r\n this.iamToken = iamToken;\r\n this.authTokenFactory = authTokenFactory;\r\n }\r\n getToken() {\r\n return Promise.resolve(new FirstPartyToken(this.gapi, this.sessionIndex, this.iamToken, this.authTokenFactory));\r\n }\r\n start(asyncQueue, changeListener) {\r\n // Fire with initial uid.\r\n asyncQueue.enqueueRetryable(() => changeListener(User.FIRST_PARTY));\r\n }\r\n shutdown() { }\r\n invalidateToken() { }\r\n}\r\nclass AppCheckToken {\r\n constructor(value) {\r\n this.value = value;\r\n this.type = 'AppCheck';\r\n this.headers = new Map();\r\n if (value && value.length > 0) {\r\n this.headers.set('x-firebase-appcheck', this.value);\r\n }\r\n }\r\n}\r\nclass FirebaseAppCheckTokenProvider {\r\n constructor(appCheckProvider) {\r\n this.appCheckProvider = appCheckProvider;\r\n this.forceRefresh = false;\r\n this.appCheck = null;\r\n this.latestAppCheckToken = null;\r\n }\r\n start(asyncQueue, changeListener) {\r\n const onTokenChanged = tokenResult => {\r\n if (tokenResult.error != null) {\r\n logDebug('FirebaseAppCheckTokenProvider', `Error getting App Check token; using placeholder token instead. Error: ${tokenResult.error.message}`);\r\n }\r\n const tokenUpdated = tokenResult.token !== this.latestAppCheckToken;\r\n this.latestAppCheckToken = tokenResult.token;\r\n logDebug('FirebaseAppCheckTokenProvider', `Received ${tokenUpdated ? 'new' : 'existing'} token.`);\r\n return tokenUpdated\r\n ? changeListener(tokenResult.token)\r\n : Promise.resolve();\r\n };\r\n this.tokenListener = (tokenResult) => {\r\n asyncQueue.enqueueRetryable(() => onTokenChanged(tokenResult));\r\n };\r\n const registerAppCheck = (appCheck) => {\r\n logDebug('FirebaseAppCheckTokenProvider', 'AppCheck detected');\r\n this.appCheck = appCheck;\r\n this.appCheck.addTokenListener(this.tokenListener);\r\n };\r\n this.appCheckProvider.onInit(appCheck => registerAppCheck(appCheck));\r\n // Our users can initialize AppCheck after Firestore, so we give it\r\n // a chance to register itself with the component framework.\r\n setTimeout(() => {\r\n if (!this.appCheck) {\r\n const appCheck = this.appCheckProvider.getImmediate({ optional: true });\r\n if (appCheck) {\r\n registerAppCheck(appCheck);\r\n }\r\n else {\r\n // If AppCheck is still not available, proceed without it.\r\n logDebug('FirebaseAppCheckTokenProvider', 'AppCheck not yet detected');\r\n }\r\n }\r\n }, 0);\r\n }\r\n getToken() {\r\n const forceRefresh = this.forceRefresh;\r\n this.forceRefresh = false;\r\n if (!this.appCheck) {\r\n return Promise.resolve(null);\r\n }\r\n return this.appCheck.getToken(forceRefresh).then(tokenResult => {\r\n if (tokenResult) {\r\n hardAssert(typeof tokenResult.token === 'string');\r\n this.latestAppCheckToken = tokenResult.token;\r\n return new AppCheckToken(tokenResult.token);\r\n }\r\n else {\r\n return null;\r\n }\r\n });\r\n }\r\n invalidateToken() {\r\n this.forceRefresh = true;\r\n }\r\n shutdown() {\r\n if (this.appCheck) {\r\n this.appCheck.removeTokenListener(this.tokenListener);\r\n }\r\n }\r\n}\r\n/**\r\n * An AppCheck token provider that always yields an empty token.\r\n * @internal\r\n */\r\nclass EmptyAppCheckTokenProvider {\r\n getToken() {\r\n return Promise.resolve(new AppCheckToken(''));\r\n }\r\n invalidateToken() { }\r\n start(asyncQueue, changeListener) { }\r\n shutdown() { }\r\n}\r\n/**\r\n * Builds a CredentialsProvider depending on the type of\r\n * the credentials passed in.\r\n */\r\nfunction makeAuthCredentialsProvider(credentials) {\r\n if (!credentials) {\r\n return new EmptyAuthCredentialsProvider();\r\n }\r\n switch (credentials['type']) {\r\n case 'gapi':\r\n const client = credentials['client'];\r\n return new FirstPartyAuthCredentialsProvider(client, credentials['sessionIndex'] || '0', credentials['iamToken'] || null, credentials['authTokenFactory'] || null);\r\n case 'provider':\r\n return credentials['client'];\r\n default:\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'makeAuthCredentialsProvider failed due to invalid credential type');\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 * Generates `nBytes` of random bytes.\r\n *\r\n * If `nBytes < 0` , an error will be thrown.\r\n */\r\nfunction randomBytes(nBytes) {\r\n return randomBytes$1(nBytes);\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 AutoId {\r\n static newId() {\r\n // Alphanumeric characters\r\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n // The largest byte value that is a multiple of `char.length`.\r\n const maxMultiple = Math.floor(256 / chars.length) * chars.length;\r\n let autoId = '';\r\n const targetLength = 20;\r\n while (autoId.length < targetLength) {\r\n const bytes = randomBytes(40);\r\n for (let i = 0; i < bytes.length; ++i) {\r\n // Only accept values that are [0, maxMultiple), this ensures they can\r\n // be evenly mapped to indices of `chars` via a modulo operation.\r\n if (autoId.length < targetLength && bytes[i] < maxMultiple) {\r\n autoId += chars.charAt(bytes[i] % chars.length);\r\n }\r\n }\r\n }\r\n return autoId;\r\n }\r\n}\r\nfunction primitiveComparator(left, right) {\r\n if (left < right) {\r\n return -1;\r\n }\r\n if (left > right) {\r\n return 1;\r\n }\r\n return 0;\r\n}\r\n/** Helper to compare arrays using isEqual(). */\r\nfunction arrayEquals(left, right, comparator) {\r\n if (left.length !== right.length) {\r\n return false;\r\n }\r\n return left.every((value, index) => comparator(value, right[index]));\r\n}\r\n/**\r\n * Returns the immediate lexicographically-following string. This is useful to\r\n * construct an inclusive range for indexeddb iterators.\r\n */\r\nfunction immediateSuccessor(s) {\r\n // Return the input string, with an additional NUL byte appended.\r\n return s + '\\0';\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// The earliest date supported by Firestore timestamps (0001-01-01T00:00:00Z).\r\nconst MIN_SECONDS = -62135596800;\r\n// Number of nanoseconds in a millisecond.\r\nconst MS_TO_NANOS = 1e6;\r\n/**\r\n * A `Timestamp` represents a point in time independent of any time zone or\r\n * calendar, represented as seconds and fractions of seconds at nanosecond\r\n * resolution in UTC Epoch time.\r\n *\r\n * It is encoded using the Proleptic Gregorian Calendar which extends the\r\n * Gregorian calendar backwards to year one. It is encoded assuming all minutes\r\n * are 60 seconds long, i.e. leap seconds are \"smeared\" so that no leap second\r\n * table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to\r\n * 9999-12-31T23:59:59.999999999Z.\r\n *\r\n * For examples and further specifications, refer to the\r\n * {@link https://github.com/google/protobuf/blob/master/src/google/protobuf/timestamp.proto | Timestamp definition}.\r\n */\r\nclass Timestamp {\r\n /**\r\n * Creates a new timestamp.\r\n *\r\n * @param seconds - The number of seconds of UTC time since Unix epoch\r\n * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\r\n * 9999-12-31T23:59:59Z inclusive.\r\n * @param nanoseconds - The non-negative fractions of a second at nanosecond\r\n * resolution. Negative second values with fractions must still have\r\n * non-negative nanoseconds values that count forward in time. Must be\r\n * from 0 to 999,999,999 inclusive.\r\n */\r\n constructor(\r\n /**\r\n * The number of seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z.\r\n */\r\n seconds, \r\n /**\r\n * The fractions of a second at nanosecond resolution.*\r\n */\r\n nanoseconds) {\r\n this.seconds = seconds;\r\n this.nanoseconds = nanoseconds;\r\n if (nanoseconds < 0) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Timestamp nanoseconds out of range: ' + nanoseconds);\r\n }\r\n if (nanoseconds >= 1e9) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Timestamp nanoseconds out of range: ' + nanoseconds);\r\n }\r\n if (seconds < MIN_SECONDS) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Timestamp seconds out of range: ' + seconds);\r\n }\r\n // This will break in the year 10,000.\r\n if (seconds >= 253402300800) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Timestamp seconds out of range: ' + seconds);\r\n }\r\n }\r\n /**\r\n * Creates a new timestamp with the current date, with millisecond precision.\r\n *\r\n * @returns a new timestamp representing the current date.\r\n */\r\n static now() {\r\n return Timestamp.fromMillis(Date.now());\r\n }\r\n /**\r\n * Creates a new timestamp from the given date.\r\n *\r\n * @param date - The date to initialize the `Timestamp` from.\r\n * @returns A new `Timestamp` representing the same point in time as the given\r\n * date.\r\n */\r\n static fromDate(date) {\r\n return Timestamp.fromMillis(date.getTime());\r\n }\r\n /**\r\n * Creates a new timestamp from the given number of milliseconds.\r\n *\r\n * @param milliseconds - Number of milliseconds since Unix epoch\r\n * 1970-01-01T00:00:00Z.\r\n * @returns A new `Timestamp` representing the same point in time as the given\r\n * number of milliseconds.\r\n */\r\n static fromMillis(milliseconds) {\r\n const seconds = Math.floor(milliseconds / 1000);\r\n const nanos = Math.floor((milliseconds - seconds * 1000) * MS_TO_NANOS);\r\n return new Timestamp(seconds, nanos);\r\n }\r\n /**\r\n * Converts a `Timestamp` to a JavaScript `Date` object. This conversion\r\n * causes a loss of precision since `Date` objects only support millisecond\r\n * precision.\r\n *\r\n * @returns JavaScript `Date` object representing the same point in time as\r\n * this `Timestamp`, with millisecond precision.\r\n */\r\n toDate() {\r\n return new Date(this.toMillis());\r\n }\r\n /**\r\n * Converts a `Timestamp` to a numeric timestamp (in milliseconds since\r\n * epoch). This operation causes a loss of precision.\r\n *\r\n * @returns The point in time corresponding to this timestamp, represented as\r\n * the number of milliseconds since Unix epoch 1970-01-01T00:00:00Z.\r\n */\r\n toMillis() {\r\n return this.seconds * 1000 + this.nanoseconds / MS_TO_NANOS;\r\n }\r\n _compareTo(other) {\r\n if (this.seconds === other.seconds) {\r\n return primitiveComparator(this.nanoseconds, other.nanoseconds);\r\n }\r\n return primitiveComparator(this.seconds, other.seconds);\r\n }\r\n /**\r\n * Returns true if this `Timestamp` is equal to the provided one.\r\n *\r\n * @param other - The `Timestamp` to compare against.\r\n * @returns true if this `Timestamp` is equal to the provided one.\r\n */\r\n isEqual(other) {\r\n return (other.seconds === this.seconds && other.nanoseconds === this.nanoseconds);\r\n }\r\n /** Returns a textual representation of this `Timestamp`. */\r\n toString() {\r\n return ('Timestamp(seconds=' +\r\n this.seconds +\r\n ', nanoseconds=' +\r\n this.nanoseconds +\r\n ')');\r\n }\r\n /** Returns a JSON-serializable representation of this `Timestamp`. */\r\n toJSON() {\r\n return { seconds: this.seconds, nanoseconds: this.nanoseconds };\r\n }\r\n /**\r\n * Converts this object to a primitive string, which allows `Timestamp` objects\r\n * to be compared using the `>`, `<=`, `>=` and `>` operators.\r\n */\r\n valueOf() {\r\n // This method returns a string of the form <seconds>.<nanoseconds> where\r\n // <seconds> is translated to have a non-negative value and both <seconds>\r\n // and <nanoseconds> are left-padded with zeroes to be a consistent length.\r\n // Strings with this format then have a lexiographical ordering that matches\r\n // the expected ordering. The <seconds> translation is done to avoid having\r\n // a leading negative sign (i.e. a leading '-' character) in its string\r\n // representation, which would affect its lexiographical ordering.\r\n const adjustedSeconds = this.seconds - MIN_SECONDS;\r\n // Note: Up to 12 decimal digits are required to represent all valid\r\n // 'seconds' values.\r\n const formattedSeconds = String(adjustedSeconds).padStart(12, '0');\r\n const formattedNanoseconds = String(this.nanoseconds).padStart(9, '0');\r\n return formattedSeconds + '.' + formattedNanoseconds;\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 version of a document in Firestore. This corresponds to the version\r\n * timestamp, such as update_time or read_time.\r\n */\r\nclass SnapshotVersion {\r\n constructor(timestamp) {\r\n this.timestamp = timestamp;\r\n }\r\n static fromTimestamp(value) {\r\n return new SnapshotVersion(value);\r\n }\r\n static min() {\r\n return new SnapshotVersion(new Timestamp(0, 0));\r\n }\r\n static max() {\r\n return new SnapshotVersion(new Timestamp(253402300799, 1e9 - 1));\r\n }\r\n compareTo(other) {\r\n return this.timestamp._compareTo(other.timestamp);\r\n }\r\n isEqual(other) {\r\n return this.timestamp.isEqual(other.timestamp);\r\n }\r\n /** Returns a number representation of the version for use in spec tests. */\r\n toMicroseconds() {\r\n // Convert to microseconds.\r\n return this.timestamp.seconds * 1e6 + this.timestamp.nanoseconds / 1000;\r\n }\r\n toString() {\r\n return 'SnapshotVersion(' + this.timestamp.toString() + ')';\r\n }\r\n toTimestamp() {\r\n return this.timestamp;\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 DOCUMENT_KEY_NAME = '__name__';\r\n/**\r\n * Path represents an ordered sequence of string segments.\r\n */\r\nclass BasePath {\r\n constructor(segments, offset, length) {\r\n if (offset === undefined) {\r\n offset = 0;\r\n }\r\n else if (offset > segments.length) {\r\n fail();\r\n }\r\n if (length === undefined) {\r\n length = segments.length - offset;\r\n }\r\n else if (length > segments.length - offset) {\r\n fail();\r\n }\r\n this.segments = segments;\r\n this.offset = offset;\r\n this.len = length;\r\n }\r\n get length() {\r\n return this.len;\r\n }\r\n isEqual(other) {\r\n return BasePath.comparator(this, other) === 0;\r\n }\r\n child(nameOrPath) {\r\n const segments = this.segments.slice(this.offset, this.limit());\r\n if (nameOrPath instanceof BasePath) {\r\n nameOrPath.forEach(segment => {\r\n segments.push(segment);\r\n });\r\n }\r\n else {\r\n segments.push(nameOrPath);\r\n }\r\n return this.construct(segments);\r\n }\r\n /** The index of one past the last segment of the path. */\r\n limit() {\r\n return this.offset + this.length;\r\n }\r\n popFirst(size) {\r\n size = size === undefined ? 1 : size;\r\n return this.construct(this.segments, this.offset + size, this.length - size);\r\n }\r\n popLast() {\r\n return this.construct(this.segments, this.offset, this.length - 1);\r\n }\r\n firstSegment() {\r\n return this.segments[this.offset];\r\n }\r\n lastSegment() {\r\n return this.get(this.length - 1);\r\n }\r\n get(index) {\r\n return this.segments[this.offset + index];\r\n }\r\n isEmpty() {\r\n return this.length === 0;\r\n }\r\n isPrefixOf(other) {\r\n if (other.length < this.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < this.length; i++) {\r\n if (this.get(i) !== other.get(i)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n isImmediateParentOf(potentialChild) {\r\n if (this.length + 1 !== potentialChild.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < this.length; i++) {\r\n if (this.get(i) !== potentialChild.get(i)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n forEach(fn) {\r\n for (let i = this.offset, end = this.limit(); i < end; i++) {\r\n fn(this.segments[i]);\r\n }\r\n }\r\n toArray() {\r\n return this.segments.slice(this.offset, this.limit());\r\n }\r\n static comparator(p1, p2) {\r\n const len = Math.min(p1.length, p2.length);\r\n for (let i = 0; i < len; i++) {\r\n const left = p1.get(i);\r\n const right = p2.get(i);\r\n if (left < right) {\r\n return -1;\r\n }\r\n if (left > right) {\r\n return 1;\r\n }\r\n }\r\n if (p1.length < p2.length) {\r\n return -1;\r\n }\r\n if (p1.length > p2.length) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n}\r\n/**\r\n * A slash-separated path for navigating resources (documents and collections)\r\n * within Firestore.\r\n *\r\n * @internal\r\n */\r\nclass ResourcePath extends BasePath {\r\n construct(segments, offset, length) {\r\n return new ResourcePath(segments, offset, length);\r\n }\r\n canonicalString() {\r\n // NOTE: The client is ignorant of any path segments containing escape\r\n // sequences (e.g. __id123__) and just passes them through raw (they exist\r\n // for legacy reasons and should not be used frequently).\r\n return this.toArray().join('/');\r\n }\r\n toString() {\r\n return this.canonicalString();\r\n }\r\n /**\r\n * Creates a resource path from the given slash-delimited string. If multiple\r\n * arguments are provided, all components are combined. Leading and trailing\r\n * slashes from all components are ignored.\r\n */\r\n static fromString(...pathComponents) {\r\n // NOTE: The client is ignorant of any path segments containing escape\r\n // sequences (e.g. __id123__) and just passes them through raw (they exist\r\n // for legacy reasons and should not be used frequently).\r\n const segments = [];\r\n for (const path of pathComponents) {\r\n if (path.indexOf('//') >= 0) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid segment (${path}). Paths must not contain // in them.`);\r\n }\r\n // Strip leading and traling slashed.\r\n segments.push(...path.split('/').filter(segment => segment.length > 0));\r\n }\r\n return new ResourcePath(segments);\r\n }\r\n static emptyPath() {\r\n return new ResourcePath([]);\r\n }\r\n}\r\nconst identifierRegExp = /^[_a-zA-Z][_a-zA-Z0-9]*$/;\r\n/**\r\n * A dot-separated path for navigating sub-objects within a document.\r\n * @internal\r\n */\r\nclass FieldPath$1 extends BasePath {\r\n construct(segments, offset, length) {\r\n return new FieldPath$1(segments, offset, length);\r\n }\r\n /**\r\n * Returns true if the string could be used as a segment in a field path\r\n * without escaping.\r\n */\r\n static isValidIdentifier(segment) {\r\n return identifierRegExp.test(segment);\r\n }\r\n canonicalString() {\r\n return this.toArray()\r\n .map(str => {\r\n str = str.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`');\r\n if (!FieldPath$1.isValidIdentifier(str)) {\r\n str = '`' + str + '`';\r\n }\r\n return str;\r\n })\r\n .join('.');\r\n }\r\n toString() {\r\n return this.canonicalString();\r\n }\r\n /**\r\n * Returns true if this field references the key of a document.\r\n */\r\n isKeyField() {\r\n return this.length === 1 && this.get(0) === DOCUMENT_KEY_NAME;\r\n }\r\n /**\r\n * The field designating the key of a document.\r\n */\r\n static keyField() {\r\n return new FieldPath$1([DOCUMENT_KEY_NAME]);\r\n }\r\n /**\r\n * Parses a field string from the given server-formatted string.\r\n *\r\n * - Splitting the empty string is not allowed (for now at least).\r\n * - Empty segments within the string (e.g. if there are two consecutive\r\n * separators) are not allowed.\r\n *\r\n * TODO(b/37244157): we should make this more strict. Right now, it allows\r\n * non-identifier path components, even if they aren't escaped.\r\n */\r\n static fromServerFormat(path) {\r\n const segments = [];\r\n let current = '';\r\n let i = 0;\r\n const addCurrentSegment = () => {\r\n if (current.length === 0) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, `Invalid field path (${path}). Paths must not be empty, begin ` +\r\n `with '.', end with '.', or contain '..'`);\r\n }\r\n segments.push(current);\r\n current = '';\r\n };\r\n let inBackticks = false;\r\n while (i < path.length) {\r\n const c = path[i];\r\n if (c === '\\\\') {\r\n if (i + 1 === path.length) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Path has trailing escape character: ' + path);\r\n }\r\n const next = path[i + 1];\r\n if (!(next === '\\\\' || next === '.' || next === '`')) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Path has invalid escape sequence: ' + path);\r\n }\r\n current += next;\r\n i += 2;\r\n }\r\n else if (c === '`') {\r\n inBackticks = !inBackticks;\r\n i++;\r\n }\r\n else if (c === '.' && !inBackticks) {\r\n addCurrentSegment();\r\n i++;\r\n }\r\n else {\r\n current += c;\r\n i++;\r\n }\r\n }\r\n addCurrentSegment();\r\n if (inBackticks) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Unterminated ` in path: ' + path);\r\n }\r\n return new FieldPath$1(segments);\r\n }\r\n static emptyPath() {\r\n return new FieldPath$1([]);\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\r\n */\r\nclass DocumentKey {\r\n constructor(path) {\r\n this.path = path;\r\n }\r\n static fromPath(path) {\r\n return new DocumentKey(ResourcePath.fromString(path));\r\n }\r\n static fromName(name) {\r\n return new DocumentKey(ResourcePath.fromString(name).popFirst(5));\r\n }\r\n static empty() {\r\n return new DocumentKey(ResourcePath.emptyPath());\r\n }\r\n get collectionGroup() {\r\n return this.path.popLast().lastSegment();\r\n }\r\n /** Returns true if the document is in the specified collectionId. */\r\n hasCollectionId(collectionId) {\r\n return (this.path.length >= 2 &&\r\n this.path.get(this.path.length - 2) === collectionId);\r\n }\r\n /** Returns the collection group (i.e. the name of the parent collection) for this key. */\r\n getCollectionGroup() {\r\n return this.path.get(this.path.length - 2);\r\n }\r\n /** Returns the fully qualified path to the parent collection. */\r\n getCollectionPath() {\r\n return this.path.popLast();\r\n }\r\n isEqual(other) {\r\n return (other !== null && ResourcePath.comparator(this.path, other.path) === 0);\r\n }\r\n toString() {\r\n return this.path.toString();\r\n }\r\n static comparator(k1, k2) {\r\n return ResourcePath.comparator(k1.path, k2.path);\r\n }\r\n static isDocumentKey(path) {\r\n return path.length % 2 === 0;\r\n }\r\n /**\r\n * Creates and returns a new document key with the given segments.\r\n *\r\n * @param segments - The segments of the path to the document\r\n * @returns A new instance of DocumentKey\r\n */\r\n static fromSegments(segments) {\r\n return new DocumentKey(new ResourcePath(segments.slice()));\r\n }\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/**\r\n * The initial mutation batch id for each index. Gets updated during index\r\n * backfill.\r\n */\r\nconst INITIAL_LARGEST_BATCH_ID = -1;\r\n/**\r\n * The initial sequence number for each index. Gets updated during index\r\n * backfill.\r\n */\r\nconst INITIAL_SEQUENCE_NUMBER = 0;\r\n/**\r\n * An index definition for field indexes in Firestore.\r\n *\r\n * Every index is associated with a collection. The definition contains a list\r\n * of fields and their index kind (which can be `ASCENDING`, `DESCENDING` or\r\n * `CONTAINS` for ArrayContains/ArrayContainsAny queries).\r\n *\r\n * Unlike the backend, the SDK does not differentiate between collection or\r\n * collection group-scoped indices. Every index can be used for both single\r\n * collection and collection group queries.\r\n */\r\nclass FieldIndex {\r\n constructor(\r\n /**\r\n * The index ID. Returns -1 if the index ID is not available (e.g. the index\r\n * has not yet been persisted).\r\n */\r\n indexId, \r\n /** The collection ID this index applies to. */\r\n collectionGroup, \r\n /** The field segments for this index. */\r\n fields, \r\n /** Shows how up-to-date the index is for the current user. */\r\n indexState) {\r\n this.indexId = indexId;\r\n this.collectionGroup = collectionGroup;\r\n this.fields = fields;\r\n this.indexState = indexState;\r\n }\r\n}\r\n/** An ID for an index that has not yet been added to persistence. */\r\nFieldIndex.UNKNOWN_ID = -1;\r\n/** Returns the ArrayContains/ArrayContainsAny segment for this index. */\r\nfunction fieldIndexGetArraySegment(fieldIndex) {\r\n return fieldIndex.fields.find(s => s.kind === 2 /* IndexKind.CONTAINS */);\r\n}\r\n/** Returns all directional (ascending/descending) segments for this index. */\r\nfunction fieldIndexGetDirectionalSegments(fieldIndex) {\r\n return fieldIndex.fields.filter(s => s.kind !== 2 /* IndexKind.CONTAINS */);\r\n}\r\n/**\r\n * Returns the order of the document key component for the given index.\r\n *\r\n * PORTING NOTE: This is only used in the Web IndexedDb implementation.\r\n */\r\nfunction fieldIndexGetKeyOrder(fieldIndex) {\r\n const directionalSegments = fieldIndexGetDirectionalSegments(fieldIndex);\r\n return directionalSegments.length === 0\r\n ? 0 /* IndexKind.ASCENDING */\r\n : directionalSegments[directionalSegments.length - 1].kind;\r\n}\r\n/**\r\n * Compares indexes by collection group and segments. Ignores update time and\r\n * index ID.\r\n */\r\nfunction fieldIndexSemanticComparator(left, right) {\r\n let cmp = primitiveComparator(left.collectionGroup, right.collectionGroup);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n for (let i = 0; i < Math.min(left.fields.length, right.fields.length); ++i) {\r\n cmp = indexSegmentComparator(left.fields[i], right.fields[i]);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n }\r\n return primitiveComparator(left.fields.length, right.fields.length);\r\n}\r\n/** Returns a debug representation of the field index */\r\nfunction fieldIndexToString(fieldIndex) {\r\n return `id=${fieldIndex.indexId}|cg=${fieldIndex.collectionGroup}|f=${fieldIndex.fields.map(f => `${f.fieldPath}:${f.kind}`).join(',')}`;\r\n}\r\n/** An index component consisting of field path and index type. */\r\nclass IndexSegment {\r\n constructor(\r\n /** The field path of the component. */\r\n fieldPath, \r\n /** The fields sorting order. */\r\n kind) {\r\n this.fieldPath = fieldPath;\r\n this.kind = kind;\r\n }\r\n}\r\nfunction indexSegmentComparator(left, right) {\r\n const cmp = FieldPath$1.comparator(left.fieldPath, right.fieldPath);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n return primitiveComparator(left.kind, right.kind);\r\n}\r\n/**\r\n * Stores the \"high water mark\" that indicates how updated the Index is for the\r\n * current user.\r\n */\r\nclass IndexState {\r\n constructor(\r\n /**\r\n * Indicates when the index was last updated (relative to other indexes).\r\n */\r\n sequenceNumber, \r\n /** The the latest indexed read time, document and batch id. */\r\n offset) {\r\n this.sequenceNumber = sequenceNumber;\r\n this.offset = offset;\r\n }\r\n /** The state of an index that has not yet been backfilled. */\r\n static empty() {\r\n return new IndexState(INITIAL_SEQUENCE_NUMBER, IndexOffset.min());\r\n }\r\n}\r\n/**\r\n * Creates an offset that matches all documents with a read time higher than\r\n * `readTime`.\r\n */\r\nfunction newIndexOffsetSuccessorFromReadTime(readTime, largestBatchId) {\r\n // We want to create an offset that matches all documents with a read time\r\n // greater than the provided read time. To do so, we technically need to\r\n // create an offset for `(readTime, MAX_DOCUMENT_KEY)`. While we could use\r\n // Unicode codepoints to generate MAX_DOCUMENT_KEY, it is much easier to use\r\n // `(readTime + 1, DocumentKey.empty())` since `> DocumentKey.empty()` matches\r\n // all valid document IDs.\r\n const successorSeconds = readTime.toTimestamp().seconds;\r\n const successorNanos = readTime.toTimestamp().nanoseconds + 1;\r\n const successor = SnapshotVersion.fromTimestamp(successorNanos === 1e9\r\n ? new Timestamp(successorSeconds + 1, 0)\r\n : new Timestamp(successorSeconds, successorNanos));\r\n return new IndexOffset(successor, DocumentKey.empty(), largestBatchId);\r\n}\r\n/** Creates a new offset based on the provided document. */\r\nfunction newIndexOffsetFromDocument(document) {\r\n return new IndexOffset(document.readTime, document.key, INITIAL_LARGEST_BATCH_ID);\r\n}\r\n/**\r\n * Stores the latest read time, document and batch ID that were processed for an\r\n * index.\r\n */\r\nclass IndexOffset {\r\n constructor(\r\n /**\r\n * The latest read time version that has been indexed by Firestore for this\r\n * field index.\r\n */\r\n readTime, \r\n /**\r\n * The key of the last document that was indexed for this query. Use\r\n * `DocumentKey.empty()` if no document has been indexed.\r\n */\r\n documentKey, \r\n /*\r\n * The largest mutation batch id that's been processed by Firestore.\r\n */\r\n largestBatchId) {\r\n this.readTime = readTime;\r\n this.documentKey = documentKey;\r\n this.largestBatchId = largestBatchId;\r\n }\r\n /** Returns an offset that sorts before all regular offsets. */\r\n static min() {\r\n return new IndexOffset(SnapshotVersion.min(), DocumentKey.empty(), INITIAL_LARGEST_BATCH_ID);\r\n }\r\n /** Returns an offset that sorts after all regular offsets. */\r\n static max() {\r\n return new IndexOffset(SnapshotVersion.max(), DocumentKey.empty(), INITIAL_LARGEST_BATCH_ID);\r\n }\r\n}\r\nfunction indexOffsetComparator(left, right) {\r\n let cmp = left.readTime.compareTo(right.readTime);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n cmp = DocumentKey.comparator(left.documentKey, right.documentKey);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n return primitiveComparator(left.largestBatchId, right.largestBatchId);\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 PRIMARY_LEASE_LOST_ERROR_MSG = 'The current tab is not in the required state to perform this operation. ' +\r\n 'It might be necessary to refresh the browser tab.';\r\n/**\r\n * A base class representing a persistence transaction, encapsulating both the\r\n * transaction's sequence numbers as well as a list of onCommitted listeners.\r\n *\r\n * When you call Persistence.runTransaction(), it will create a transaction and\r\n * pass it to your callback. You then pass it to any method that operates\r\n * on persistence.\r\n */\r\nclass PersistenceTransaction {\r\n constructor() {\r\n this.onCommittedListeners = [];\r\n }\r\n addOnCommittedListener(listener) {\r\n this.onCommittedListeners.push(listener);\r\n }\r\n raiseOnCommittedEvent() {\r\n this.onCommittedListeners.forEach(listener => listener());\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 * Verifies the error thrown by a LocalStore operation. If a LocalStore\r\n * operation fails because the primary lease has been taken by another client,\r\n * we ignore the error (the persistence layer will immediately call\r\n * `applyPrimaryLease` to propagate the primary state change). All other errors\r\n * are re-thrown.\r\n *\r\n * @param err - An error returned by a LocalStore operation.\r\n * @returns A Promise that resolves after we recovered, or the original error.\r\n */\r\nasync function ignoreIfPrimaryLeaseLoss(err) {\r\n if (err.code === Code.FAILED_PRECONDITION &&\r\n err.message === PRIMARY_LEASE_LOST_ERROR_MSG) {\r\n logDebug('LocalStore', 'Unexpectedly lost primary lease');\r\n }\r\n else {\r\n throw err;\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 * PersistencePromise is essentially a re-implementation of Promise except\r\n * it has a .next() method instead of .then() and .next() and .catch() callbacks\r\n * are executed synchronously when a PersistencePromise resolves rather than\r\n * asynchronously (Promise implementations use setImmediate() or similar).\r\n *\r\n * This is necessary to interoperate with IndexedDB which will automatically\r\n * commit transactions if control is returned to the event loop without\r\n * synchronously initiating another operation on the transaction.\r\n *\r\n * NOTE: .then() and .catch() only allow a single consumer, unlike normal\r\n * Promises.\r\n */\r\nclass PersistencePromise {\r\n constructor(callback) {\r\n // NOTE: next/catchCallback will always point to our own wrapper functions,\r\n // not the user's raw next() or catch() callbacks.\r\n this.nextCallback = null;\r\n this.catchCallback = null;\r\n // When the operation resolves, we'll set result or error and mark isDone.\r\n this.result = undefined;\r\n this.error = undefined;\r\n this.isDone = false;\r\n // Set to true when .then() or .catch() are called and prevents additional\r\n // chaining.\r\n this.callbackAttached = false;\r\n callback(value => {\r\n this.isDone = true;\r\n this.result = value;\r\n if (this.nextCallback) {\r\n // value should be defined unless T is Void, but we can't express\r\n // that in the type system.\r\n this.nextCallback(value);\r\n }\r\n }, error => {\r\n this.isDone = true;\r\n this.error = error;\r\n if (this.catchCallback) {\r\n this.catchCallback(error);\r\n }\r\n });\r\n }\r\n catch(fn) {\r\n return this.next(undefined, fn);\r\n }\r\n next(nextFn, catchFn) {\r\n if (this.callbackAttached) {\r\n fail();\r\n }\r\n this.callbackAttached = true;\r\n if (this.isDone) {\r\n if (!this.error) {\r\n return this.wrapSuccess(nextFn, this.result);\r\n }\r\n else {\r\n return this.wrapFailure(catchFn, this.error);\r\n }\r\n }\r\n else {\r\n return new PersistencePromise((resolve, reject) => {\r\n this.nextCallback = (value) => {\r\n this.wrapSuccess(nextFn, value).next(resolve, reject);\r\n };\r\n this.catchCallback = (error) => {\r\n this.wrapFailure(catchFn, error).next(resolve, reject);\r\n };\r\n });\r\n }\r\n }\r\n toPromise() {\r\n return new Promise((resolve, reject) => {\r\n this.next(resolve, reject);\r\n });\r\n }\r\n wrapUserFunction(fn) {\r\n try {\r\n const result = fn();\r\n if (result instanceof PersistencePromise) {\r\n return result;\r\n }\r\n else {\r\n return PersistencePromise.resolve(result);\r\n }\r\n }\r\n catch (e) {\r\n return PersistencePromise.reject(e);\r\n }\r\n }\r\n wrapSuccess(nextFn, value) {\r\n if (nextFn) {\r\n return this.wrapUserFunction(() => nextFn(value));\r\n }\r\n else {\r\n // If there's no nextFn, then R must be the same as T\r\n return PersistencePromise.resolve(value);\r\n }\r\n }\r\n wrapFailure(catchFn, error) {\r\n if (catchFn) {\r\n return this.wrapUserFunction(() => catchFn(error));\r\n }\r\n else {\r\n return PersistencePromise.reject(error);\r\n }\r\n }\r\n static resolve(result) {\r\n return new PersistencePromise((resolve, reject) => {\r\n resolve(result);\r\n });\r\n }\r\n static reject(error) {\r\n return new PersistencePromise((resolve, reject) => {\r\n reject(error);\r\n });\r\n }\r\n static waitFor(\r\n // Accept all Promise types in waitFor().\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n all) {\r\n return new PersistencePromise((resolve, reject) => {\r\n let expectedCount = 0;\r\n let resolvedCount = 0;\r\n let done = false;\r\n all.forEach(element => {\r\n ++expectedCount;\r\n element.next(() => {\r\n ++resolvedCount;\r\n if (done && resolvedCount === expectedCount) {\r\n resolve();\r\n }\r\n }, err => reject(err));\r\n });\r\n done = true;\r\n if (resolvedCount === expectedCount) {\r\n resolve();\r\n }\r\n });\r\n }\r\n /**\r\n * Given an array of predicate functions that asynchronously evaluate to a\r\n * boolean, implements a short-circuiting `or` between the results. Predicates\r\n * will be evaluated until one of them returns `true`, then stop. The final\r\n * result will be whether any of them returned `true`.\r\n */\r\n static or(predicates) {\r\n let p = PersistencePromise.resolve(false);\r\n for (const predicate of predicates) {\r\n p = p.next(isTrue => {\r\n if (isTrue) {\r\n return PersistencePromise.resolve(isTrue);\r\n }\r\n else {\r\n return predicate();\r\n }\r\n });\r\n }\r\n return p;\r\n }\r\n static forEach(collection, f) {\r\n const promises = [];\r\n collection.forEach((r, s) => {\r\n promises.push(f.call(this, r, s));\r\n });\r\n return this.waitFor(promises);\r\n }\r\n /**\r\n * Concurrently map all array elements through asynchronous function.\r\n */\r\n static mapArray(array, f) {\r\n return new PersistencePromise((resolve, reject) => {\r\n const expectedCount = array.length;\r\n const results = new Array(expectedCount);\r\n let resolvedCount = 0;\r\n for (let i = 0; i < expectedCount; i++) {\r\n const current = i;\r\n f(array[current]).next(result => {\r\n results[current] = result;\r\n ++resolvedCount;\r\n if (resolvedCount === expectedCount) {\r\n resolve(results);\r\n }\r\n }, err => reject(err));\r\n }\r\n });\r\n }\r\n /**\r\n * An alternative to recursive PersistencePromise calls, that avoids\r\n * potential memory problems from unbounded chains of promises.\r\n *\r\n * The `action` will be called repeatedly while `condition` is true.\r\n */\r\n static doWhile(condition, action) {\r\n return new PersistencePromise((resolve, reject) => {\r\n const process = () => {\r\n if (condition() === true) {\r\n action().next(() => {\r\n process();\r\n }, reject);\r\n }\r\n else {\r\n resolve();\r\n }\r\n };\r\n process();\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// References to `window` are guarded by SimpleDb.isAvailable()\r\n/* eslint-disable no-restricted-globals */\r\nconst LOG_TAG$i = 'SimpleDb';\r\n/**\r\n * The maximum number of retry attempts for an IndexedDb transaction that fails\r\n * with a DOMException.\r\n */\r\nconst TRANSACTION_RETRY_COUNT = 3;\r\n/**\r\n * Wraps an IDBTransaction and exposes a store() method to get a handle to a\r\n * specific object store.\r\n */\r\nclass SimpleDbTransaction {\r\n constructor(action, transaction) {\r\n this.action = action;\r\n this.transaction = transaction;\r\n this.aborted = false;\r\n /**\r\n * A `Promise` that resolves with the result of the IndexedDb transaction.\r\n */\r\n this.completionDeferred = new Deferred();\r\n this.transaction.oncomplete = () => {\r\n this.completionDeferred.resolve();\r\n };\r\n this.transaction.onabort = () => {\r\n if (transaction.error) {\r\n this.completionDeferred.reject(new IndexedDbTransactionError(action, transaction.error));\r\n }\r\n else {\r\n this.completionDeferred.resolve();\r\n }\r\n };\r\n this.transaction.onerror = (event) => {\r\n const error = checkForAndReportiOSError(event.target.error);\r\n this.completionDeferred.reject(new IndexedDbTransactionError(action, error));\r\n };\r\n }\r\n static open(db, action, mode, objectStoreNames) {\r\n try {\r\n return new SimpleDbTransaction(action, db.transaction(objectStoreNames, mode));\r\n }\r\n catch (e) {\r\n throw new IndexedDbTransactionError(action, e);\r\n }\r\n }\r\n get completionPromise() {\r\n return this.completionDeferred.promise;\r\n }\r\n abort(error) {\r\n if (error) {\r\n this.completionDeferred.reject(error);\r\n }\r\n if (!this.aborted) {\r\n logDebug(LOG_TAG$i, 'Aborting transaction:', error ? error.message : 'Client-initiated abort');\r\n this.aborted = true;\r\n this.transaction.abort();\r\n }\r\n }\r\n maybeCommit() {\r\n // If the browser supports V3 IndexedDB, we invoke commit() explicitly to\r\n // speed up index DB processing if the event loop remains blocks.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const maybeV3IndexedDb = this.transaction;\r\n if (!this.aborted && typeof maybeV3IndexedDb.commit === 'function') {\r\n maybeV3IndexedDb.commit();\r\n }\r\n }\r\n /**\r\n * Returns a SimpleDbStore<KeyType, ValueType> for the specified store. All\r\n * operations performed on the SimpleDbStore happen within the context of this\r\n * transaction and it cannot be used anymore once the transaction is\r\n * completed.\r\n *\r\n * Note that we can't actually enforce that the KeyType and ValueType are\r\n * correct, but they allow type safety through the rest of the consuming code.\r\n */\r\n store(storeName) {\r\n const store = this.transaction.objectStore(storeName);\r\n return new SimpleDbStore(store);\r\n }\r\n}\r\n/**\r\n * Provides a wrapper around IndexedDb with a simplified interface that uses\r\n * Promise-like return values to chain operations. Real promises cannot be used\r\n * since .then() continuations are executed asynchronously (e.g. via\r\n * .setImmediate), which would cause IndexedDB to end the transaction.\r\n * See PersistencePromise for more details.\r\n */\r\nclass SimpleDb {\r\n /*\r\n * Creates a new SimpleDb wrapper for IndexedDb database `name`.\r\n *\r\n * Note that `version` must not be a downgrade. IndexedDB does not support\r\n * downgrading the schema version. We currently do not support any way to do\r\n * versioning outside of IndexedDB's versioning mechanism, as only\r\n * version-upgrade transactions are allowed to do things like create\r\n * objectstores.\r\n */\r\n constructor(name, version, schemaConverter) {\r\n this.name = name;\r\n this.version = version;\r\n this.schemaConverter = schemaConverter;\r\n const iOSVersion = SimpleDb.getIOSVersion(getUA());\r\n // NOTE: According to https://bugs.webkit.org/show_bug.cgi?id=197050, the\r\n // bug we're checking for should exist in iOS >= 12.2 and < 13, but for\r\n // whatever reason it's much harder to hit after 12.2 so we only proactively\r\n // log on 12.2.\r\n if (iOSVersion === 12.2) {\r\n logError('Firestore persistence suffers from a bug in iOS 12.2 ' +\r\n 'Safari that may cause your app to stop working. See ' +\r\n 'https://stackoverflow.com/q/56496296/110915 for details ' +\r\n 'and a potential workaround.');\r\n }\r\n }\r\n /** Deletes the specified database. */\r\n static delete(name) {\r\n logDebug(LOG_TAG$i, 'Removing database:', name);\r\n return wrapRequest(window.indexedDB.deleteDatabase(name)).toPromise();\r\n }\r\n /** Returns true if IndexedDB is available in the current environment. */\r\n static isAvailable() {\r\n if (!isIndexedDBAvailable()) {\r\n return false;\r\n }\r\n if (SimpleDb.isMockPersistence()) {\r\n return true;\r\n }\r\n // We extensively use indexed array values and compound keys,\r\n // which IE and Edge do not support. However, they still have indexedDB\r\n // defined on the window, so we need to check for them here and make sure\r\n // to return that persistence is not enabled for those browsers.\r\n // For tracking support of this feature, see here:\r\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/status/indexeddbarraysandmultientrysupport/\r\n // Check the UA string to find out the browser.\r\n const ua = getUA();\r\n // IE 10\r\n // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';\r\n // IE 11\r\n // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';\r\n // Edge\r\n // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,\r\n // like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';\r\n // iOS Safari: Disable for users running iOS version < 10.\r\n const iOSVersion = SimpleDb.getIOSVersion(ua);\r\n const isUnsupportedIOS = 0 < iOSVersion && iOSVersion < 10;\r\n // Android browser: Disable for userse running version < 4.5.\r\n const androidVersion = SimpleDb.getAndroidVersion(ua);\r\n const isUnsupportedAndroid = 0 < androidVersion && androidVersion < 4.5;\r\n if (ua.indexOf('MSIE ') > 0 ||\r\n ua.indexOf('Trident/') > 0 ||\r\n ua.indexOf('Edge/') > 0 ||\r\n isUnsupportedIOS ||\r\n isUnsupportedAndroid) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n /**\r\n * Returns true if the backing IndexedDB store is the Node IndexedDBShim\r\n * (see https://github.com/axemclion/IndexedDBShim).\r\n */\r\n static isMockPersistence() {\r\n var _a;\r\n return (typeof process !== 'undefined' &&\r\n ((_a = process.env) === null || _a === void 0 ? void 0 : _a.USE_MOCK_PERSISTENCE) === 'YES');\r\n }\r\n /** Helper to get a typed SimpleDbStore from a transaction. */\r\n static getStore(txn, store) {\r\n return txn.store(store);\r\n }\r\n // visible for testing\r\n /** Parse User Agent to determine iOS version. Returns -1 if not found. */\r\n static getIOSVersion(ua) {\r\n const iOSVersionRegex = ua.match(/i(?:phone|pad|pod) os ([\\d_]+)/i);\r\n const version = iOSVersionRegex\r\n ? iOSVersionRegex[1].split('_').slice(0, 2).join('.')\r\n : '-1';\r\n return Number(version);\r\n }\r\n // visible for testing\r\n /** Parse User Agent to determine Android version. Returns -1 if not found. */\r\n static getAndroidVersion(ua) {\r\n const androidVersionRegex = ua.match(/Android ([\\d.]+)/i);\r\n const version = androidVersionRegex\r\n ? androidVersionRegex[1].split('.').slice(0, 2).join('.')\r\n : '-1';\r\n return Number(version);\r\n }\r\n /**\r\n * Opens the specified database, creating or upgrading it if necessary.\r\n */\r\n async ensureDb(action) {\r\n if (!this.db) {\r\n logDebug(LOG_TAG$i, 'Opening database:', this.name);\r\n this.db = await new Promise((resolve, reject) => {\r\n // TODO(mikelehen): Investigate browser compatibility.\r\n // https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB\r\n // suggests IE9 and older WebKit browsers handle upgrade\r\n // differently. They expect setVersion, as described here:\r\n // https://developer.mozilla.org/en-US/docs/Web/API/IDBVersionChangeRequest/setVersion\r\n const request = indexedDB.open(this.name, this.version);\r\n request.onsuccess = (event) => {\r\n const db = event.target.result;\r\n resolve(db);\r\n };\r\n request.onblocked = () => {\r\n reject(new IndexedDbTransactionError(action, 'Cannot upgrade IndexedDB schema while another tab is open. ' +\r\n 'Close all tabs that access Firestore and reload this page to proceed.'));\r\n };\r\n request.onerror = (event) => {\r\n const error = event.target.error;\r\n if (error.name === 'VersionError') {\r\n reject(new FirestoreError(Code.FAILED_PRECONDITION, 'A newer version of the Firestore SDK was previously used and so the persisted ' +\r\n 'data is not compatible with the version of the SDK you are now using. The SDK ' +\r\n 'will operate with persistence disabled. If you need persistence, please ' +\r\n 're-upgrade to a newer version of the SDK or else clear the persisted IndexedDB ' +\r\n 'data for your app to start fresh.'));\r\n }\r\n else if (error.name === 'InvalidStateError') {\r\n reject(new FirestoreError(Code.FAILED_PRECONDITION, 'Unable to open an IndexedDB connection. This could be due to running in a ' +\r\n 'private browsing session on a browser whose private browsing sessions do not ' +\r\n 'support IndexedDB: ' +\r\n error));\r\n }\r\n else {\r\n reject(new IndexedDbTransactionError(action, error));\r\n }\r\n };\r\n request.onupgradeneeded = (event) => {\r\n logDebug(LOG_TAG$i, 'Database \"' + this.name + '\" requires upgrade from version:', event.oldVersion);\r\n const db = event.target.result;\r\n this.schemaConverter\r\n .createOrUpgrade(db, request.transaction, event.oldVersion, this.version)\r\n .next(() => {\r\n logDebug(LOG_TAG$i, 'Database upgrade to version ' + this.version + ' complete');\r\n });\r\n };\r\n });\r\n }\r\n if (this.versionchangelistener) {\r\n this.db.onversionchange = event => this.versionchangelistener(event);\r\n }\r\n return this.db;\r\n }\r\n setVersionChangeListener(versionChangeListener) {\r\n this.versionchangelistener = versionChangeListener;\r\n if (this.db) {\r\n this.db.onversionchange = (event) => {\r\n return versionChangeListener(event);\r\n };\r\n }\r\n }\r\n async runTransaction(action, mode, objectStores, transactionFn) {\r\n const readonly = mode === 'readonly';\r\n let attemptNumber = 0;\r\n while (true) {\r\n ++attemptNumber;\r\n try {\r\n this.db = await this.ensureDb(action);\r\n const transaction = SimpleDbTransaction.open(this.db, action, readonly ? 'readonly' : 'readwrite', objectStores);\r\n const transactionFnResult = transactionFn(transaction)\r\n .next(result => {\r\n transaction.maybeCommit();\r\n return result;\r\n })\r\n .catch(error => {\r\n // Abort the transaction if there was an error.\r\n transaction.abort(error);\r\n // We cannot actually recover, and calling `abort()` will cause the transaction's\r\n // completion promise to be rejected. This in turn means that we won't use\r\n // `transactionFnResult` below. We return a rejection here so that we don't add the\r\n // possibility of returning `void` to the type of `transactionFnResult`.\r\n return PersistencePromise.reject(error);\r\n })\r\n .toPromise();\r\n // As noted above, errors are propagated by aborting the transaction. So\r\n // we swallow any error here to avoid the browser logging it as unhandled.\r\n transactionFnResult.catch(() => { });\r\n // Wait for the transaction to complete (i.e. IndexedDb's onsuccess event to\r\n // fire), but still return the original transactionFnResult back to the\r\n // caller.\r\n await transaction.completionPromise;\r\n return transactionFnResult;\r\n }\r\n catch (e) {\r\n const error = e;\r\n // TODO(schmidt-sebastian): We could probably be smarter about this and\r\n // not retry exceptions that are likely unrecoverable (such as quota\r\n // exceeded errors).\r\n // Note: We cannot use an instanceof check for FirestoreException, since the\r\n // exception is wrapped in a generic error by our async/await handling.\r\n const retryable = error.name !== 'FirebaseError' &&\r\n attemptNumber < TRANSACTION_RETRY_COUNT;\r\n logDebug(LOG_TAG$i, 'Transaction failed with error:', error.message, 'Retrying:', retryable);\r\n this.close();\r\n if (!retryable) {\r\n return Promise.reject(error);\r\n }\r\n }\r\n }\r\n }\r\n close() {\r\n if (this.db) {\r\n this.db.close();\r\n }\r\n this.db = undefined;\r\n }\r\n}\r\n/**\r\n * A controller for iterating over a key range or index. It allows an iterate\r\n * callback to delete the currently-referenced object, or jump to a new key\r\n * within the key range or index.\r\n */\r\nclass IterationController {\r\n constructor(dbCursor) {\r\n this.dbCursor = dbCursor;\r\n this.shouldStop = false;\r\n this.nextKey = null;\r\n }\r\n get isDone() {\r\n return this.shouldStop;\r\n }\r\n get skipToKey() {\r\n return this.nextKey;\r\n }\r\n set cursor(value) {\r\n this.dbCursor = value;\r\n }\r\n /**\r\n * This function can be called to stop iteration at any point.\r\n */\r\n done() {\r\n this.shouldStop = true;\r\n }\r\n /**\r\n * This function can be called to skip to that next key, which could be\r\n * an index or a primary key.\r\n */\r\n skip(key) {\r\n this.nextKey = key;\r\n }\r\n /**\r\n * Delete the current cursor value from the object store.\r\n *\r\n * NOTE: You CANNOT do this with a keysOnly query.\r\n */\r\n delete() {\r\n return wrapRequest(this.dbCursor.delete());\r\n }\r\n}\r\n/** An error that wraps exceptions that thrown during IndexedDB execution. */\r\nclass IndexedDbTransactionError extends FirestoreError {\r\n constructor(actionName, cause) {\r\n super(Code.UNAVAILABLE, `IndexedDB transaction '${actionName}' failed: ${cause}`);\r\n this.name = 'IndexedDbTransactionError';\r\n }\r\n}\r\n/** Verifies whether `e` is an IndexedDbTransactionError. */\r\nfunction isIndexedDbTransactionError(e) {\r\n // Use name equality, as instanceof checks on errors don't work with errors\r\n // that wrap other errors.\r\n return e.name === 'IndexedDbTransactionError';\r\n}\r\n/**\r\n * A wrapper around an IDBObjectStore providing an API that:\r\n *\r\n * 1) Has generic KeyType / ValueType parameters to provide strongly-typed\r\n * methods for acting against the object store.\r\n * 2) Deals with IndexedDB's onsuccess / onerror event callbacks, making every\r\n * method return a PersistencePromise instead.\r\n * 3) Provides a higher-level API to avoid needing to do excessive wrapping of\r\n * intermediate IndexedDB types (IDBCursorWithValue, etc.)\r\n */\r\nclass SimpleDbStore {\r\n constructor(store) {\r\n this.store = store;\r\n }\r\n put(keyOrValue, value) {\r\n let request;\r\n if (value !== undefined) {\r\n logDebug(LOG_TAG$i, 'PUT', this.store.name, keyOrValue, value);\r\n request = this.store.put(value, keyOrValue);\r\n }\r\n else {\r\n logDebug(LOG_TAG$i, 'PUT', this.store.name, '<auto-key>', keyOrValue);\r\n request = this.store.put(keyOrValue);\r\n }\r\n return wrapRequest(request);\r\n }\r\n /**\r\n * Adds a new value into an Object Store and returns the new key. Similar to\r\n * IndexedDb's `add()`, this method will fail on primary key collisions.\r\n *\r\n * @param value - The object to write.\r\n * @returns The key of the value to add.\r\n */\r\n add(value) {\r\n logDebug(LOG_TAG$i, 'ADD', this.store.name, value, value);\r\n const request = this.store.add(value);\r\n return wrapRequest(request);\r\n }\r\n /**\r\n * Gets the object with the specified key from the specified store, or null\r\n * if no object exists with the specified key.\r\n *\r\n * @key The key of the object to get.\r\n * @returns The object with the specified key or null if no object exists.\r\n */\r\n get(key) {\r\n const request = this.store.get(key);\r\n // We're doing an unsafe cast to ValueType.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return wrapRequest(request).next(result => {\r\n // Normalize nonexistence to null.\r\n if (result === undefined) {\r\n result = null;\r\n }\r\n logDebug(LOG_TAG$i, 'GET', this.store.name, key, result);\r\n return result;\r\n });\r\n }\r\n delete(key) {\r\n logDebug(LOG_TAG$i, 'DELETE', this.store.name, key);\r\n const request = this.store.delete(key);\r\n return wrapRequest(request);\r\n }\r\n /**\r\n * If we ever need more of the count variants, we can add overloads. For now,\r\n * all we need is to count everything in a store.\r\n *\r\n * Returns the number of rows in the store.\r\n */\r\n count() {\r\n logDebug(LOG_TAG$i, 'COUNT', this.store.name);\r\n const request = this.store.count();\r\n return wrapRequest(request);\r\n }\r\n loadAll(indexOrRange, range) {\r\n const iterateOptions = this.options(indexOrRange, range);\r\n // Use `getAll()` if the browser supports IndexedDB v3, as it is roughly\r\n // 20% faster. Unfortunately, getAll() does not support custom indices.\r\n if (!iterateOptions.index && typeof this.store.getAll === 'function') {\r\n const request = this.store.getAll(iterateOptions.range);\r\n return new PersistencePromise((resolve, reject) => {\r\n request.onerror = (event) => {\r\n reject(event.target.error);\r\n };\r\n request.onsuccess = (event) => {\r\n resolve(event.target.result);\r\n };\r\n });\r\n }\r\n else {\r\n const cursor = this.cursor(iterateOptions);\r\n const results = [];\r\n return this.iterateCursor(cursor, (key, value) => {\r\n results.push(value);\r\n }).next(() => {\r\n return results;\r\n });\r\n }\r\n }\r\n /**\r\n * Loads the first `count` elements from the provided index range. Loads all\r\n * elements if no limit is provided.\r\n */\r\n loadFirst(range, count) {\r\n const request = this.store.getAll(range, count === null ? undefined : count);\r\n return new PersistencePromise((resolve, reject) => {\r\n request.onerror = (event) => {\r\n reject(event.target.error);\r\n };\r\n request.onsuccess = (event) => {\r\n resolve(event.target.result);\r\n };\r\n });\r\n }\r\n deleteAll(indexOrRange, range) {\r\n logDebug(LOG_TAG$i, 'DELETE ALL', this.store.name);\r\n const options = this.options(indexOrRange, range);\r\n options.keysOnly = false;\r\n const cursor = this.cursor(options);\r\n return this.iterateCursor(cursor, (key, value, control) => {\r\n // NOTE: Calling delete() on a cursor is documented as more efficient than\r\n // calling delete() on an object store with a single key\r\n // (https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/delete),\r\n // however, this requires us *not* to use a keysOnly cursor\r\n // (https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor/delete). We\r\n // may want to compare the performance of each method.\r\n return control.delete();\r\n });\r\n }\r\n iterate(optionsOrCallback, callback) {\r\n let options;\r\n if (!callback) {\r\n options = {};\r\n callback = optionsOrCallback;\r\n }\r\n else {\r\n options = optionsOrCallback;\r\n }\r\n const cursor = this.cursor(options);\r\n return this.iterateCursor(cursor, callback);\r\n }\r\n /**\r\n * Iterates over a store, but waits for the given callback to complete for\r\n * each entry before iterating the next entry. This allows the callback to do\r\n * asynchronous work to determine if this iteration should continue.\r\n *\r\n * The provided callback should return `true` to continue iteration, and\r\n * `false` otherwise.\r\n */\r\n iterateSerial(callback) {\r\n const cursorRequest = this.cursor({});\r\n return new PersistencePromise((resolve, reject) => {\r\n cursorRequest.onerror = (event) => {\r\n const error = checkForAndReportiOSError(event.target.error);\r\n reject(error);\r\n };\r\n cursorRequest.onsuccess = (event) => {\r\n const cursor = event.target.result;\r\n if (!cursor) {\r\n resolve();\r\n return;\r\n }\r\n callback(cursor.primaryKey, cursor.value).next(shouldContinue => {\r\n if (shouldContinue) {\r\n cursor.continue();\r\n }\r\n else {\r\n resolve();\r\n }\r\n });\r\n };\r\n });\r\n }\r\n iterateCursor(cursorRequest, fn) {\r\n const results = [];\r\n return new PersistencePromise((resolve, reject) => {\r\n cursorRequest.onerror = (event) => {\r\n reject(event.target.error);\r\n };\r\n cursorRequest.onsuccess = (event) => {\r\n const cursor = event.target.result;\r\n if (!cursor) {\r\n resolve();\r\n return;\r\n }\r\n const controller = new IterationController(cursor);\r\n const userResult = fn(cursor.primaryKey, cursor.value, controller);\r\n if (userResult instanceof PersistencePromise) {\r\n const userPromise = userResult.catch(err => {\r\n controller.done();\r\n return PersistencePromise.reject(err);\r\n });\r\n results.push(userPromise);\r\n }\r\n if (controller.isDone) {\r\n resolve();\r\n }\r\n else if (controller.skipToKey === null) {\r\n cursor.continue();\r\n }\r\n else {\r\n cursor.continue(controller.skipToKey);\r\n }\r\n };\r\n }).next(() => PersistencePromise.waitFor(results));\r\n }\r\n options(indexOrRange, range) {\r\n let indexName = undefined;\r\n if (indexOrRange !== undefined) {\r\n if (typeof indexOrRange === 'string') {\r\n indexName = indexOrRange;\r\n }\r\n else {\r\n range = indexOrRange;\r\n }\r\n }\r\n return { index: indexName, range };\r\n }\r\n cursor(options) {\r\n let direction = 'next';\r\n if (options.reverse) {\r\n direction = 'prev';\r\n }\r\n if (options.index) {\r\n const index = this.store.index(options.index);\r\n if (options.keysOnly) {\r\n return index.openKeyCursor(options.range, direction);\r\n }\r\n else {\r\n return index.openCursor(options.range, direction);\r\n }\r\n }\r\n else {\r\n return this.store.openCursor(options.range, direction);\r\n }\r\n }\r\n}\r\n/**\r\n * Wraps an IDBRequest in a PersistencePromise, using the onsuccess / onerror\r\n * handlers to resolve / reject the PersistencePromise as appropriate.\r\n */\r\nfunction wrapRequest(request) {\r\n return new PersistencePromise((resolve, reject) => {\r\n request.onsuccess = (event) => {\r\n const result = event.target.result;\r\n resolve(result);\r\n };\r\n request.onerror = (event) => {\r\n const error = checkForAndReportiOSError(event.target.error);\r\n reject(error);\r\n };\r\n });\r\n}\r\n// Guard so we only report the error once.\r\nlet reportedIOSError = false;\r\nfunction checkForAndReportiOSError(error) {\r\n const iOSVersion = SimpleDb.getIOSVersion(getUA());\r\n if (iOSVersion >= 12.2 && iOSVersion < 13) {\r\n const IOS_ERROR = 'An internal error was encountered in the Indexed Database server';\r\n if (error.message.indexOf(IOS_ERROR) >= 0) {\r\n // Wrap error in a more descriptive one.\r\n const newError = new FirestoreError('internal', `IOS_INDEXEDDB_BUG1: IndexedDb has thrown '${IOS_ERROR}'. This is likely ` +\r\n `due to an unavoidable bug in iOS. See https://stackoverflow.com/q/56496296/110915 ` +\r\n `for details and a potential workaround.`);\r\n if (!reportedIOSError) {\r\n reportedIOSError = true;\r\n // Throw a global exception outside of this promise chain, for the user to\r\n // potentially catch.\r\n setTimeout(() => {\r\n throw newError;\r\n }, 0);\r\n }\r\n return newError;\r\n }\r\n }\r\n return error;\r\n}\n\nconst LOG_TAG$h = 'IndexBackiller';\r\n/** How long we wait to try running index backfill after SDK initialization. */\r\nconst INITIAL_BACKFILL_DELAY_MS = 15 * 1000;\r\n/** Minimum amount of time between backfill checks, after the first one. */\r\nconst REGULAR_BACKFILL_DELAY_MS = 60 * 1000;\r\n/** The maximum number of documents to process each time backfill() is called. */\r\nconst MAX_DOCUMENTS_TO_PROCESS = 50;\r\n/** This class is responsible for the scheduling of Index Backfiller. */\r\nclass IndexBackfillerScheduler {\r\n constructor(asyncQueue, backfiller) {\r\n this.asyncQueue = asyncQueue;\r\n this.backfiller = backfiller;\r\n this.task = null;\r\n }\r\n start() {\r\n this.schedule(INITIAL_BACKFILL_DELAY_MS);\r\n }\r\n stop() {\r\n if (this.task) {\r\n this.task.cancel();\r\n this.task = null;\r\n }\r\n }\r\n get started() {\r\n return this.task !== null;\r\n }\r\n schedule(delay) {\r\n logDebug(LOG_TAG$h, `Scheduled in ${delay}ms`);\r\n this.task = this.asyncQueue.enqueueAfterDelay(\"index_backfill\" /* TimerId.IndexBackfill */, delay, async () => {\r\n this.task = null;\r\n try {\r\n const documentsProcessed = await this.backfiller.backfill();\r\n logDebug(LOG_TAG$h, `Documents written: ${documentsProcessed}`);\r\n }\r\n catch (e) {\r\n if (isIndexedDbTransactionError(e)) {\r\n logDebug(LOG_TAG$h, 'Ignoring IndexedDB error during index backfill: ', e);\r\n }\r\n else {\r\n await ignoreIfPrimaryLeaseLoss(e);\r\n }\r\n }\r\n await this.schedule(REGULAR_BACKFILL_DELAY_MS);\r\n });\r\n }\r\n}\r\n/** Implements the steps for backfilling indexes. */\r\nclass IndexBackfiller {\r\n constructor(\r\n /**\r\n * LocalStore provides access to IndexManager and LocalDocumentView.\r\n * These properties will update when the user changes. Consequently,\r\n * making a local copy of IndexManager and LocalDocumentView will require\r\n * updates over time. The simpler solution is to rely on LocalStore to have\r\n * an up-to-date references to IndexManager and LocalDocumentStore.\r\n */\r\n localStore, persistence) {\r\n this.localStore = localStore;\r\n this.persistence = persistence;\r\n }\r\n async backfill(maxDocumentsToProcess = MAX_DOCUMENTS_TO_PROCESS) {\r\n return this.persistence.runTransaction('Backfill Indexes', 'readwrite-primary', txn => this.writeIndexEntries(txn, maxDocumentsToProcess));\r\n }\r\n /** Writes index entries until the cap is reached. Returns the number of documents processed. */\r\n writeIndexEntries(transation, maxDocumentsToProcess) {\r\n const processedCollectionGroups = new Set();\r\n let documentsRemaining = maxDocumentsToProcess;\r\n let continueLoop = true;\r\n return PersistencePromise.doWhile(() => continueLoop === true && documentsRemaining > 0, () => {\r\n return this.localStore.indexManager\r\n .getNextCollectionGroupToUpdate(transation)\r\n .next((collectionGroup) => {\r\n if (collectionGroup === null ||\r\n processedCollectionGroups.has(collectionGroup)) {\r\n continueLoop = false;\r\n }\r\n else {\r\n logDebug(LOG_TAG$h, `Processing collection: ${collectionGroup}`);\r\n return this.writeEntriesForCollectionGroup(transation, collectionGroup, documentsRemaining).next(documentsProcessed => {\r\n documentsRemaining -= documentsProcessed;\r\n processedCollectionGroups.add(collectionGroup);\r\n });\r\n }\r\n });\r\n }).next(() => maxDocumentsToProcess - documentsRemaining);\r\n }\r\n /**\r\n * Writes entries for the provided collection group. Returns the number of documents processed.\r\n */\r\n writeEntriesForCollectionGroup(transaction, collectionGroup, documentsRemainingUnderCap) {\r\n // Use the earliest offset of all field indexes to query the local cache.\r\n return this.localStore.indexManager\r\n .getMinOffsetFromCollectionGroup(transaction, collectionGroup)\r\n .next(existingOffset => this.localStore.localDocuments\r\n .getNextDocuments(transaction, collectionGroup, existingOffset, documentsRemainingUnderCap)\r\n .next(nextBatch => {\r\n const docs = nextBatch.changes;\r\n return this.localStore.indexManager\r\n .updateIndexEntries(transaction, docs)\r\n .next(() => this.getNewOffset(existingOffset, nextBatch))\r\n .next(newOffset => {\r\n logDebug(LOG_TAG$h, `Updating offset: ${newOffset}`);\r\n return this.localStore.indexManager.updateCollectionGroup(transaction, collectionGroup, newOffset);\r\n })\r\n .next(() => docs.size);\r\n }));\r\n }\r\n /** Returns the next offset based on the provided documents. */\r\n getNewOffset(existingOffset, lookupResult) {\r\n let maxOffset = existingOffset;\r\n lookupResult.changes.forEach((key, document) => {\r\n const newOffset = newIndexOffsetFromDocument(document);\r\n if (indexOffsetComparator(newOffset, maxOffset) > 0) {\r\n maxOffset = newOffset;\r\n }\r\n });\r\n return new IndexOffset(maxOffset.readTime, maxOffset.documentKey, Math.max(lookupResult.batchId, existingOffset.largestBatchId));\r\n }\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\n/**\r\n * `ListenSequence` is a monotonic sequence. It is initialized with a minimum value to\r\n * exceed. All subsequent calls to next will return increasing values. If provided with a\r\n * `SequenceNumberSyncer`, it will additionally bump its next value when told of a new value, as\r\n * well as write out sequence numbers that it produces via `next()`.\r\n */\r\nclass ListenSequence {\r\n constructor(previousValue, sequenceNumberSyncer) {\r\n this.previousValue = previousValue;\r\n if (sequenceNumberSyncer) {\r\n sequenceNumberSyncer.sequenceNumberHandler = sequenceNumber => this.setPreviousValue(sequenceNumber);\r\n this.writeNewSequenceNumber = sequenceNumber => sequenceNumberSyncer.writeSequenceNumber(sequenceNumber);\r\n }\r\n }\r\n setPreviousValue(externalPreviousValue) {\r\n this.previousValue = Math.max(externalPreviousValue, this.previousValue);\r\n return this.previousValue;\r\n }\r\n next() {\r\n const nextValue = ++this.previousValue;\r\n if (this.writeNewSequenceNumber) {\r\n this.writeNewSequenceNumber(nextValue);\r\n }\r\n return nextValue;\r\n }\r\n}\r\nListenSequence.INVALID = -1;\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 escapeChar = '\\u0001';\r\nconst encodedSeparatorChar = '\\u0001';\r\nconst encodedNul = '\\u0010';\r\nconst encodedEscape = '\\u0011';\r\n/**\r\n * Encodes a resource path into a IndexedDb-compatible string form.\r\n */\r\nfunction encodeResourcePath(path) {\r\n let result = '';\r\n for (let i = 0; i < path.length; i++) {\r\n if (result.length > 0) {\r\n result = encodeSeparator(result);\r\n }\r\n result = encodeSegment(path.get(i), result);\r\n }\r\n return encodeSeparator(result);\r\n}\r\n/** Encodes a single segment of a resource path into the given result */\r\nfunction encodeSegment(segment, resultBuf) {\r\n let result = resultBuf;\r\n const length = segment.length;\r\n for (let i = 0; i < length; i++) {\r\n const c = segment.charAt(i);\r\n switch (c) {\r\n case '\\0':\r\n result += escapeChar + encodedNul;\r\n break;\r\n case escapeChar:\r\n result += escapeChar + encodedEscape;\r\n break;\r\n default:\r\n result += c;\r\n }\r\n }\r\n return result;\r\n}\r\n/** Encodes a path separator into the given result */\r\nfunction encodeSeparator(result) {\r\n return result + escapeChar + encodedSeparatorChar;\r\n}\r\n/**\r\n * Decodes the given IndexedDb-compatible string form of a resource path into\r\n * a ResourcePath instance. Note that this method is not suitable for use with\r\n * decoding resource names from the server; those are One Platform format\r\n * strings.\r\n */\r\nfunction decodeResourcePath(path) {\r\n // Event the empty path must encode as a path of at least length 2. A path\r\n // with exactly 2 must be the empty path.\r\n const length = path.length;\r\n hardAssert(length >= 2);\r\n if (length === 2) {\r\n hardAssert(path.charAt(0) === escapeChar && path.charAt(1) === encodedSeparatorChar);\r\n return ResourcePath.emptyPath();\r\n }\r\n // Escape characters cannot exist past the second-to-last position in the\r\n // source value.\r\n const lastReasonableEscapeIndex = length - 2;\r\n const segments = [];\r\n let segmentBuilder = '';\r\n for (let start = 0; start < length;) {\r\n // The last two characters of a valid encoded path must be a separator, so\r\n // there must be an end to this segment.\r\n const end = path.indexOf(escapeChar, start);\r\n if (end < 0 || end > lastReasonableEscapeIndex) {\r\n fail();\r\n }\r\n const next = path.charAt(end + 1);\r\n switch (next) {\r\n case encodedSeparatorChar:\r\n const currentPiece = path.substring(start, end);\r\n let segment;\r\n if (segmentBuilder.length === 0) {\r\n // Avoid copying for the common case of a segment that excludes \\0\r\n // and \\001\r\n segment = currentPiece;\r\n }\r\n else {\r\n segmentBuilder += currentPiece;\r\n segment = segmentBuilder;\r\n segmentBuilder = '';\r\n }\r\n segments.push(segment);\r\n break;\r\n case encodedNul:\r\n segmentBuilder += path.substring(start, end);\r\n segmentBuilder += '\\0';\r\n break;\r\n case encodedEscape:\r\n // The escape character can be used in the output to encode itself.\r\n segmentBuilder += path.substring(start, end + 1);\r\n break;\r\n default:\r\n fail();\r\n }\r\n start = end + 2;\r\n }\r\n return new ResourcePath(segments);\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 DbRemoteDocumentStore$1 = 'remoteDocuments';\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 * Name of the IndexedDb object store.\r\n *\r\n * Note that the name 'owner' is chosen to ensure backwards compatibility with\r\n * older clients that only supported single locked access to the persistence\r\n * layer.\r\n */\r\nconst DbPrimaryClientStore = 'owner';\r\n/**\r\n * The key string used for the single object that exists in the\r\n * DbPrimaryClient store.\r\n */\r\nconst DbPrimaryClientKey = 'owner';\r\n/** Name of the IndexedDb object store. */\r\nconst DbMutationQueueStore = 'mutationQueues';\r\n/** Keys are automatically assigned via the userId property. */\r\nconst DbMutationQueueKeyPath = 'userId';\r\n/** Name of the IndexedDb object store. */\r\nconst DbMutationBatchStore = 'mutations';\r\n/** Keys are automatically assigned via the userId, batchId properties. */\r\nconst DbMutationBatchKeyPath = 'batchId';\r\n/** The index name for lookup of mutations by user. */\r\nconst DbMutationBatchUserMutationsIndex = 'userMutationsIndex';\r\n/** The user mutations index is keyed by [userId, batchId] pairs. */\r\nconst DbMutationBatchUserMutationsKeyPath = ['userId', 'batchId'];\r\n/**\r\n * Creates a [userId] key for use in the DbDocumentMutations index to iterate\r\n * over all of a user's document mutations.\r\n */\r\nfunction newDbDocumentMutationPrefixForUser(userId) {\r\n return [userId];\r\n}\r\n/**\r\n * Creates a [userId, encodedPath] key for use in the DbDocumentMutations\r\n * index to iterate over all at document mutations for a given path or lower.\r\n */\r\nfunction newDbDocumentMutationPrefixForPath(userId, path) {\r\n return [userId, encodeResourcePath(path)];\r\n}\r\n/**\r\n * Creates a full index key of [userId, encodedPath, batchId] for inserting\r\n * and deleting into the DbDocumentMutations index.\r\n */\r\nfunction newDbDocumentMutationKey(userId, path, batchId) {\r\n return [userId, encodeResourcePath(path), batchId];\r\n}\r\n/**\r\n * Because we store all the useful information for this store in the key,\r\n * there is no useful information to store as the value. The raw (unencoded)\r\n * path cannot be stored because IndexedDb doesn't store prototype\r\n * information.\r\n */\r\nconst DbDocumentMutationPlaceholder = {};\r\nconst DbDocumentMutationStore = 'documentMutations';\r\nconst DbRemoteDocumentStore = 'remoteDocumentsV14';\r\n/**\r\n * The primary key of the remote documents store, which allows for efficient\r\n * access by collection path and read time.\r\n */\r\nconst DbRemoteDocumentKeyPath = [\r\n 'prefixPath',\r\n 'collectionGroup',\r\n 'readTime',\r\n 'documentId'\r\n];\r\n/** An index that provides access to documents by key. */\r\nconst DbRemoteDocumentDocumentKeyIndex = 'documentKeyIndex';\r\nconst DbRemoteDocumentDocumentKeyIndexPath = [\r\n 'prefixPath',\r\n 'collectionGroup',\r\n 'documentId'\r\n];\r\n/**\r\n * An index that provides access to documents by collection group and read\r\n * time.\r\n *\r\n * This index is used by the index backfiller.\r\n */\r\nconst DbRemoteDocumentCollectionGroupIndex = 'collectionGroupIndex';\r\nconst DbRemoteDocumentCollectionGroupIndexPath = [\r\n 'collectionGroup',\r\n 'readTime',\r\n 'prefixPath',\r\n 'documentId'\r\n];\r\nconst DbRemoteDocumentGlobalStore = 'remoteDocumentGlobal';\r\nconst DbRemoteDocumentGlobalKey = 'remoteDocumentGlobalKey';\r\nconst DbTargetStore = 'targets';\r\n/** Keys are automatically assigned via the targetId property. */\r\nconst DbTargetKeyPath = 'targetId';\r\n/** The name of the queryTargets index. */\r\nconst DbTargetQueryTargetsIndexName = 'queryTargetsIndex';\r\n/**\r\n * The index of all canonicalIds to the targets that they match. This is not\r\n * a unique mapping because canonicalId does not promise a unique name for all\r\n * possible queries, so we append the targetId to make the mapping unique.\r\n */\r\nconst DbTargetQueryTargetsKeyPath = ['canonicalId', 'targetId'];\r\n/** Name of the IndexedDb object store. */\r\nconst DbTargetDocumentStore = 'targetDocuments';\r\n/** Keys are automatically assigned via the targetId, path properties. */\r\nconst DbTargetDocumentKeyPath = ['targetId', 'path'];\r\n/** The index name for the reverse index. */\r\nconst DbTargetDocumentDocumentTargetsIndex = 'documentTargetsIndex';\r\n/** We also need to create the reverse index for these properties. */\r\nconst DbTargetDocumentDocumentTargetsKeyPath = ['path', 'targetId'];\r\n/**\r\n * The key string used for the single object that exists in the\r\n * DbTargetGlobal store.\r\n */\r\nconst DbTargetGlobalKey = 'targetGlobalKey';\r\nconst DbTargetGlobalStore = 'targetGlobal';\r\n/** Name of the IndexedDb object store. */\r\nconst DbCollectionParentStore = 'collectionParents';\r\n/** Keys are automatically assigned via the collectionId, parent properties. */\r\nconst DbCollectionParentKeyPath = ['collectionId', 'parent'];\r\n/** Name of the IndexedDb object store. */\r\nconst DbClientMetadataStore = 'clientMetadata';\r\n/** Keys are automatically assigned via the clientId properties. */\r\nconst DbClientMetadataKeyPath = 'clientId';\r\n/** Name of the IndexedDb object store. */\r\nconst DbBundleStore = 'bundles';\r\nconst DbBundleKeyPath = 'bundleId';\r\n/** Name of the IndexedDb object store. */\r\nconst DbNamedQueryStore = 'namedQueries';\r\nconst DbNamedQueryKeyPath = 'name';\r\n/** Name of the IndexedDb object store. */\r\nconst DbIndexConfigurationStore = 'indexConfiguration';\r\nconst DbIndexConfigurationKeyPath = 'indexId';\r\n/**\r\n * An index that provides access to the index configurations by collection\r\n * group.\r\n *\r\n * PORTING NOTE: iOS and Android maintain this index in-memory, but this is\r\n * not possible here as the Web client supports concurrent access to\r\n * persistence via multi-tab.\r\n */\r\nconst DbIndexConfigurationCollectionGroupIndex = 'collectionGroupIndex';\r\nconst DbIndexConfigurationCollectionGroupIndexPath = 'collectionGroup';\r\n/** Name of the IndexedDb object store. */\r\nconst DbIndexStateStore = 'indexState';\r\nconst DbIndexStateKeyPath = ['indexId', 'uid'];\r\n/**\r\n * An index that provides access to documents in a collection sorted by last\r\n * update time. Used by the backfiller.\r\n *\r\n * PORTING NOTE: iOS and Android maintain this index in-memory, but this is\r\n * not possible here as the Web client supports concurrent access to\r\n * persistence via multi-tab.\r\n */\r\nconst DbIndexStateSequenceNumberIndex = 'sequenceNumberIndex';\r\nconst DbIndexStateSequenceNumberIndexPath = ['uid', 'sequenceNumber'];\r\n/** Name of the IndexedDb object store. */\r\nconst DbIndexEntryStore = 'indexEntries';\r\nconst DbIndexEntryKeyPath = [\r\n 'indexId',\r\n 'uid',\r\n 'arrayValue',\r\n 'directionalValue',\r\n 'orderedDocumentKey',\r\n 'documentKey'\r\n];\r\nconst DbIndexEntryDocumentKeyIndex = 'documentKeyIndex';\r\nconst DbIndexEntryDocumentKeyIndexPath = [\r\n 'indexId',\r\n 'uid',\r\n 'orderedDocumentKey'\r\n];\r\n/** Name of the IndexedDb object store. */\r\nconst DbDocumentOverlayStore = 'documentOverlays';\r\nconst DbDocumentOverlayKeyPath = [\r\n 'userId',\r\n 'collectionPath',\r\n 'documentId'\r\n];\r\nconst DbDocumentOverlayCollectionPathOverlayIndex = 'collectionPathOverlayIndex';\r\nconst DbDocumentOverlayCollectionPathOverlayIndexPath = [\r\n 'userId',\r\n 'collectionPath',\r\n 'largestBatchId'\r\n];\r\nconst DbDocumentOverlayCollectionGroupOverlayIndex = 'collectionGroupOverlayIndex';\r\nconst DbDocumentOverlayCollectionGroupOverlayIndexPath = [\r\n 'userId',\r\n 'collectionGroup',\r\n 'largestBatchId'\r\n];\r\n// Visible for testing\r\nconst V1_STORES = [\r\n DbMutationQueueStore,\r\n DbMutationBatchStore,\r\n DbDocumentMutationStore,\r\n DbRemoteDocumentStore$1,\r\n DbTargetStore,\r\n DbPrimaryClientStore,\r\n DbTargetGlobalStore,\r\n DbTargetDocumentStore\r\n];\r\n// Visible for testing\r\nconst V3_STORES = V1_STORES;\r\n// Note: DbRemoteDocumentChanges is no longer used and dropped with v9.\r\nconst V4_STORES = [...V3_STORES, DbClientMetadataStore];\r\nconst V6_STORES = [...V4_STORES, DbRemoteDocumentGlobalStore];\r\nconst V8_STORES = [...V6_STORES, DbCollectionParentStore];\r\nconst V11_STORES = [...V8_STORES, DbBundleStore, DbNamedQueryStore];\r\nconst V12_STORES = [...V11_STORES, DbDocumentOverlayStore];\r\nconst V13_STORES = [\r\n DbMutationQueueStore,\r\n DbMutationBatchStore,\r\n DbDocumentMutationStore,\r\n DbRemoteDocumentStore,\r\n DbTargetStore,\r\n DbPrimaryClientStore,\r\n DbTargetGlobalStore,\r\n DbTargetDocumentStore,\r\n DbClientMetadataStore,\r\n DbRemoteDocumentGlobalStore,\r\n DbCollectionParentStore,\r\n DbBundleStore,\r\n DbNamedQueryStore,\r\n DbDocumentOverlayStore\r\n];\r\nconst V14_STORES = V13_STORES;\r\nconst V15_STORES = [\r\n ...V14_STORES,\r\n DbIndexConfigurationStore,\r\n DbIndexStateStore,\r\n DbIndexEntryStore\r\n];\r\n/** Returns the object stores for the provided schema. */\r\nfunction getObjectStores(schemaVersion) {\r\n if (schemaVersion === 15) {\r\n return V15_STORES;\r\n }\r\n else if (schemaVersion === 14) {\r\n return V14_STORES;\r\n }\r\n else if (schemaVersion === 13) {\r\n return V13_STORES;\r\n }\r\n else if (schemaVersion === 12) {\r\n return V12_STORES;\r\n }\r\n else if (schemaVersion === 11) {\r\n return V11_STORES;\r\n }\r\n else {\r\n fail();\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 IndexedDbTransaction extends PersistenceTransaction {\r\n constructor(simpleDbTransaction, currentSequenceNumber) {\r\n super();\r\n this.simpleDbTransaction = simpleDbTransaction;\r\n this.currentSequenceNumber = currentSequenceNumber;\r\n }\r\n}\r\nfunction getStore(txn, store) {\r\n const indexedDbTransaction = debugCast(txn);\r\n return SimpleDb.getStore(indexedDbTransaction.simpleDbTransaction, store);\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 objectSize(obj) {\r\n let count = 0;\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n count++;\r\n }\r\n }\r\n return count;\r\n}\r\nfunction forEach(obj, fn) {\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n fn(key, obj[key]);\r\n }\r\n }\r\n}\r\nfunction mapToArray(obj, fn) {\r\n const result = [];\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n result.push(fn(obj[key], key, obj));\r\n }\r\n }\r\n return result;\r\n}\r\nfunction isEmpty(obj) {\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n return true;\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// An immutable sorted map implementation, based on a Left-leaning Red-Black\r\n// tree.\r\nclass SortedMap {\r\n constructor(comparator, root) {\r\n this.comparator = comparator;\r\n this.root = root ? root : LLRBNode.EMPTY;\r\n }\r\n // Returns a copy of the map, with the specified key/value added or replaced.\r\n insert(key, value) {\r\n return new SortedMap(this.comparator, this.root\r\n .insert(key, value, this.comparator)\r\n .copy(null, null, LLRBNode.BLACK, null, null));\r\n }\r\n // Returns a copy of the map, with the specified key removed.\r\n remove(key) {\r\n return new SortedMap(this.comparator, this.root\r\n .remove(key, this.comparator)\r\n .copy(null, null, LLRBNode.BLACK, null, null));\r\n }\r\n // Returns the value of the node with the given key, or null.\r\n get(key) {\r\n let node = this.root;\r\n while (!node.isEmpty()) {\r\n const cmp = this.comparator(key, node.key);\r\n if (cmp === 0) {\r\n return node.value;\r\n }\r\n else if (cmp < 0) {\r\n node = node.left;\r\n }\r\n else if (cmp > 0) {\r\n node = node.right;\r\n }\r\n }\r\n return null;\r\n }\r\n // Returns the index of the element in this sorted map, or -1 if it doesn't\r\n // exist.\r\n indexOf(key) {\r\n // Number of nodes that were pruned when descending right\r\n let prunedNodes = 0;\r\n let node = this.root;\r\n while (!node.isEmpty()) {\r\n const cmp = this.comparator(key, node.key);\r\n if (cmp === 0) {\r\n return prunedNodes + node.left.size;\r\n }\r\n else if (cmp < 0) {\r\n node = node.left;\r\n }\r\n else {\r\n // Count all nodes left of the node plus the node itself\r\n prunedNodes += node.left.size + 1;\r\n node = node.right;\r\n }\r\n }\r\n // Node not found\r\n return -1;\r\n }\r\n isEmpty() {\r\n return this.root.isEmpty();\r\n }\r\n // Returns the total number of nodes in the map.\r\n get size() {\r\n return this.root.size;\r\n }\r\n // Returns the minimum key in the map.\r\n minKey() {\r\n return this.root.minKey();\r\n }\r\n // Returns the maximum key in the map.\r\n maxKey() {\r\n return this.root.maxKey();\r\n }\r\n // Traverses the map in key order and calls the specified action function\r\n // for each key/value pair. If action returns true, traversal is aborted.\r\n // Returns the first truthy value returned by action, or the last falsey\r\n // value returned by action.\r\n inorderTraversal(action) {\r\n return this.root.inorderTraversal(action);\r\n }\r\n forEach(fn) {\r\n this.inorderTraversal((k, v) => {\r\n fn(k, v);\r\n return false;\r\n });\r\n }\r\n toString() {\r\n const descriptions = [];\r\n this.inorderTraversal((k, v) => {\r\n descriptions.push(`${k}:${v}`);\r\n return false;\r\n });\r\n return `{${descriptions.join(', ')}}`;\r\n }\r\n // Traverses the map in reverse key order and calls the specified action\r\n // function for each key/value pair. If action returns true, traversal is\r\n // aborted.\r\n // Returns the first truthy value returned by action, or the last falsey\r\n // value returned by action.\r\n reverseTraversal(action) {\r\n return this.root.reverseTraversal(action);\r\n }\r\n // Returns an iterator over the SortedMap.\r\n getIterator() {\r\n return new SortedMapIterator(this.root, null, this.comparator, false);\r\n }\r\n getIteratorFrom(key) {\r\n return new SortedMapIterator(this.root, key, this.comparator, false);\r\n }\r\n getReverseIterator() {\r\n return new SortedMapIterator(this.root, null, this.comparator, true);\r\n }\r\n getReverseIteratorFrom(key) {\r\n return new SortedMapIterator(this.root, key, this.comparator, true);\r\n }\r\n} // end SortedMap\r\n// An iterator over an LLRBNode.\r\nclass SortedMapIterator {\r\n constructor(node, startKey, comparator, isReverse) {\r\n this.isReverse = isReverse;\r\n this.nodeStack = [];\r\n let cmp = 1;\r\n while (!node.isEmpty()) {\r\n cmp = startKey ? comparator(node.key, startKey) : 1;\r\n // flip the comparison if we're going in reverse\r\n if (startKey && isReverse) {\r\n cmp *= -1;\r\n }\r\n if (cmp < 0) {\r\n // This node is less than our start key. ignore it\r\n if (this.isReverse) {\r\n node = node.left;\r\n }\r\n else {\r\n node = node.right;\r\n }\r\n }\r\n else if (cmp === 0) {\r\n // This node is exactly equal to our start key. Push it on the stack,\r\n // but stop iterating;\r\n this.nodeStack.push(node);\r\n break;\r\n }\r\n else {\r\n // This node is greater than our start key, add it to the stack and move\r\n // to the next one\r\n this.nodeStack.push(node);\r\n if (this.isReverse) {\r\n node = node.right;\r\n }\r\n else {\r\n node = node.left;\r\n }\r\n }\r\n }\r\n }\r\n getNext() {\r\n let node = this.nodeStack.pop();\r\n const result = { key: node.key, value: node.value };\r\n if (this.isReverse) {\r\n node = node.left;\r\n while (!node.isEmpty()) {\r\n this.nodeStack.push(node);\r\n node = node.right;\r\n }\r\n }\r\n else {\r\n node = node.right;\r\n while (!node.isEmpty()) {\r\n this.nodeStack.push(node);\r\n node = node.left;\r\n }\r\n }\r\n return result;\r\n }\r\n hasNext() {\r\n return this.nodeStack.length > 0;\r\n }\r\n peek() {\r\n if (this.nodeStack.length === 0) {\r\n return null;\r\n }\r\n const node = this.nodeStack[this.nodeStack.length - 1];\r\n return { key: node.key, value: node.value };\r\n }\r\n} // end SortedMapIterator\r\n// Represents a node in a Left-leaning Red-Black tree.\r\nclass LLRBNode {\r\n constructor(key, value, color, left, right) {\r\n this.key = key;\r\n this.value = value;\r\n this.color = color != null ? color : LLRBNode.RED;\r\n this.left = left != null ? left : LLRBNode.EMPTY;\r\n this.right = right != null ? right : LLRBNode.EMPTY;\r\n this.size = this.left.size + 1 + this.right.size;\r\n }\r\n // Returns a copy of the current node, optionally replacing pieces of it.\r\n copy(key, value, color, left, right) {\r\n return new LLRBNode(key != null ? key : this.key, value != null ? value : this.value, color != null ? color : this.color, left != null ? left : this.left, right != null ? right : this.right);\r\n }\r\n isEmpty() {\r\n return false;\r\n }\r\n // Traverses the tree in key order and calls the specified action function\r\n // for each node. If action returns true, traversal is aborted.\r\n // Returns the first truthy value returned by action, or the last falsey\r\n // value returned by action.\r\n inorderTraversal(action) {\r\n return (this.left.inorderTraversal(action) ||\r\n action(this.key, this.value) ||\r\n this.right.inorderTraversal(action));\r\n }\r\n // Traverses the tree in reverse key order and calls the specified action\r\n // function for each node. If action returns true, traversal is aborted.\r\n // Returns the first truthy value returned by action, or the last falsey\r\n // value returned by action.\r\n reverseTraversal(action) {\r\n return (this.right.reverseTraversal(action) ||\r\n action(this.key, this.value) ||\r\n this.left.reverseTraversal(action));\r\n }\r\n // Returns the minimum node in the tree.\r\n min() {\r\n if (this.left.isEmpty()) {\r\n return this;\r\n }\r\n else {\r\n return this.left.min();\r\n }\r\n }\r\n // Returns the maximum key in the tree.\r\n minKey() {\r\n return this.min().key;\r\n }\r\n // Returns the maximum key in the tree.\r\n maxKey() {\r\n if (this.right.isEmpty()) {\r\n return this.key;\r\n }\r\n else {\r\n return this.right.maxKey();\r\n }\r\n }\r\n // Returns new tree, with the key/value added.\r\n insert(key, value, comparator) {\r\n let n = this;\r\n const cmp = comparator(key, n.key);\r\n if (cmp < 0) {\r\n n = n.copy(null, null, null, n.left.insert(key, value, comparator), null);\r\n }\r\n else if (cmp === 0) {\r\n n = n.copy(null, value, null, null, null);\r\n }\r\n else {\r\n n = n.copy(null, null, null, null, n.right.insert(key, value, comparator));\r\n }\r\n return n.fixUp();\r\n }\r\n removeMin() {\r\n if (this.left.isEmpty()) {\r\n return LLRBNode.EMPTY;\r\n }\r\n let n = this;\r\n if (!n.left.isRed() && !n.left.left.isRed()) {\r\n n = n.moveRedLeft();\r\n }\r\n n = n.copy(null, null, null, n.left.removeMin(), null);\r\n return n.fixUp();\r\n }\r\n // Returns new tree, with the specified item removed.\r\n remove(key, comparator) {\r\n let smallest;\r\n let n = this;\r\n if (comparator(key, n.key) < 0) {\r\n if (!n.left.isEmpty() && !n.left.isRed() && !n.left.left.isRed()) {\r\n n = n.moveRedLeft();\r\n }\r\n n = n.copy(null, null, null, n.left.remove(key, comparator), null);\r\n }\r\n else {\r\n if (n.left.isRed()) {\r\n n = n.rotateRight();\r\n }\r\n if (!n.right.isEmpty() && !n.right.isRed() && !n.right.left.isRed()) {\r\n n = n.moveRedRight();\r\n }\r\n if (comparator(key, n.key) === 0) {\r\n if (n.right.isEmpty()) {\r\n return LLRBNode.EMPTY;\r\n }\r\n else {\r\n smallest = n.right.min();\r\n n = n.copy(smallest.key, smallest.value, null, null, n.right.removeMin());\r\n }\r\n }\r\n n = n.copy(null, null, null, null, n.right.remove(key, comparator));\r\n }\r\n return n.fixUp();\r\n }\r\n isRed() {\r\n return this.color;\r\n }\r\n // Returns new tree after performing any needed rotations.\r\n fixUp() {\r\n let n = this;\r\n if (n.right.isRed() && !n.left.isRed()) {\r\n n = n.rotateLeft();\r\n }\r\n if (n.left.isRed() && n.left.left.isRed()) {\r\n n = n.rotateRight();\r\n }\r\n if (n.left.isRed() && n.right.isRed()) {\r\n n = n.colorFlip();\r\n }\r\n return n;\r\n }\r\n moveRedLeft() {\r\n let n = this.colorFlip();\r\n if (n.right.left.isRed()) {\r\n n = n.copy(null, null, null, null, n.right.rotateRight());\r\n n = n.rotateLeft();\r\n n = n.colorFlip();\r\n }\r\n return n;\r\n }\r\n moveRedRight() {\r\n let n = this.colorFlip();\r\n if (n.left.left.isRed()) {\r\n n = n.rotateRight();\r\n n = n.colorFlip();\r\n }\r\n return n;\r\n }\r\n rotateLeft() {\r\n const nl = this.copy(null, null, LLRBNode.RED, null, this.right.left);\r\n return this.right.copy(null, null, this.color, nl, null);\r\n }\r\n rotateRight() {\r\n const nr = this.copy(null, null, LLRBNode.RED, this.left.right, null);\r\n return this.left.copy(null, null, this.color, null, nr);\r\n }\r\n colorFlip() {\r\n const left = this.left.copy(null, null, !this.left.color, null, null);\r\n const right = this.right.copy(null, null, !this.right.color, null, null);\r\n return this.copy(null, null, !this.color, left, right);\r\n }\r\n // For testing.\r\n checkMaxDepth() {\r\n const blackDepth = this.check();\r\n if (Math.pow(2.0, blackDepth) <= this.size + 1) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n // In a balanced RB tree, the black-depth (number of black nodes) from root to\r\n // leaves is equal on both sides. This function verifies that or asserts.\r\n check() {\r\n if (this.isRed() && this.left.isRed()) {\r\n throw fail();\r\n }\r\n if (this.right.isRed()) {\r\n throw fail();\r\n }\r\n const blackDepth = this.left.check();\r\n if (blackDepth !== this.right.check()) {\r\n throw fail();\r\n }\r\n else {\r\n return blackDepth + (this.isRed() ? 0 : 1);\r\n }\r\n }\r\n} // end LLRBNode\r\n// Empty node is shared between all LLRB trees.\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nLLRBNode.EMPTY = null;\r\nLLRBNode.RED = true;\r\nLLRBNode.BLACK = false;\r\n// Represents an empty node (a leaf node in the Red-Black Tree).\r\nclass LLRBEmptyNode {\r\n constructor() {\r\n this.size = 0;\r\n }\r\n get key() {\r\n throw fail();\r\n }\r\n get value() {\r\n throw fail();\r\n }\r\n get color() {\r\n throw fail();\r\n }\r\n get left() {\r\n throw fail();\r\n }\r\n get right() {\r\n throw fail();\r\n }\r\n // Returns a copy of the current node.\r\n copy(key, value, color, left, right) {\r\n return this;\r\n }\r\n // Returns a copy of the tree, with the specified key/value added.\r\n insert(key, value, comparator) {\r\n return new LLRBNode(key, value);\r\n }\r\n // Returns a copy of the tree, with the specified key removed.\r\n remove(key, comparator) {\r\n return this;\r\n }\r\n isEmpty() {\r\n return true;\r\n }\r\n inorderTraversal(action) {\r\n return false;\r\n }\r\n reverseTraversal(action) {\r\n return false;\r\n }\r\n minKey() {\r\n return null;\r\n }\r\n maxKey() {\r\n return null;\r\n }\r\n isRed() {\r\n return false;\r\n }\r\n // For testing.\r\n checkMaxDepth() {\r\n return true;\r\n }\r\n check() {\r\n return 0;\r\n }\r\n} // end LLRBEmptyNode\r\nLLRBNode.EMPTY = new LLRBEmptyNode();\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 * SortedSet is an immutable (copy-on-write) collection that holds elements\r\n * in order specified by the provided comparator.\r\n *\r\n * NOTE: if provided comparator returns 0 for two elements, we consider them to\r\n * be equal!\r\n */\r\nclass SortedSet {\r\n constructor(comparator) {\r\n this.comparator = comparator;\r\n this.data = new SortedMap(this.comparator);\r\n }\r\n has(elem) {\r\n return this.data.get(elem) !== null;\r\n }\r\n first() {\r\n return this.data.minKey();\r\n }\r\n last() {\r\n return this.data.maxKey();\r\n }\r\n get size() {\r\n return this.data.size;\r\n }\r\n indexOf(elem) {\r\n return this.data.indexOf(elem);\r\n }\r\n /** Iterates elements in order defined by \"comparator\" */\r\n forEach(cb) {\r\n this.data.inorderTraversal((k, v) => {\r\n cb(k);\r\n return false;\r\n });\r\n }\r\n /** Iterates over `elem`s such that: range[0] &lt;= elem &lt; range[1]. */\r\n forEachInRange(range, cb) {\r\n const iter = this.data.getIteratorFrom(range[0]);\r\n while (iter.hasNext()) {\r\n const elem = iter.getNext();\r\n if (this.comparator(elem.key, range[1]) >= 0) {\r\n return;\r\n }\r\n cb(elem.key);\r\n }\r\n }\r\n /**\r\n * Iterates over `elem`s such that: start &lt;= elem until false is returned.\r\n */\r\n forEachWhile(cb, start) {\r\n let iter;\r\n if (start !== undefined) {\r\n iter = this.data.getIteratorFrom(start);\r\n }\r\n else {\r\n iter = this.data.getIterator();\r\n }\r\n while (iter.hasNext()) {\r\n const elem = iter.getNext();\r\n const result = cb(elem.key);\r\n if (!result) {\r\n return;\r\n }\r\n }\r\n }\r\n /** Finds the least element greater than or equal to `elem`. */\r\n firstAfterOrEqual(elem) {\r\n const iter = this.data.getIteratorFrom(elem);\r\n return iter.hasNext() ? iter.getNext().key : null;\r\n }\r\n getIterator() {\r\n return new SortedSetIterator(this.data.getIterator());\r\n }\r\n getIteratorFrom(key) {\r\n return new SortedSetIterator(this.data.getIteratorFrom(key));\r\n }\r\n /** Inserts or updates an element */\r\n add(elem) {\r\n return this.copy(this.data.remove(elem).insert(elem, true));\r\n }\r\n /** Deletes an element */\r\n delete(elem) {\r\n if (!this.has(elem)) {\r\n return this;\r\n }\r\n return this.copy(this.data.remove(elem));\r\n }\r\n isEmpty() {\r\n return this.data.isEmpty();\r\n }\r\n unionWith(other) {\r\n let result = this;\r\n // Make sure `result` always refers to the larger one of the two sets.\r\n if (result.size < other.size) {\r\n result = other;\r\n other = this;\r\n }\r\n other.forEach(elem => {\r\n result = result.add(elem);\r\n });\r\n return result;\r\n }\r\n isEqual(other) {\r\n if (!(other instanceof SortedSet)) {\r\n return false;\r\n }\r\n if (this.size !== other.size) {\r\n return false;\r\n }\r\n const thisIt = this.data.getIterator();\r\n const otherIt = other.data.getIterator();\r\n while (thisIt.hasNext()) {\r\n const thisElem = thisIt.getNext().key;\r\n const otherElem = otherIt.getNext().key;\r\n if (this.comparator(thisElem, otherElem) !== 0) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n toArray() {\r\n const res = [];\r\n this.forEach(targetId => {\r\n res.push(targetId);\r\n });\r\n return res;\r\n }\r\n toString() {\r\n const result = [];\r\n this.forEach(elem => result.push(elem));\r\n return 'SortedSet(' + result.toString() + ')';\r\n }\r\n copy(data) {\r\n const result = new SortedSet(this.comparator);\r\n result.data = data;\r\n return result;\r\n }\r\n}\r\nclass SortedSetIterator {\r\n constructor(iter) {\r\n this.iter = iter;\r\n }\r\n getNext() {\r\n return this.iter.getNext().key;\r\n }\r\n hasNext() {\r\n return this.iter.hasNext();\r\n }\r\n}\r\n/**\r\n * Compares two sorted sets for equality using their natural ordering. The\r\n * method computes the intersection and invokes `onAdd` for every element that\r\n * is in `after` but not `before`. `onRemove` is invoked for every element in\r\n * `before` but missing 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 set.\r\n * @param after - The elements to diff against the original set.\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 diffSortedSets(before, after, comparator, onAdd, onRemove) {\r\n const beforeIt = before.getIterator();\r\n const afterIt = after.getIterator();\r\n let beforeValue = advanceIterator(beforeIt);\r\n let afterValue = advanceIterator(afterIt);\r\n // Walk through the two sets at the same time, using the ordering defined by\r\n // `comparator`.\r\n while (beforeValue || afterValue) {\r\n let added = false;\r\n let removed = false;\r\n if (beforeValue && afterValue) {\r\n const cmp = comparator(beforeValue, afterValue);\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 removed = true;\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 added = true;\r\n }\r\n }\r\n else if (beforeValue != null) {\r\n removed = true;\r\n }\r\n else {\r\n added = true;\r\n }\r\n if (added) {\r\n onAdd(afterValue);\r\n afterValue = advanceIterator(afterIt);\r\n }\r\n else if (removed) {\r\n onRemove(beforeValue);\r\n beforeValue = advanceIterator(beforeIt);\r\n }\r\n else {\r\n beforeValue = advanceIterator(beforeIt);\r\n afterValue = advanceIterator(afterIt);\r\n }\r\n }\r\n}\r\n/**\r\n * Returns the next element from the iterator or `undefined` if none available.\r\n */\r\nfunction advanceIterator(it) {\r\n return it.hasNext() ? it.getNext() : undefined;\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 a set of fields that can be used to partially patch a document.\r\n * FieldMask is used in conjunction with ObjectValue.\r\n * Examples:\r\n * foo - Overwrites foo entirely with the provided value. If foo is not\r\n * present in the companion ObjectValue, the field is deleted.\r\n * foo.bar - Overwrites only the field bar of the object foo.\r\n * If foo is not an object, foo is replaced with an object\r\n * containing foo\r\n */\r\nclass FieldMask {\r\n constructor(fields) {\r\n this.fields = fields;\r\n // TODO(dimond): validation of FieldMask\r\n // Sort the field mask to support `FieldMask.isEqual()` and assert below.\r\n fields.sort(FieldPath$1.comparator);\r\n }\r\n static empty() {\r\n return new FieldMask([]);\r\n }\r\n /**\r\n * Returns a new FieldMask object that is the result of adding all the given\r\n * fields paths to this field mask.\r\n */\r\n unionWith(extraFields) {\r\n let mergedMaskSet = new SortedSet(FieldPath$1.comparator);\r\n for (const fieldPath of this.fields) {\r\n mergedMaskSet = mergedMaskSet.add(fieldPath);\r\n }\r\n for (const fieldPath of extraFields) {\r\n mergedMaskSet = mergedMaskSet.add(fieldPath);\r\n }\r\n return new FieldMask(mergedMaskSet.toArray());\r\n }\r\n /**\r\n * Verifies that `fieldPath` is included by at least one field in this field\r\n * mask.\r\n *\r\n * This is an O(n) operation, where `n` is the size of the field mask.\r\n */\r\n covers(fieldPath) {\r\n for (const fieldMaskPath of this.fields) {\r\n if (fieldMaskPath.isPrefixOf(fieldPath)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n isEqual(other) {\r\n return arrayEquals(this.fields, other.fields, (l, r) => l.isEqual(r));\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/** Converts a Base64 encoded string to a binary string. */\r\nfunction decodeBase64(encoded) {\r\n // Note: We used to validate the base64 string here via a regular expression.\r\n // This was removed to improve the performance of indexing.\r\n return Buffer.from(encoded, 'base64').toString('binary');\r\n}\r\n/** Converts a binary string to a Base64 encoded string. */\r\nfunction encodeBase64(raw) {\r\n return Buffer.from(raw, 'binary').toString('base64');\r\n}\r\n/** True if and only if the Base64 conversion functions are available. */\r\nfunction isBase64Available() {\r\n return true;\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 * Immutable class that represents a \"proto\" byte string.\r\n *\r\n * Proto byte strings can either be Base64-encoded strings or Uint8Arrays when\r\n * sent on the wire. This class abstracts away this differentiation by holding\r\n * the proto byte string in a common class that must be converted into a string\r\n * before being sent as a proto.\r\n * @internal\r\n */\r\nclass ByteString {\r\n constructor(binaryString) {\r\n this.binaryString = binaryString;\r\n }\r\n static fromBase64String(base64) {\r\n const binaryString = decodeBase64(base64);\r\n return new ByteString(binaryString);\r\n }\r\n static fromUint8Array(array) {\r\n // TODO(indexing); Remove the copy of the byte string here as this method\r\n // is frequently called during indexing.\r\n const binaryString = binaryStringFromUint8Array(array);\r\n return new ByteString(binaryString);\r\n }\r\n [Symbol.iterator]() {\r\n let i = 0;\r\n return {\r\n next: () => {\r\n if (i < this.binaryString.length) {\r\n return { value: this.binaryString.charCodeAt(i++), done: false };\r\n }\r\n else {\r\n return { value: undefined, done: true };\r\n }\r\n }\r\n };\r\n }\r\n toBase64() {\r\n return encodeBase64(this.binaryString);\r\n }\r\n toUint8Array() {\r\n return uint8ArrayFromBinaryString(this.binaryString);\r\n }\r\n approximateByteSize() {\r\n return this.binaryString.length * 2;\r\n }\r\n compareTo(other) {\r\n return primitiveComparator(this.binaryString, other.binaryString);\r\n }\r\n isEqual(other) {\r\n return this.binaryString === other.binaryString;\r\n }\r\n}\r\nByteString.EMPTY_BYTE_STRING = new ByteString('');\r\n/**\r\n * Helper function to convert an Uint8array to a binary string.\r\n */\r\nfunction binaryStringFromUint8Array(array) {\r\n let binaryString = '';\r\n for (let i = 0; i < array.length; ++i) {\r\n binaryString += String.fromCharCode(array[i]);\r\n }\r\n return binaryString;\r\n}\r\n/**\r\n * Helper function to convert a binary string to an Uint8Array.\r\n */\r\nfunction uint8ArrayFromBinaryString(binaryString) {\r\n const buffer = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i++) {\r\n buffer[i] = binaryString.charCodeAt(i);\r\n }\r\n return buffer;\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// A RegExp matching ISO 8601 UTC timestamps with optional fraction.\r\nconst ISO_TIMESTAMP_REG_EXP = new RegExp(/^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(?:\\.(\\d+))?Z$/);\r\n/**\r\n * Converts the possible Proto values for a timestamp value into a \"seconds and\r\n * nanos\" representation.\r\n */\r\nfunction normalizeTimestamp(date) {\r\n hardAssert(!!date);\r\n // The json interface (for the browser) will return an iso timestamp string,\r\n // while the proto js library (for node) will return a\r\n // google.protobuf.Timestamp instance.\r\n if (typeof date === 'string') {\r\n // The date string can have higher precision (nanos) than the Date class\r\n // (millis), so we do some custom parsing here.\r\n // Parse the nanos right out of the string.\r\n let nanos = 0;\r\n const fraction = ISO_TIMESTAMP_REG_EXP.exec(date);\r\n hardAssert(!!fraction);\r\n if (fraction[1]) {\r\n // Pad the fraction out to 9 digits (nanos).\r\n let nanoStr = fraction[1];\r\n nanoStr = (nanoStr + '000000000').substr(0, 9);\r\n nanos = Number(nanoStr);\r\n }\r\n // Parse the date to get the seconds.\r\n const parsedDate = new Date(date);\r\n const seconds = Math.floor(parsedDate.getTime() / 1000);\r\n return { seconds, nanos };\r\n }\r\n else {\r\n // TODO(b/37282237): Use strings for Proto3 timestamps\r\n // assert(!this.options.useProto3Json,\r\n // 'The timestamp instance format requires Proto JS.');\r\n const seconds = normalizeNumber(date.seconds);\r\n const nanos = normalizeNumber(date.nanos);\r\n return { seconds, nanos };\r\n }\r\n}\r\n/**\r\n * Converts the possible Proto types for numbers into a JavaScript number.\r\n * Returns 0 if the value is not numeric.\r\n */\r\nfunction normalizeNumber(value) {\r\n // TODO(bjornick): Handle int64 greater than 53 bits.\r\n if (typeof value === 'number') {\r\n return value;\r\n }\r\n else if (typeof value === 'string') {\r\n return Number(value);\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\n/** Converts the possible Proto types for Blobs into a ByteString. */\r\nfunction normalizeByteString(blob) {\r\n if (typeof blob === 'string') {\r\n return ByteString.fromBase64String(blob);\r\n }\r\n else {\r\n return ByteString.fromUint8Array(blob);\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 * Represents a locally-applied ServerTimestamp.\r\n *\r\n * Server Timestamps are backed by MapValues that contain an internal field\r\n * `__type__` with a value of `server_timestamp`. The previous value and local\r\n * write time are stored in its `__previous_value__` and `__local_write_time__`\r\n * fields respectively.\r\n *\r\n * Notes:\r\n * - ServerTimestampValue instances are created as the result of applying a\r\n * transform. They can only exist in the local view of a document. Therefore\r\n * they do not need to be parsed or serialized.\r\n * - When evaluated locally (e.g. for snapshot.data()), they by default\r\n * evaluate to `null`. This behavior can be configured by passing custom\r\n * FieldValueOptions to value().\r\n * - With respect to other ServerTimestampValues, they sort by their\r\n * localWriteTime.\r\n */\r\nconst SERVER_TIMESTAMP_SENTINEL = 'server_timestamp';\r\nconst TYPE_KEY = '__type__';\r\nconst PREVIOUS_VALUE_KEY = '__previous_value__';\r\nconst LOCAL_WRITE_TIME_KEY = '__local_write_time__';\r\nfunction isServerTimestamp(value) {\r\n var _a, _b;\r\n const type = (_b = (((_a = value === null || value === void 0 ? void 0 : value.mapValue) === null || _a === void 0 ? void 0 : _a.fields) || {})[TYPE_KEY]) === null || _b === void 0 ? void 0 : _b.stringValue;\r\n return type === SERVER_TIMESTAMP_SENTINEL;\r\n}\r\n/**\r\n * Creates a new ServerTimestamp proto value (using the internal format).\r\n */\r\nfunction serverTimestamp$1(localWriteTime, previousValue) {\r\n const mapValue = {\r\n fields: {\r\n [TYPE_KEY]: {\r\n stringValue: SERVER_TIMESTAMP_SENTINEL\r\n },\r\n [LOCAL_WRITE_TIME_KEY]: {\r\n timestampValue: {\r\n seconds: localWriteTime.seconds,\r\n nanos: localWriteTime.nanoseconds\r\n }\r\n }\r\n }\r\n };\r\n if (previousValue) {\r\n mapValue.fields[PREVIOUS_VALUE_KEY] = previousValue;\r\n }\r\n return { mapValue };\r\n}\r\n/**\r\n * Returns the value of the field before this ServerTimestamp was set.\r\n *\r\n * Preserving the previous values allows the user to display the last resoled\r\n * value until the backend responds with the timestamp.\r\n */\r\nfunction getPreviousValue(value) {\r\n const previousValue = value.mapValue.fields[PREVIOUS_VALUE_KEY];\r\n if (isServerTimestamp(previousValue)) {\r\n return getPreviousValue(previousValue);\r\n }\r\n return previousValue;\r\n}\r\n/**\r\n * Returns the local time at which this timestamp was first set.\r\n */\r\nfunction getLocalWriteTime(value) {\r\n const localWriteTime = normalizeTimestamp(value.mapValue.fields[LOCAL_WRITE_TIME_KEY].timestampValue);\r\n return new Timestamp(localWriteTime.seconds, localWriteTime.nanos);\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 DatabaseInfo {\r\n /**\r\n * Constructs a DatabaseInfo using the provided host, databaseId and\r\n * persistenceKey.\r\n *\r\n * @param databaseId - The database to use.\r\n * @param appId - The Firebase App Id.\r\n * @param persistenceKey - A unique identifier for this Firestore's local\r\n * storage (used in conjunction with the databaseId).\r\n * @param host - The Firestore backend host to connect to.\r\n * @param ssl - Whether to use SSL when connecting.\r\n * @param forceLongPolling - Whether to use the forceLongPolling option\r\n * when using WebChannel as the network transport.\r\n * @param autoDetectLongPolling - Whether to use the detectBufferingProxy\r\n * option when using WebChannel as the network transport.\r\n * @param useFetchStreams Whether to use the Fetch API instead of\r\n * XMLHTTPRequest\r\n */\r\n constructor(databaseId, appId, persistenceKey, host, ssl, forceLongPolling, autoDetectLongPolling, useFetchStreams) {\r\n this.databaseId = databaseId;\r\n this.appId = appId;\r\n this.persistenceKey = persistenceKey;\r\n this.host = host;\r\n this.ssl = ssl;\r\n this.forceLongPolling = forceLongPolling;\r\n this.autoDetectLongPolling = autoDetectLongPolling;\r\n this.useFetchStreams = useFetchStreams;\r\n }\r\n}\r\n/** The default database name for a project. */\r\nconst DEFAULT_DATABASE_NAME = '(default)';\r\n/**\r\n * Represents the database ID a Firestore client is associated with.\r\n * @internal\r\n */\r\nclass DatabaseId {\r\n constructor(projectId, database) {\r\n this.projectId = projectId;\r\n this.database = database ? database : DEFAULT_DATABASE_NAME;\r\n }\r\n static empty() {\r\n return new DatabaseId('', '');\r\n }\r\n get isDefaultDatabase() {\r\n return this.database === DEFAULT_DATABASE_NAME;\r\n }\r\n isEqual(other) {\r\n return (other instanceof DatabaseId &&\r\n other.projectId === this.projectId &&\r\n other.database === this.database);\r\n }\r\n}\r\nfunction databaseIdFromApp(app, database) {\r\n if (!Object.prototype.hasOwnProperty.apply(app.options, ['projectId'])) {\r\n throw new FirestoreError(Code.INVALID_ARGUMENT, '\"projectId\" not provided in firebase.initializeApp.');\r\n }\r\n return new DatabaseId(app.options.projectId, database);\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/** Sentinel value that sorts before any Mutation Batch ID. */\r\nconst BATCHID_UNKNOWN = -1;\r\n/**\r\n * Returns whether a variable is either undefined or null.\r\n */\r\nfunction isNullOrUndefined(value) {\r\n return value === null || value === undefined;\r\n}\r\n/** Returns whether the value represents -0. */\r\nfunction isNegativeZero(value) {\r\n // Detect if the value is -0.0. Based on polyfill from\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\r\n return value === 0 && 1 / value === 1 / -0;\r\n}\r\n/**\r\n * Returns whether a value is an integer and in the safe integer range\r\n * @param value - The value to test for being an integer and in the safe range\r\n */\r\nfunction isSafeInteger(value) {\r\n return (typeof value === 'number' &&\r\n Number.isInteger(value) &&\r\n !isNegativeZero(value) &&\r\n value <= Number.MAX_SAFE_INTEGER &&\r\n value >= Number.MIN_SAFE_INTEGER);\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 MAX_VALUE_TYPE = '__max__';\r\nconst MAX_VALUE = {\r\n mapValue: {\r\n fields: {\r\n '__type__': { stringValue: MAX_VALUE_TYPE }\r\n }\r\n }\r\n};\r\nconst MIN_VALUE = {\r\n nullValue: 'NULL_VALUE'\r\n};\r\n/** Extracts the backend's type order for the provided value. */\r\nfunction typeOrder(value) {\r\n if ('nullValue' in value) {\r\n return 0 /* TypeOrder.NullValue */;\r\n }\r\n else if ('booleanValue' in value) {\r\n return 1 /* TypeOrder.BooleanValue */;\r\n }\r\n else if ('integerValue' in value || 'doubleValue' in value) {\r\n return 2 /* TypeOrder.NumberValue */;\r\n }\r\n else if ('timestampValue' in value) {\r\n return 3 /* TypeOrder.TimestampValue */;\r\n }\r\n else if ('stringValue' in value) {\r\n return 5 /* TypeOrder.StringValue */;\r\n }\r\n else if ('bytesValue' in value) {\r\n return 6 /* TypeOrder.BlobValue */;\r\n }\r\n else if ('referenceValue' in value) {\r\n return 7 /* TypeOrder.RefValue */;\r\n }\r\n else if ('geoPointValue' in value) {\r\n return 8 /* TypeOrder.GeoPointValue */;\r\n }\r\n else if ('arrayValue' in value) {\r\n return 9 /* TypeOrder.ArrayValue */;\r\n }\r\n else if ('mapValue' in value) {\r\n if (isServerTimestamp(value)) {\r\n return 4 /* TypeOrder.ServerTimestampValue */;\r\n }\r\n else if (isMaxValue(value)) {\r\n return 9007199254740991 /* TypeOrder.MaxValue */;\r\n }\r\n return 10 /* TypeOrder.ObjectValue */;\r\n }\r\n else {\r\n return fail();\r\n }\r\n}\r\n/** Tests `left` and `right` for equality based on the backend semantics. */\r\nfunction valueEquals(left, right) {\r\n if (left === right) {\r\n return true;\r\n }\r\n const leftType = typeOrder(left);\r\n const rightType = typeOrder(right);\r\n if (leftType !== rightType) {\r\n return false;\r\n }\r\n switch (leftType) {\r\n case 0 /* TypeOrder.NullValue */:\r\n return true;\r\n case 1 /* TypeOrder.BooleanValue */:\r\n return left.booleanValue === right.booleanValue;\r\n case 4 /* TypeOrder.ServerTimestampValue */:\r\n return getLocalWriteTime(left).isEqual(getLocalWriteTime(right));\r\n case 3 /* TypeOrder.TimestampValue */:\r\n return timestampEquals(left, right);\r\n case 5 /* TypeOrder.StringValue */:\r\n return left.stringValue === right.stringValue;\r\n case 6 /* TypeOrder.BlobValue */:\r\n return blobEquals(left, right);\r\n case 7 /* TypeOrder.RefValue */:\r\n return left.referenceValue === right.referenceValue;\r\n case 8 /* TypeOrder.GeoPointValue */:\r\n return geoPointEquals(left, right);\r\n case 2 /* TypeOrder.NumberValue */:\r\n return numberEquals(left, right);\r\n case 9 /* TypeOrder.ArrayValue */:\r\n return arrayEquals(left.arrayValue.values || [], right.arrayValue.values || [], valueEquals);\r\n case 10 /* TypeOrder.ObjectValue */:\r\n return objectEquals(left, right);\r\n case 9007199254740991 /* TypeOrder.MaxValue */:\r\n return true;\r\n default:\r\n return fail();\r\n }\r\n}\r\nfunction timestampEquals(left, right) {\r\n if (typeof left.timestampValue === 'string' &&\r\n typeof right.timestampValue === 'string' &&\r\n left.timestampValue.length === right.timestampValue.length) {\r\n // Use string equality for ISO 8601 timestamps\r\n return left.timestampValue === right.timestampValue;\r\n }\r\n const leftTimestamp = normalizeTimestamp(left.timestampValue);\r\n const rightTimestamp = normalizeTimestamp(right.timestampValue);\r\n return (leftTimestamp.seconds === rightTimestamp.seconds &&\r\n leftTimestamp.nanos === rightTimestamp.nanos);\r\n}\r\nfunction geoPointEquals(left, right) {\r\n return (normalizeNumber(left.geoPointValue.latitude) ===\r\n normalizeNumber(right.geoPointValue.latitude) &&\r\n normalizeNumber(left.geoPointValue.longitude) ===\r\n normalizeNumber(right.geoPointValue.longitude));\r\n}\r\nfunction blobEquals(left, right) {\r\n return normalizeByteString(left.bytesValue).isEqual(normalizeByteString(right.bytesValue));\r\n}\r\nfunction numberEquals(left, right) {\r\n if ('integerValue' in left && 'integerValue' in right) {\r\n return (normalizeNumber(left.integerValue) === normalizeNumber(right.integerValue));\r\n }\r\n else if ('doubleValue' in left && 'doubleValue' in right) {\r\n const n1 = normalizeNumber(left.doubleValue);\r\n const n2 = normalizeNumber(right.doubleValue);\r\n if (n1 === n2) {\r\n return isNegativeZero(n1) === isNegativeZero(n2);\r\n }\r\n else {\r\n return isNaN(n1) && isNaN(n2);\r\n }\r\n }\r\n return false;\r\n}\r\nfunction objectEquals(left, right) {\r\n const leftMap = left.mapValue.fields || {};\r\n const rightMap = right.mapValue.fields || {};\r\n if (objectSize(leftMap) !== objectSize(rightMap)) {\r\n return false;\r\n }\r\n for (const key in leftMap) {\r\n if (leftMap.hasOwnProperty(key)) {\r\n if (rightMap[key] === undefined ||\r\n !valueEquals(leftMap[key], rightMap[key])) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n/** Returns true if the ArrayValue contains the specified element. */\r\nfunction arrayValueContains(haystack, needle) {\r\n return ((haystack.values || []).find(v => valueEquals(v, needle)) !== undefined);\r\n}\r\nfunction valueCompare(left, right) {\r\n if (left === right) {\r\n return 0;\r\n }\r\n const leftType = typeOrder(left);\r\n const rightType = typeOrder(right);\r\n if (leftType !== rightType) {\r\n return primitiveComparator(leftType, rightType);\r\n }\r\n switch (leftType) {\r\n case 0 /* TypeOrder.NullValue */:\r\n case 9007199254740991 /* TypeOrder.MaxValue */:\r\n return 0;\r\n case 1 /* TypeOrder.BooleanValue */:\r\n return primitiveComparator(left.booleanValue, right.booleanValue);\r\n case 2 /* TypeOrder.NumberValue */:\r\n return compareNumbers(left, right);\r\n case 3 /* TypeOrder.TimestampValue */:\r\n return compareTimestamps(left.timestampValue, right.timestampValue);\r\n case 4 /* TypeOrder.ServerTimestampValue */:\r\n return compareTimestamps(getLocalWriteTime(left), getLocalWriteTime(right));\r\n case 5 /* TypeOrder.StringValue */:\r\n return primitiveComparator(left.stringValue, right.stringValue);\r\n case 6 /* TypeOrder.BlobValue */:\r\n return compareBlobs(left.bytesValue, right.bytesValue);\r\n case 7 /* TypeOrder.RefValue */:\r\n return compareReferences(left.referenceValue, right.referenceValue);\r\n case 8 /* TypeOrder.GeoPointValue */:\r\n return compareGeoPoints(left.geoPointValue, right.geoPointValue);\r\n case 9 /* TypeOrder.ArrayValue */:\r\n return compareArrays(left.arrayValue, right.arrayValue);\r\n case 10 /* TypeOrder.ObjectValue */:\r\n return compareMaps(left.mapValue, right.mapValue);\r\n default:\r\n throw fail();\r\n }\r\n}\r\nfunction compareNumbers(left, right) {\r\n const leftNumber = normalizeNumber(left.integerValue || left.doubleValue);\r\n const rightNumber = normalizeNumber(right.integerValue || right.doubleValue);\r\n if (leftNumber < rightNumber) {\r\n return -1;\r\n }\r\n else if (leftNumber > rightNumber) {\r\n return 1;\r\n }\r\n else if (leftNumber === rightNumber) {\r\n return 0;\r\n }\r\n else {\r\n // one or both are NaN.\r\n if (isNaN(leftNumber)) {\r\n return isNaN(rightNumber) ? 0 : -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n }\r\n}\r\nfunction compareTimestamps(left, right) {\r\n if (typeof left === 'string' &&\r\n typeof right === 'string' &&\r\n left.length === right.length) {\r\n return primitiveComparator(left, right);\r\n }\r\n const leftTimestamp = normalizeTimestamp(left);\r\n const rightTimestamp = normalizeTimestamp(right);\r\n const comparison = primitiveComparator(leftTimestamp.seconds, rightTimestamp.seconds);\r\n if (comparison !== 0) {\r\n return comparison;\r\n }\r\n return primitiveComparator(leftTimestamp.nanos, rightTimestamp.nanos);\r\n}\r\nfunction compareReferences(leftPath, rightPath) {\r\n const leftSegments = leftPath.split('/');\r\n const rightSegments = rightPath.split('/');\r\n for (let i = 0; i < leftSegments.length && i < rightSegments.length; i++) {\r\n const comparison = primitiveComparator(leftSegments[i], rightSegments[i]);\r\n if (comparison !== 0) {\r\n return comparison;\r\n }\r\n }\r\n return primitiveComparator(leftSegments.length, rightSegments.length);\r\n}\r\nfunction compareGeoPoints(left, right) {\r\n const comparison = primitiveComparator(normalizeNumber(left.latitude), normalizeNumber(right.latitude));\r\n if (comparison !== 0) {\r\n return comparison;\r\n }\r\n return primitiveComparator(normalizeNumber(left.longitude), normalizeNumber(right.longitude));\r\n}\r\nfunction compareBlobs(left, right) {\r\n const leftBytes = normalizeByteString(left);\r\n const rightBytes = normalizeByteString(right);\r\n return leftBytes.compareTo(rightBytes);\r\n}\r\nfunction compareArrays(left, right) {\r\n const leftArray = left.values || [];\r\n const rightArray = right.values || [];\r\n for (let i = 0; i < leftArray.length && i < rightArray.length; ++i) {\r\n const compare = valueCompare(leftArray[i], rightArray[i]);\r\n if (compare) {\r\n return compare;\r\n }\r\n }\r\n return primitiveComparator(leftArray.length, rightArray.length);\r\n}\r\nfunction compareMaps(left, right) {\r\n if (left === MAX_VALUE.mapValue && right === MAX_VALUE.mapValue) {\r\n return 0;\r\n }\r\n else if (left === MAX_VALUE.mapValue) {\r\n return 1;\r\n }\r\n else if (right === MAX_VALUE.mapValue) {\r\n return -1;\r\n }\r\n const leftMap = left.fields || {};\r\n const leftKeys = Object.keys(leftMap);\r\n const rightMap = right.fields || {};\r\n const rightKeys = Object.keys(rightMap);\r\n // Even though MapValues are likely sorted correctly based on their insertion\r\n // order (e.g. when received from the backend), local modifications can bring\r\n // elements out of order. We need to re-sort the elements to ensure that\r\n // canonical IDs are independent of insertion order.\r\n leftKeys.sort();\r\n rightKeys.sort();\r\n for (let i = 0; i < leftKeys.length && i < rightKeys.length; ++i) {\r\n const keyCompare = primitiveComparator(leftKeys[i], rightKeys[i]);\r\n if (keyCompare !== 0) {\r\n return keyCompare;\r\n }\r\n const compare = valueCompare(leftMap[leftKeys[i]], rightMap[rightKeys[i]]);\r\n if (compare !== 0) {\r\n return compare;\r\n }\r\n }\r\n return primitiveComparator(leftKeys.length, rightKeys.length);\r\n}\r\n/**\r\n * Generates the canonical ID for the provided field value (as used in Target\r\n * serialization).\r\n */\r\nfunction canonicalId(value) {\r\n return canonifyValue(value);\r\n}\r\nfunction canonifyValue(value) {\r\n if ('nullValue' in value) {\r\n return 'null';\r\n }\r\n else if ('booleanValue' in value) {\r\n return '' + value.booleanValue;\r\n }\r\n else if ('integerValue' in value) {\r\n return '' + value.integerValue;\r\n }\r\n else if ('doubleValue' in value) {\r\n return '' + value.doubleValue;\r\n }\r\n else if ('timestampValue' in value) {\r\n return canonifyTimestamp(value.timestampValue);\r\n }\r\n else if ('stringValue' in value) {\r\n return value.stringValue;\r\n }\r\n else if ('bytesValue' in value) {\r\n return canonifyByteString(value.bytesValue);\r\n }\r\n else if ('referenceValue' in value) {\r\n return canonifyReference(value.referenceValue);\r\n }\r\n else if ('geoPointValue' in value) {\r\n return canonifyGeoPoint(value.geoPointValue);\r\n }\r\n else if ('arrayValue' in value) {\r\n return canonifyArray(value.arrayValue);\r\n }\r\n else if ('mapValue' in value) {\r\n return canonifyMap(value.mapValue);\r\n }\r\n else {\r\n return fail();\r\n }\r\n}\r\nfunction canonifyByteString(byteString) {\r\n return normalizeByteString(byteString).toBase64();\r\n}\r\nfunction canonifyTimestamp(timestamp) {\r\n const normalizedTimestamp = normalizeTimestamp(timestamp);\r\n return `time(${normalizedTimestamp.seconds},${normalizedTimestamp.nanos})`;\r\n}\r\nfunction canonifyGeoPoint(geoPoint) {\r\n return `geo(${geoPoint.latitude},${geoPoint.longitude})`;\r\n}\r\nfunction canonifyReference(referenceValue) {\r\n return DocumentKey.fromName(referenceValue).toString();\r\n}\r\nfunction canonifyMap(mapValue) {\r\n // Iteration order in JavaScript is not guaranteed. To ensure that we generate\r\n // matching canonical IDs for identical maps, we need to sort the keys.\r\n const sortedKeys = Object.keys(mapValue.fields || {}).sort();\r\n let result = '{';\r\n let first = true;\r\n for (const key of sortedKeys) {\r\n if (!first) {\r\n result += ',';\r\n }\r\n else {\r\n first = false;\r\n }\r\n result += `${key}:${canonifyValue(mapValue.fields[key])}`;\r\n }\r\n return result + '}';\r\n}\r\nfunction canonifyArray(arrayValue) {\r\n let result = '[';\r\n let first = true;\r\n for (const value of arrayValue.values || []) {\r\n if (!first) {\r\n result += ',';\r\n }\r\n else {\r\n first = false;\r\n }\r\n result += canonifyValue(value);\r\n }\r\n return result + ']';\r\n}\r\n/** Returns a reference value for the provided database and key. */\r\nfunction refValue(databaseId, key) {\r\n return {\r\n referenceValue: `projects/${databaseId.projectId}/databases/${databaseId.database}/documents/${key.path.canonicalString()}`\r\n };\r\n}\r\n/** Returns true if `value` is an IntegerValue . */\r\nfunction isInteger(value) {\r\n return !!value && 'integerValue' in value;\r\n}\r\n/** Returns true if `value` is a DoubleValue. */\r\nfunction isDouble(value) {\r\n return !!value && 'doubleValue' in value;\r\n}\r\n/** Returns true if `value` is either an IntegerValue or a DoubleValue. */\r\nfunction isNumber(value) {\r\n return isInteger(value) || isDouble(value);\r\n}\r\n/** Returns true if `value` is an ArrayValue. */\r\nfunction isArray(value) {\r\n return !!value && 'arrayValue' in value;\r\n}\r\n/** Returns true if `value` is a NullValue. */\r\nfunction isNullValue(value) {\r\n return !!value && 'nullValue' in value;\r\n}\r\n/** Returns true if `value` is NaN. */\r\nfunction isNanValue(value) {\r\n return !!value && 'doubleValue' in value && isNaN(Number(value.doubleValue));\r\n}\r\n/** Returns true if `value` is a MapValue. */\r\nfunction isMapValue(value) {\r\n return !!value && 'mapValue' in value;\r\n}\r\n/** Creates a deep copy of `source`. */\r\nfunction deepClone(source) {\r\n if (source.geoPointValue) {\r\n return { geoPointValue: Object.assign({}, source.geoPointValue) };\r\n }\r\n else if (source.timestampValue &&\r\n typeof source.timestampValue === 'object') {\r\n return { timestampValue: Object.assign({}, source.timestampValue) };\r\n }\r\n else if (source.mapValue) {\r\n const target = { mapValue: { fields: {} } };\r\n forEach(source.mapValue.fields, (key, val) => (target.mapValue.fields[key] = deepClone(val)));\r\n return target;\r\n }\r\n else if (source.arrayValue) {\r\n const target = { arrayValue: { values: [] } };\r\n for (let i = 0; i < (source.arrayValue.values || []).length; ++i) {\r\n target.arrayValue.values[i] = deepClone(source.arrayValue.values[i]);\r\n }\r\n return target;\r\n }\r\n else {\r\n return Object.assign({}, source);\r\n }\r\n}\r\n/** Returns true if the Value represents the canonical {@link #MAX_VALUE} . */\r\nfunction isMaxValue(value) {\r\n return ((((value.mapValue || {}).fields || {})['__type__'] || {}).stringValue ===\r\n MAX_VALUE_TYPE);\r\n}\r\n/** Returns the lowest value for the given value type (inclusive). */\r\nfunction valuesGetLowerBound(value) {\r\n if ('nullValue' in value) {\r\n return MIN_VALUE;\r\n }\r\n else if ('booleanValue' in value) {\r\n return { booleanValue: false };\r\n }\r\n else if ('integerValue' in value || 'doubleValue' in value) {\r\n return { doubleValue: NaN };\r\n }\r\n else if ('timestampValue' in value) {\r\n return { timestampValue: { seconds: Number.MIN_SAFE_INTEGER } };\r\n }\r\n else if ('stringValue' in value) {\r\n return { stringValue: '' };\r\n }\r\n else if ('bytesValue' in value) {\r\n return { bytesValue: '' };\r\n }\r\n else if ('referenceValue' in value) {\r\n return refValue(DatabaseId.empty(), DocumentKey.empty());\r\n }\r\n else if ('geoPointValue' in value) {\r\n return { geoPointValue: { latitude: -90, longitude: -180 } };\r\n }\r\n else if ('arrayValue' in value) {\r\n return { arrayValue: {} };\r\n }\r\n else if ('mapValue' in value) {\r\n return { mapValue: {} };\r\n }\r\n else {\r\n return fail();\r\n }\r\n}\r\n/** Returns the largest value for the given value type (exclusive). */\r\nfunction valuesGetUpperBound(value) {\r\n if ('nullValue' in value) {\r\n return { booleanValue: false };\r\n }\r\n else if ('booleanValue' in value) {\r\n return { doubleValue: NaN };\r\n }\r\n else if ('integerValue' in value || 'doubleValue' in value) {\r\n return { timestampValue: { seconds: Number.MIN_SAFE_INTEGER } };\r\n }\r\n else if ('timestampValue' in value) {\r\n return { stringValue: '' };\r\n }\r\n else if ('stringValue' in value) {\r\n return { bytesValue: '' };\r\n }\r\n else if ('bytesValue' in value) {\r\n return refValue(DatabaseId.empty(), DocumentKey.empty());\r\n }\r\n else if ('referenceValue' in value) {\r\n return { geoPointValue: { latitude: -90, longitude: -180 } };\r\n }\r\n else if ('geoPointValue' in value) {\r\n return { arrayValue: {} };\r\n }\r\n else if ('arrayValue' in value) {\r\n return { mapValue: {} };\r\n }\r\n else if ('mapValue' in value) {\r\n return MAX_VALUE;\r\n }\r\n else {\r\n return fail();\r\n }\r\n}\r\nfunction lowerBoundCompare(left, right) {\r\n const cmp = valueCompare(left.value, right.value);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n if (left.inclusive && !right.inclusive) {\r\n return -1;\r\n }\r\n else if (!left.inclusive && right.inclusive) {\r\n return 1;\r\n }\r\n return 0;\r\n}\r\nfunction upperBoundCompare(left, right) {\r\n const cmp = valueCompare(left.value, right.value);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n if (left.inclusive && !right.inclusive) {\r\n return 1;\r\n }\r\n else if (!left.inclusive && right.inclusive) {\r\n return -1;\r\n }\r\n return 0;\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 ObjectValue represents a MapValue in the Firestore Proto and offers the\r\n * ability to add and remove fields (via the ObjectValueBuilder).\r\n */\r\nclass ObjectValue {\r\n constructor(value) {\r\n this.value = value;\r\n }\r\n static empty() {\r\n return new ObjectValue({ mapValue: {} });\r\n }\r\n /**\r\n * Returns the value at the given path or null.\r\n *\r\n * @param path - the path to search\r\n * @returns The value at the path or null if the path is not set.\r\n */\r\n field(path) {\r\n if (path.isEmpty()) {\r\n return this.value;\r\n }\r\n else {\r\n let currentLevel = this.value;\r\n for (let i = 0; i < path.length - 1; ++i) {\r\n currentLevel = (currentLevel.mapValue.fields || {})[path.get(i)];\r\n if (!isMapValue(currentLevel)) {\r\n return null;\r\n }\r\n }\r\n currentLevel = (currentLevel.mapValue.fields || {})[path.lastSegment()];\r\n return currentLevel || null;\r\n }\r\n }\r\n /**\r\n * Sets the field to the provided value.\r\n *\r\n * @param path - The field path to set.\r\n * @param value - The value to set.\r\n */\r\n set(path, value) {\r\n const fieldsMap = this.getFieldsMap(path.popLast());\r\n fieldsMap[path.lastSegment()] = deepClone(value);\r\n }\r\n /**\r\n * Sets the provided fields to the provided values.\r\n *\r\n * @param data - A map of fields to values (or null for deletes).\r\n */\r\n setAll(data) {\r\n let parent = FieldPath$1.emptyPath();\r\n let upserts = {};\r\n let deletes = [];\r\n data.forEach((value, path) => {\r\n if (!parent.isImmediateParentOf(path)) {\r\n // Insert the accumulated changes at this parent location\r\n const fieldsMap = this.getFieldsMap(parent);\r\n this.applyChanges(fieldsMap, upserts, deletes);\r\n upserts = {};\r\n deletes = [];\r\n parent = path.popLast();\r\n }\r\n if (value) {\r\n upserts[path.lastSegment()] = deepClone(value);\r\n }\r\n else {\r\n deletes.push(path.lastSegment());\r\n }\r\n });\r\n const fieldsMap = this.getFieldsMap(parent);\r\n this.applyChanges(fieldsMap, upserts, deletes);\r\n }\r\n /**\r\n * Removes the field at the specified path. If there is no field at the\r\n * specified path, nothing is changed.\r\n *\r\n * @param path - The field path to remove.\r\n */\r\n delete(path) {\r\n const nestedValue = this.field(path.popLast());\r\n if (isMapValue(nestedValue) && nestedValue.mapValue.fields) {\r\n delete nestedValue.mapValue.fields[path.lastSegment()];\r\n }\r\n }\r\n isEqual(other) {\r\n return valueEquals(this.value, other.value);\r\n }\r\n /**\r\n * Returns the map that contains the leaf element of `path`. If the parent\r\n * entry does not yet exist, or if it is not a map, a new map will be created.\r\n */\r\n getFieldsMap(path) {\r\n let current = this.value;\r\n if (!current.mapValue.fields) {\r\n current.mapValue = { fields: {} };\r\n }\r\n for (let i = 0; i < path.length; ++i) {\r\n let next = current.mapValue.fields[path.get(i)];\r\n if (!isMapValue(next) || !next.mapValue.fields) {\r\n next = { mapValue: { fields: {} } };\r\n current.mapValue.fields[path.get(i)] = next;\r\n }\r\n current = next;\r\n }\r\n return current.mapValue.fields;\r\n }\r\n /**\r\n * Modifies `fieldsMap` by adding, replacing or deleting the specified\r\n * entries.\r\n */\r\n applyChanges(fieldsMap, inserts, deletes) {\r\n forEach(inserts, (key, val) => (fieldsMap[key] = val));\r\n for (const field of deletes) {\r\n delete fieldsMap[field];\r\n }\r\n }\r\n clone() {\r\n return new ObjectValue(deepClone(this.value));\r\n }\r\n}\r\n/**\r\n * Returns a FieldMask built from all fields in a MapValue.\r\n */\r\nfunction extractFieldMask(value) {\r\n const fields = [];\r\n forEach(value.fields, (key, value) => {\r\n const currentPath = new FieldPath$1([key]);\r\n if (isMapValue(value)) {\r\n const nestedMask = extractFieldMask(value.mapValue);\r\n const nestedFields = nestedMask.fields;\r\n if (nestedFields.length === 0) {\r\n // Preserve the empty map by adding it to the FieldMask.\r\n fields.push(currentPath);\r\n }\r\n else {\r\n // For nested and non-empty ObjectValues, add the FieldPath of the\r\n // leaf nodes.\r\n for (const nestedPath of nestedFields) {\r\n fields.push(currentPath.child(nestedPath));\r\n }\r\n }\r\n }\r\n else {\r\n // For nested and non-empty ObjectValues, add the FieldPath of the leaf\r\n // nodes.\r\n fields.push(currentPath);\r\n }\r\n });\r\n return new FieldMask(fields);\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 * Represents a document in Firestore with a key, version, data and whether it\r\n * has local mutations applied to it.\r\n *\r\n * Documents can transition between states via `convertToFoundDocument()`,\r\n * `convertToNoDocument()` and `convertToUnknownDocument()`. If a document does\r\n * not transition to one of these states even after all mutations have been\r\n * applied, `isValidDocument()` returns false and the document should be removed\r\n * from all views.\r\n */\r\nclass MutableDocument {\r\n constructor(key, documentType, version, readTime, createTime, data, documentState) {\r\n this.key = key;\r\n this.documentType = documentType;\r\n this.version = version;\r\n this.readTime = readTime;\r\n this.createTime = createTime;\r\n this.data = data;\r\n this.documentState = documentState;\r\n }\r\n /**\r\n * Creates a document with no known version or data, but which can serve as\r\n * base document for mutations.\r\n */\r\n static newInvalidDocument(documentKey) {\r\n return new MutableDocument(documentKey, 0 /* DocumentType.INVALID */, \r\n /* version */ SnapshotVersion.min(), \r\n /* readTime */ SnapshotVersion.min(), \r\n /* createTime */ SnapshotVersion.min(), ObjectValue.empty(), 0 /* DocumentState.SYNCED */);\r\n }\r\n /**\r\n * Creates a new document that is known to exist with the given data at the\r\n * given version.\r\n */\r\n static newFoundDocument(documentKey, version, createTime, value) {\r\n return new MutableDocument(documentKey, 1 /* DocumentType.FOUND_DOCUMENT */, \r\n /* version */ version, \r\n /* readTime */ SnapshotVersion.min(), \r\n /* createTime */ createTime, value, 0 /* DocumentState.SYNCED */);\r\n }\r\n /** Creates a new document that is known to not exist at the given version. */\r\n static newNoDocument(documentKey, version) {\r\n return new MutableDocument(documentKey, 2 /* DocumentType.NO_DOCUMENT */, \r\n /* version */ version, \r\n /* readTime */ SnapshotVersion.min(), \r\n /* createTime */ SnapshotVersion.min(), ObjectValue.empty(), 0 /* DocumentState.SYNCED */);\r\n }\r\n /**\r\n * Creates a new document that is known to exist at the given version but\r\n * whose data is not known (e.g. a document that was updated without a known\r\n * base document).\r\n */\r\n static newUnknownDocument(documentKey, version) {\r\n return new MutableDocument(documentKey, 3 /* DocumentType.UNKNOWN_DOCUMENT */, \r\n /* version */ version, \r\n /* readTime */ SnapshotVersion.min(), \r\n /* createTime */ SnapshotVersion.min(), ObjectValue.empty(), 2 /* DocumentState.HAS_COMMITTED_MUTATIONS */);\r\n }\r\n /**\r\n * Changes the document type to indicate that it exists and that its version\r\n * and data are known.\r\n */\r\n convertToFoundDocument(version, value) {\r\n // If a document is switching state from being an invalid or deleted\r\n // document to a valid (FOUND_DOCUMENT) document, either due to receiving an\r\n // update from Watch or due to applying a local set mutation on top\r\n // of a deleted document, our best guess about its createTime would be the\r\n // version at which the document transitioned to a FOUND_DOCUMENT.\r\n if (this.createTime.isEqual(SnapshotVersion.min()) &&\r\n (this.documentType === 2 /* DocumentType.NO_DOCUMENT */ ||\r\n this.documentType === 0 /* DocumentType.INVALID */)) {\r\n this.createTime = version;\r\n }\r\n this.version = version;\r\n this.documentType = 1 /* DocumentType.FOUND_DOCUMENT */;\r\n this.data = value;\r\n this.documentState = 0 /* DocumentState.SYNCED */;\r\n return this;\r\n }\r\n /**\r\n * Changes the document type to indicate that it doesn't exist at the given\r\n * version.\r\n */\r\n convertToNoDocument(version) {\r\n this.version = version;\r\n this.documentType = 2 /* DocumentType.NO_DOCUMENT */;\r\n this.data = ObjectValue.empty();\r\n this.documentState = 0 /* DocumentState.SYNCED */;\r\n return this;\r\n }\r\n /**\r\n * Changes the document type to indicate that it exists at a given version but\r\n * that its data is not known (e.g. a document that was updated without a known\r\n * base document).\r\n */\r\n convertToUnknownDocument(version) {\r\n this.version = version;\r\n this.documentType = 3 /* DocumentType.UNKNOWN_DOCUMENT */;\r\n this.data = ObjectValue.empty();\r\n this.documentState = 2 /* DocumentState.HAS_COMMITTED_MUTATIONS */;\r\n return this;\r\n }\r\n setHasCommittedMutations() {\r\n this.documentState = 2 /* DocumentState.HAS_COMMITTED_MUTATIONS */;\r\n return this;\r\n }\r\n setHasLocalMutations() {\r\n this.documentState = 1 /* DocumentState.HAS_LOCAL_MUTATIONS */;\r\n this.version = SnapshotVersion.min();\r\n return this;\r\n }\r\n setReadTime(readTime) {\r\n this.readTime = readTime;\r\n return this;\r\n }\r\n get hasLocalMutations() {\r\n return this.documentState === 1 /* DocumentState.HAS_LOCAL_MUTATIONS */;\r\n }\r\n get hasCommittedMutations() {\r\n return this.documentState === 2 /* DocumentState.HAS_COMMITTED_MUTATIONS */;\r\n }\r\n get hasPendingWrites() {\r\n return this.hasLocalMutations || this.hasCommittedMutations;\r\n }\r\n isValidDocument() {\r\n return this.documentType !== 0 /* DocumentType.INVALID */;\r\n }\r\n isFoundDocument() {\r\n return this.documentType === 1 /* DocumentType.FOUND_DOCUMENT */;\r\n }\r\n isNoDocument() {\r\n return this.documentType === 2 /* DocumentType.NO_DOCUMENT */;\r\n }\r\n isUnknownDocument() {\r\n return this.documentType === 3 /* DocumentType.UNKNOWN_DOCUMENT */;\r\n }\r\n isEqual(other) {\r\n return (other instanceof MutableDocument &&\r\n this.key.isEqual(other.key) &&\r\n this.version.isEqual(other.version) &&\r\n this.documentType === other.documentType &&\r\n this.documentState === other.documentState &&\r\n this.data.isEqual(other.data));\r\n }\r\n mutableCopy() {\r\n return new MutableDocument(this.key, this.documentType, this.version, this.readTime, this.createTime, this.data.clone(), this.documentState);\r\n }\r\n toString() {\r\n return (`Document(${this.key}, ${this.version}, ${JSON.stringify(this.data.value)}, ` +\r\n `{createTime: ${this.createTime}}), ` +\r\n `{documentType: ${this.documentType}}), ` +\r\n `{documentState: ${this.documentState}})`);\r\n }\r\n}\r\n/**\r\n * Compares the value for field `field` in the provided documents. Throws if\r\n * the field does not exist in both documents.\r\n */\r\nfunction compareDocumentsByField(field, d1, d2) {\r\n const v1 = d1.data.field(field);\r\n const v2 = d2.data.field(field);\r\n if (v1 !== null && v2 !== null) {\r\n return valueCompare(v1, v2);\r\n }\r\n else {\r\n return fail();\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 * Represents a bound of a query.\r\n *\r\n * The bound is specified with the given components representing a position and\r\n * whether it's just before or just after the position (relative to whatever the\r\n * query order is).\r\n *\r\n * The position represents a logical index position for a query. It's a prefix\r\n * of values for the (potentially implicit) order by clauses of a query.\r\n *\r\n * Bound provides a function to determine whether a document comes before or\r\n * after a bound. This is influenced by whether the position is just before or\r\n * just after the provided values.\r\n */\r\nclass Bound {\r\n constructor(position, inclusive) {\r\n this.position = position;\r\n this.inclusive = inclusive;\r\n }\r\n}\r\nfunction boundCompareToDocument(bound, orderBy, doc) {\r\n let comparison = 0;\r\n for (let i = 0; i < bound.position.length; i++) {\r\n const orderByComponent = orderBy[i];\r\n const component = bound.position[i];\r\n if (orderByComponent.field.isKeyField()) {\r\n comparison = DocumentKey.comparator(DocumentKey.fromName(component.referenceValue), doc.key);\r\n }\r\n else {\r\n const docValue = doc.data.field(orderByComponent.field);\r\n comparison = valueCompare(component, docValue);\r\n }\r\n if (orderByComponent.dir === \"desc\" /* Direction.DESCENDING */) {\r\n comparison = comparison * -1;\r\n }\r\n if (comparison !== 0) {\r\n break;\r\n }\r\n }\r\n return comparison;\r\n}\r\n/**\r\n * Returns true if a document sorts after a bound using the provided sort\r\n * order.\r\n */\r\nfunction boundSortsAfterDocument(bound, orderBy, doc) {\r\n const comparison = boundCompareToDocument(bound, orderBy, doc);\r\n return bound.inclusive ? comparison >= 0 : comparison > 0;\r\n}\r\n/**\r\n * Returns true if a document sorts before a bound using the provided sort\r\n * order.\r\n */\r\nfunction boundSortsBeforeDocument(bound, orderBy, doc) {\r\n const comparison = boundCompareToDocument(bound, orderBy, doc);\r\n return bound.inclusive ? comparison <= 0 : comparison < 0;\r\n}\r\nfunction boundEquals(left, right) {\r\n if (left === null) {\r\n return right === null;\r\n }\r\n else if (right === null) {\r\n return false;\r\n }\r\n if (left.inclusive !== right.inclusive ||\r\n left.position.length !== right.position.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < left.position.length; i++) {\r\n const leftPosition = left.position[i];\r\n const rightPosition = right.position[i];\r\n if (!valueEquals(leftPosition, rightPosition)) {\r\n return false;\r\n }\r\n }\r\n return true;\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 ordering on a field, in some Direction. Direction defaults to ASCENDING.\r\n */\r\nclass OrderBy {\r\n constructor(field, dir = \"asc\" /* Direction.ASCENDING */) {\r\n this.field = field;\r\n this.dir = dir;\r\n }\r\n}\r\nfunction canonifyOrderBy(orderBy) {\r\n // TODO(b/29183165): Make this collision robust.\r\n return orderBy.field.canonicalString() + orderBy.dir;\r\n}\r\nfunction stringifyOrderBy(orderBy) {\r\n return `${orderBy.field.canonicalString()} (${orderBy.dir})`;\r\n}\r\nfunction orderByEquals(left, right) {\r\n return left.dir === right.dir && left.field.isEqual(right.field);\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\nclass Filter {\r\n}\r\nclass FieldFilter extends Filter {\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 }\r\n /**\r\n * Creates a filter based on the provided arguments.\r\n */\r\n static create(field, op, value) {\r\n if (field.isKeyField()) {\r\n if (op === \"in\" /* Operator.IN */ || op === \"not-in\" /* Operator.NOT_IN */) {\r\n return this.createKeyFieldInFilter(field, op, value);\r\n }\r\n else {\r\n return new KeyFieldFilter(field, op, value);\r\n }\r\n }\r\n else if (op === \"array-contains\" /* Operator.ARRAY_CONTAINS */) {\r\n return new ArrayContainsFilter(field, value);\r\n }\r\n else if (op === \"in\" /* Operator.IN */) {\r\n return new InFilter(field, value);\r\n }\r\n else if (op === \"not-in\" /* Operator.NOT_IN */) {\r\n return new NotInFilter(field, value);\r\n }\r\n else if (op === \"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */) {\r\n return new ArrayContainsAnyFilter(field, value);\r\n }\r\n else {\r\n return new FieldFilter(field, op, value);\r\n }\r\n }\r\n static createKeyFieldInFilter(field, op, value) {\r\n return op === \"in\" /* Operator.IN */\r\n ? new KeyFieldInFilter(field, value)\r\n : new KeyFieldNotInFilter(field, value);\r\n }\r\n matches(doc) {\r\n const other = doc.data.field(this.field);\r\n // Types do not have to match in NOT_EQUAL filters.\r\n if (this.op === \"!=\" /* Operator.NOT_EQUAL */) {\r\n return (other !== null &&\r\n this.matchesComparison(valueCompare(other, this.value)));\r\n }\r\n // Only compare types with matching backend order (such as double and int).\r\n return (other !== null &&\r\n typeOrder(this.value) === typeOrder(other) &&\r\n this.matchesComparison(valueCompare(other, this.value)));\r\n }\r\n matchesComparison(comparison) {\r\n switch (this.op) {\r\n case \"<\" /* Operator.LESS_THAN */:\r\n return comparison < 0;\r\n case \"<=\" /* Operator.LESS_THAN_OR_EQUAL */:\r\n return comparison <= 0;\r\n case \"==\" /* Operator.EQUAL */:\r\n return comparison === 0;\r\n case \"!=\" /* Operator.NOT_EQUAL */:\r\n return comparison !== 0;\r\n case \">\" /* Operator.GREATER_THAN */:\r\n return comparison > 0;\r\n case \">=\" /* Operator.GREATER_THAN_OR_EQUAL */:\r\n return comparison >= 0;\r\n default:\r\n return fail();\r\n }\r\n }\r\n isInequality() {\r\n return ([\r\n \"<\" /* Operator.LESS_THAN */,\r\n \"<=\" /* Operator.LESS_THAN_OR_EQUAL */,\r\n \">\" /* Operator.GREATER_THAN */,\r\n \">=\" /* Operator.GREATER_THAN_OR_EQUAL */,\r\n \"!=\" /* Operator.NOT_EQUAL */,\r\n \"not-in\" /* Operator.NOT_IN */\r\n ].indexOf(this.op) >= 0);\r\n }\r\n getFlattenedFilters() {\r\n return [this];\r\n }\r\n getFilters() {\r\n return [this];\r\n }\r\n getFirstInequalityField() {\r\n if (this.isInequality()) {\r\n return this.field;\r\n }\r\n return null;\r\n }\r\n}\r\nclass CompositeFilter extends Filter {\r\n constructor(filters, op) {\r\n super();\r\n this.filters = filters;\r\n this.op = op;\r\n this.memoizedFlattenedFilters = null;\r\n }\r\n /**\r\n * Creates a filter based on the provided arguments.\r\n */\r\n static create(filters, op) {\r\n return new CompositeFilter(filters, op);\r\n }\r\n matches(doc) {\r\n if (compositeFilterIsConjunction(this)) {\r\n // For conjunctions, all filters must match, so return false if any filter doesn't match.\r\n return this.filters.find(filter => !filter.matches(doc)) === undefined;\r\n }\r\n else {\r\n // For disjunctions, at least one filter should match.\r\n return this.filters.find(filter => filter.matches(doc)) !== undefined;\r\n }\r\n }\r\n getFlattenedFilters() {\r\n if (this.memoizedFlattenedFilters !== null) {\r\n return this.memoizedFlattenedFilters;\r\n }\r\n this.memoizedFlattenedFilters = this.filters.reduce((result, subfilter) => {\r\n return result.concat(subfilter.getFlattenedFilters());\r\n }, []);\r\n return this.memoizedFlattenedFilters;\r\n }\r\n // Returns a mutable copy of `this.filters`\r\n getFilters() {\r\n return Object.assign([], this.filters);\r\n }\r\n getFirstInequalityField() {\r\n const found = this.findFirstMatchingFilter(filter => filter.isInequality());\r\n if (found !== null) {\r\n return found.field;\r\n }\r\n return null;\r\n }\r\n // Performs a depth-first search to find and return the first FieldFilter in the composite filter\r\n // that satisfies the predicate. Returns `null` if none of the FieldFilters satisfy the\r\n // predicate.\r\n findFirstMatchingFilter(predicate) {\r\n for (const fieldFilter of this.getFlattenedFilters()) {\r\n if (predicate(fieldFilter)) {\r\n return fieldFilter;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\nfunction compositeFilterIsConjunction(compositeFilter) {\r\n return compositeFilter.op === \"and\" /* CompositeOperator.AND */;\r\n}\r\nfunction compositeFilterIsDisjunction(compositeFilter) {\r\n return compositeFilter.op === \"or\" /* CompositeOperator.OR */;\r\n}\r\n/**\r\n * Returns true if this filter is a conjunction of field filters only. Returns false otherwise.\r\n */\r\nfunction compositeFilterIsFlatConjunction(compositeFilter) {\r\n return (compositeFilterIsFlat(compositeFilter) &&\r\n compositeFilterIsConjunction(compositeFilter));\r\n}\r\n/**\r\n * Returns true if this filter does not contain any composite filters. Returns false otherwise.\r\n */\r\nfunction compositeFilterIsFlat(compositeFilter) {\r\n for (const filter of compositeFilter.filters) {\r\n if (filter instanceof CompositeFilter) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction canonifyFilter(filter) {\r\n if (filter instanceof FieldFilter) {\r\n // TODO(b/29183165): Technically, this won't be unique if two values have\r\n // the same description, such as the int 3 and the string \"3\". So we should\r\n // add the types in here somehow, too.\r\n return (filter.field.canonicalString() +\r\n filter.op.toString() +\r\n canonicalId(filter.value));\r\n }\r\n else if (compositeFilterIsFlatConjunction(filter)) {\r\n // Older SDK versions use an implicit AND operation between their filters.\r\n // In the new SDK versions, the developer may use an explicit AND filter.\r\n // To stay consistent with the old usages, we add a special case to ensure\r\n // the canonical ID for these two are the same. For example:\r\n // `col.whereEquals(\"a\", 1).whereEquals(\"b\", 2)` should have the same\r\n // canonical ID as `col.where(and(equals(\"a\",1), equals(\"b\",2)))`.\r\n return filter.filters.map(filter => canonifyFilter(filter)).join(',');\r\n }\r\n else {\r\n // filter instanceof CompositeFilter\r\n const canonicalIdsString = filter.filters\r\n .map(filter => canonifyFilter(filter))\r\n .join(',');\r\n return `${filter.op}(${canonicalIdsString})`;\r\n }\r\n}\r\nfunction filterEquals(f1, f2) {\r\n if (f1 instanceof FieldFilter) {\r\n return fieldFilterEquals(f1, f2);\r\n }\r\n else if (f1 instanceof CompositeFilter) {\r\n return compositeFilterEquals(f1, f2);\r\n }\r\n else {\r\n fail();\r\n }\r\n}\r\nfunction fieldFilterEquals(f1, f2) {\r\n return (f2 instanceof FieldFilter &&\r\n f1.op === f2.op &&\r\n f1.field.isEqual(f2.field) &&\r\n valueEquals(f1.value, f2.value));\r\n}\r\nfunction compositeFilterEquals(f1, f2) {\r\n if (f2 instanceof CompositeFilter &&\r\n f1.op === f2.op &&\r\n f1.filters.length === f2.filters.length) {\r\n const subFiltersMatch = f1.filters.reduce((result, f1Filter, index) => result && filterEquals(f1Filter, f2.filters[index]), true);\r\n return subFiltersMatch;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Returns a new composite filter that contains all filter from\r\n * `compositeFilter` plus all the given filters in `otherFilters`.\r\n */\r\nfunction compositeFilterWithAddedFilters(compositeFilter, otherFilters) {\r\n const mergedFilters = compositeFilter.filters.concat(otherFilters);\r\n return CompositeFilter.create(mergedFilters, compositeFilter.op);\r\n}\r\n/** Returns a debug description for `filter`. */\r\nfunction stringifyFilter(filter) {\r\n if (filter instanceof FieldFilter) {\r\n return stringifyFieldFilter(filter);\r\n }\r\n else if (filter instanceof CompositeFilter) {\r\n return stringifyCompositeFilter(filter);\r\n }\r\n else {\r\n return 'Filter';\r\n }\r\n}\r\nfunction stringifyCompositeFilter(filter) {\r\n return (filter.op.toString() +\r\n ` {` +\r\n filter.getFilters().map(stringifyFilter).join(' ,') +\r\n '}');\r\n}\r\nfunction stringifyFieldFilter(filter) {\r\n return `${filter.field.canonicalString()} ${filter.op} ${canonicalId(filter.value)}`;\r\n}\r\n/** Filter that matches on key fields (i.e. '__name__'). */\r\nclass KeyFieldFilter extends FieldFilter {\r\n constructor(field, op, value) {\r\n super(field, op, value);\r\n this.key = DocumentKey.fromName(value.referenceValue);\r\n }\r\n matches(doc) {\r\n const comparison = DocumentKey.comparator(doc.key, this.key);\r\n return this.matchesComparison(comparison);\r\n }\r\n}\r\n/** Filter that matches on key fields within an array. */\r\nclass KeyFieldInFilter extends FieldFilter {\r\n constructor(field, value) {\r\n super(field, \"in\" /* Operator.IN */, value);\r\n this.keys = extractDocumentKeysFromArrayValue(\"in\" /* Operator.IN */, value);\r\n }\r\n matches(doc) {\r\n return this.keys.some(key => key.isEqual(doc.key));\r\n }\r\n}\r\n/** Filter that matches on key fields not present within an array. */\r\nclass KeyFieldNotInFilter extends FieldFilter {\r\n constructor(field, value) {\r\n super(field, \"not-in\" /* Operator.NOT_IN */, value);\r\n this.keys = extractDocumentKeysFromArrayValue(\"not-in\" /* Operator.NOT_IN */, value);\r\n }\r\n matches(doc) {\r\n return !this.keys.some(key => key.isEqual(doc.key));\r\n }\r\n}\r\nfunction extractDocumentKeysFromArrayValue(op, value) {\r\n var _a;\r\n return (((_a = value.arrayValue) === null || _a === void 0 ? void 0 : _a.values) || []).map(v => {\r\n return DocumentKey.fromName(v.referenceValue);\r\n });\r\n}\r\n/** A Filter that implements the array-contains operator. */\r\nclass ArrayContainsFilter extends FieldFilter {\r\n constructor(field, value) {\r\n super(field, \"array-contains\" /* Operator.ARRAY_CONTAINS */, value);\r\n }\r\n matches(doc) {\r\n const other = doc.data.field(this.field);\r\n return isArray(other) && arrayValueContains(other.arrayValue, this.value);\r\n }\r\n}\r\n/** A Filter that implements the IN operator. */\r\nclass InFilter extends FieldFilter {\r\n constructor(field, value) {\r\n super(field, \"in\" /* Operator.IN */, value);\r\n }\r\n matches(doc) {\r\n const other = doc.data.field(this.field);\r\n return other !== null && arrayValueContains(this.value.arrayValue, other);\r\n }\r\n}\r\n/** A Filter that implements the not-in operator. */\r\nclass NotInFilter extends FieldFilter {\r\n constructor(field, value) {\r\n super(field, \"not-in\" /* Operator.NOT_IN */, value);\r\n }\r\n matches(doc) {\r\n if (arrayValueContains(this.value.arrayValue, { nullValue: 'NULL_VALUE' })) {\r\n return false;\r\n }\r\n const other = doc.data.field(this.field);\r\n return other !== null && !arrayValueContains(this.value.arrayValue, other);\r\n }\r\n}\r\n/** A Filter that implements the array-contains-any operator. */\r\nclass ArrayContainsAnyFilter extends FieldFilter {\r\n constructor(field, value) {\r\n super(field, \"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */, value);\r\n }\r\n matches(doc) {\r\n const other = doc.data.field(this.field);\r\n if (!isArray(other) || !other.arrayValue.values) {\r\n return false;\r\n }\r\n return other.arrayValue.values.some(val => arrayValueContains(this.value.arrayValue, val));\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// Visible for testing\r\nclass TargetImpl {\r\n constructor(path, collectionGroup = null, orderBy = [], filters = [], limit = null, startAt = null, endAt = null) {\r\n this.path = path;\r\n this.collectionGroup = collectionGroup;\r\n this.orderBy = orderBy;\r\n this.filters = filters;\r\n this.limit = limit;\r\n this.startAt = startAt;\r\n this.endAt = endAt;\r\n this.memoizedCanonicalId = null;\r\n }\r\n}\r\n/**\r\n * Initializes a Target with a path and optional additional query constraints.\r\n * Path must currently be empty if this is a collection group query.\r\n *\r\n * NOTE: you should always construct `Target` from `Query.toTarget` instead of\r\n * using this factory method, because `Query` provides an implicit `orderBy`\r\n * property.\r\n */\r\nfunction newTarget(path, collectionGroup = null, orderBy = [], filters = [], limit = null, startAt = null, endAt = null) {\r\n return new TargetImpl(path, collectionGroup, orderBy, filters, limit, startAt, endAt);\r\n}\r\nfunction canonifyTarget(target) {\r\n const targetImpl = debugCast(target);\r\n if (targetImpl.memoizedCanonicalId === null) {\r\n let str = targetImpl.path.canonicalString();\r\n if (targetImpl.collectionGroup !== null) {\r\n str += '|cg:' + targetImpl.collectionGroup;\r\n }\r\n str += '|f:';\r\n str += targetImpl.filters.map(f => canonifyFilter(f)).join(',');\r\n str += '|ob:';\r\n str += targetImpl.orderBy.map(o => canonifyOrderBy(o)).join(',');\r\n if (!isNullOrUndefined(targetImpl.limit)) {\r\n str += '|l:';\r\n str += targetImpl.limit;\r\n }\r\n if (targetImpl.startAt) {\r\n str += '|lb:';\r\n str += targetImpl.startAt.inclusive ? 'b:' : 'a:';\r\n str += targetImpl.startAt.position.map(p => canonicalId(p)).join(',');\r\n }\r\n if (targetImpl.endAt) {\r\n str += '|ub:';\r\n str += targetImpl.endAt.inclusive ? 'a:' : 'b:';\r\n str += targetImpl.endAt.position.map(p => canonicalId(p)).join(',');\r\n }\r\n targetImpl.memoizedCanonicalId = str;\r\n }\r\n return targetImpl.memoizedCanonicalId;\r\n}\r\nfunction stringifyTarget(target) {\r\n let str = target.path.canonicalString();\r\n if (target.collectionGroup !== null) {\r\n str += ' collectionGroup=' + target.collectionGroup;\r\n }\r\n if (target.filters.length > 0) {\r\n str += `, filters: [${target.filters\r\n .map(f => stringifyFilter(f))\r\n .join(', ')}]`;\r\n }\r\n if (!isNullOrUndefined(target.limit)) {\r\n str += ', limit: ' + target.limit;\r\n }\r\n if (target.orderBy.length > 0) {\r\n str += `, orderBy: [${target.orderBy\r\n .map(o => stringifyOrderBy(o))\r\n .join(', ')}]`;\r\n }\r\n if (target.startAt) {\r\n str += ', startAt: ';\r\n str += target.startAt.inclusive ? 'b:' : 'a:';\r\n str += target.startAt.position.map(p => canonicalId(p)).join(',');\r\n }\r\n if (target.endAt) {\r\n str += ', endAt: ';\r\n str += target.endAt.inclusive ? 'a:' : 'b:';\r\n str += target.endAt.position.map(p => canonicalId(p)).join(',');\r\n }\r\n return `Target(${str})`;\r\n}\r\nfunction targetEquals(left, right) {\r\n if (left.limit !== right.limit) {\r\n return false;\r\n }\r\n if (left.orderBy.length !== right.orderBy.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < left.orderBy.length; i++) {\r\n if (!orderByEquals(left.orderBy[i], right.orderBy[i])) {\r\n return false;\r\n }\r\n }\r\n if (left.filters.length !== right.filters.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < left.filters.length; i++) {\r\n if (!filterEquals(left.filters[i], right.filters[i])) {\r\n return false;\r\n }\r\n }\r\n if (left.collectionGroup !== right.collectionGroup) {\r\n return false;\r\n }\r\n if (!left.path.isEqual(right.path)) {\r\n return false;\r\n }\r\n if (!boundEquals(left.startAt, right.startAt)) {\r\n return false;\r\n }\r\n return boundEquals(left.endAt, right.endAt);\r\n}\r\nfunction targetIsDocumentTarget(target) {\r\n return (DocumentKey.isDocumentKey(target.path) &&\r\n target.collectionGroup === null &&\r\n target.filters.length === 0);\r\n}\r\n/** Returns the field filters that target the given field path. */\r\nfunction targetGetFieldFiltersForPath(target, path) {\r\n return target.filters.filter(f => f instanceof FieldFilter && f.field.isEqual(path));\r\n}\r\n/**\r\n * Returns the values that are used in ARRAY_CONTAINS or ARRAY_CONTAINS_ANY\r\n * filters. Returns `null` if there are no such filters.\r\n */\r\nfunction targetGetArrayValues(target, fieldIndex) {\r\n const segment = fieldIndexGetArraySegment(fieldIndex);\r\n if (segment === undefined) {\r\n return null;\r\n }\r\n for (const fieldFilter of targetGetFieldFiltersForPath(target, segment.fieldPath)) {\r\n switch (fieldFilter.op) {\r\n case \"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */:\r\n return fieldFilter.value.arrayValue.values || [];\r\n case \"array-contains\" /* Operator.ARRAY_CONTAINS */:\r\n return [fieldFilter.value];\r\n // Remaining filters are not array filters.\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * Returns the list of values that are used in != or NOT_IN filters. Returns\r\n * `null` if there are no such filters.\r\n */\r\nfunction targetGetNotInValues(target, fieldIndex) {\r\n const values = new Map();\r\n for (const segment of fieldIndexGetDirectionalSegments(fieldIndex)) {\r\n for (const fieldFilter of targetGetFieldFiltersForPath(target, segment.fieldPath)) {\r\n switch (fieldFilter.op) {\r\n case \"==\" /* Operator.EQUAL */:\r\n case \"in\" /* Operator.IN */:\r\n // Encode equality prefix, which is encoded in the index value before\r\n // the inequality (e.g. `a == 'a' && b != 'b'` is encoded to\r\n // `value != 'ab'`).\r\n values.set(segment.fieldPath.canonicalString(), fieldFilter.value);\r\n break;\r\n case \"not-in\" /* Operator.NOT_IN */:\r\n case \"!=\" /* Operator.NOT_EQUAL */:\r\n // NotIn/NotEqual is always a suffix. There cannot be any remaining\r\n // segments and hence we can return early here.\r\n values.set(segment.fieldPath.canonicalString(), fieldFilter.value);\r\n return Array.from(values.values());\r\n // Remaining filters cannot be used as notIn bounds.\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * Returns a lower bound of field values that can be used as a starting point to\r\n * scan the index defined by `fieldIndex`. Returns `MIN_VALUE` if no lower bound\r\n * exists.\r\n */\r\nfunction targetGetLowerBound(target, fieldIndex) {\r\n const values = [];\r\n let inclusive = true;\r\n // For each segment, retrieve a lower bound if there is a suitable filter or\r\n // startAt.\r\n for (const segment of fieldIndexGetDirectionalSegments(fieldIndex)) {\r\n const segmentBound = segment.kind === 0 /* IndexKind.ASCENDING */\r\n ? targetGetAscendingBound(target, segment.fieldPath, target.startAt)\r\n : targetGetDescendingBound(target, segment.fieldPath, target.startAt);\r\n values.push(segmentBound.value);\r\n inclusive && (inclusive = segmentBound.inclusive);\r\n }\r\n return new Bound(values, inclusive);\r\n}\r\n/**\r\n * Returns an upper bound of field values that can be used as an ending point\r\n * when scanning the index defined by `fieldIndex`. Returns `MAX_VALUE` if no\r\n * upper bound exists.\r\n */\r\nfunction targetGetUpperBound(target, fieldIndex) {\r\n const values = [];\r\n let inclusive = true;\r\n // For each segment, retrieve an upper bound if there is a suitable filter or\r\n // endAt.\r\n for (const segment of fieldIndexGetDirectionalSegments(fieldIndex)) {\r\n const segmentBound = segment.kind === 0 /* IndexKind.ASCENDING */\r\n ? targetGetDescendingBound(target, segment.fieldPath, target.endAt)\r\n : targetGetAscendingBound(target, segment.fieldPath, target.endAt);\r\n values.push(segmentBound.value);\r\n inclusive && (inclusive = segmentBound.inclusive);\r\n }\r\n return new Bound(values, inclusive);\r\n}\r\n/**\r\n * Returns the value to use as the lower bound for ascending index segment at\r\n * the provided `fieldPath` (or the upper bound for an descending segment).\r\n */\r\nfunction targetGetAscendingBound(target, fieldPath, bound) {\r\n let value = MIN_VALUE;\r\n let inclusive = true;\r\n // Process all filters to find a value for the current field segment\r\n for (const fieldFilter of targetGetFieldFiltersForPath(target, fieldPath)) {\r\n let filterValue = MIN_VALUE;\r\n let filterInclusive = true;\r\n switch (fieldFilter.op) {\r\n case \"<\" /* Operator.LESS_THAN */:\r\n case \"<=\" /* Operator.LESS_THAN_OR_EQUAL */:\r\n filterValue = valuesGetLowerBound(fieldFilter.value);\r\n break;\r\n case \"==\" /* Operator.EQUAL */:\r\n case \"in\" /* Operator.IN */:\r\n case \">=\" /* Operator.GREATER_THAN_OR_EQUAL */:\r\n filterValue = fieldFilter.value;\r\n break;\r\n case \">\" /* Operator.GREATER_THAN */:\r\n filterValue = fieldFilter.value;\r\n filterInclusive = false;\r\n break;\r\n case \"!=\" /* Operator.NOT_EQUAL */:\r\n case \"not-in\" /* Operator.NOT_IN */:\r\n filterValue = MIN_VALUE;\r\n break;\r\n // Remaining filters cannot be used as lower bounds.\r\n }\r\n if (lowerBoundCompare({ value, inclusive }, { value: filterValue, inclusive: filterInclusive }) < 0) {\r\n value = filterValue;\r\n inclusive = filterInclusive;\r\n }\r\n }\r\n // If there is an additional bound, compare the values against the existing\r\n // range to see if we can narrow the scope.\r\n if (bound !== null) {\r\n for (let i = 0; i < target.orderBy.length; ++i) {\r\n const orderBy = target.orderBy[i];\r\n if (orderBy.field.isEqual(fieldPath)) {\r\n const cursorValue = bound.position[i];\r\n if (lowerBoundCompare({ value, inclusive }, { value: cursorValue, inclusive: bound.inclusive }) < 0) {\r\n value = cursorValue;\r\n inclusive = bound.inclusive;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return { value, inclusive };\r\n}\r\n/**\r\n * Returns the value to use as the upper bound for ascending index segment at\r\n * the provided `fieldPath` (or the lower bound for a descending segment).\r\n */\r\nfunction targetGetDescendingBound(target, fieldPath, bound) {\r\n let value = MAX_VALUE;\r\n let inclusive = true;\r\n // Process all filters to find a value for the current field segment\r\n for (const fieldFilter of targetGetFieldFiltersForPath(target, fieldPath)) {\r\n let filterValue = MAX_VALUE;\r\n let filterInclusive = true;\r\n switch (fieldFilter.op) {\r\n case \">=\" /* Operator.GREATER_THAN_OR_EQUAL */:\r\n case \">\" /* Operator.GREATER_THAN */:\r\n filterValue = valuesGetUpperBound(fieldFilter.value);\r\n filterInclusive = false;\r\n break;\r\n case \"==\" /* Operator.EQUAL */:\r\n case \"in\" /* Operator.IN */:\r\n case \"<=\" /* Operator.LESS_THAN_OR_EQUAL */:\r\n filterValue = fieldFilter.value;\r\n break;\r\n case \"<\" /* Operator.LESS_THAN */:\r\n filterValue = fieldFilter.value;\r\n filterInclusive = false;\r\n break;\r\n case \"!=\" /* Operator.NOT_EQUAL */:\r\n case \"not-in\" /* Operator.NOT_IN */:\r\n filterValue = MAX_VALUE;\r\n break;\r\n // Remaining filters cannot be used as upper bounds.\r\n }\r\n if (upperBoundCompare({ value, inclusive }, { value: filterValue, inclusive: filterInclusive }) > 0) {\r\n value = filterValue;\r\n inclusive = filterInclusive;\r\n }\r\n }\r\n // If there is an additional bound, compare the values against the existing\r\n // range to see if we can narrow the scope.\r\n if (bound !== null) {\r\n for (let i = 0; i < target.orderBy.length; ++i) {\r\n const orderBy = target.orderBy[i];\r\n if (orderBy.field.isEqual(fieldPath)) {\r\n const cursorValue = bound.position[i];\r\n if (upperBoundCompare({ value, inclusive }, { value: cursorValue, inclusive: bound.inclusive }) > 0) {\r\n value = cursorValue;\r\n inclusive = bound.inclusive;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return { value, inclusive };\r\n}\r\n/** Returns the number of segments of a perfect index for this target. */\r\nfunction targetGetSegmentCount(target) {\r\n let fields = new SortedSet(FieldPath$1.comparator);\r\n let hasArraySegment = false;\r\n for (const filter of target.filters) {\r\n for (const subFilter of filter.getFlattenedFilters()) {\r\n // __name__ is not an explicit segment of any index, so we don't need to\r\n // count it.\r\n if (subFilter.field.isKeyField()) {\r\n continue;\r\n }\r\n // ARRAY_CONTAINS or ARRAY_CONTAINS_ANY filters must be counted separately.\r\n // For instance, it is possible to have an index for \"a ARRAY a ASC\". Even\r\n // though these are on the same field, they should be counted as two\r\n // separate segments in an index.\r\n if (subFilter.op === \"array-contains\" /* Operator.ARRAY_CONTAINS */ ||\r\n subFilter.op === \"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */) {\r\n hasArraySegment = true;\r\n }\r\n else {\r\n fields = fields.add(subFilter.field);\r\n }\r\n }\r\n }\r\n for (const orderBy of target.orderBy) {\r\n // __name__ is not an explicit segment of any index, so we don't need to\r\n // count it.\r\n if (!orderBy.field.isKeyField()) {\r\n fields = fields.add(orderBy.field);\r\n }\r\n }\r\n return fields.size + (hasArraySegment ? 1 : 0);\r\n}\r\nfunction targetHasLimit(target) {\r\n return target.limit !== null;\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 * Query encapsulates all the query attributes we support in the SDK. It can\r\n * be run against the LocalStore, as well as be converted to a `Target` to\r\n * query the RemoteStore results.\r\n *\r\n * Visible for testing.\r\n */\r\nclass QueryImpl {\r\n /**\r\n * Initializes a Query with a path and optional additional query constraints.\r\n * Path must currently be empty if this is a collection group query.\r\n */\r\n constructor(path, collectionGroup = null, explicitOrderBy = [], filters = [], limit = null, limitType = \"F\" /* LimitType.First */, startAt = null, endAt = null) {\r\n this.path = path;\r\n this.collectionGroup = collectionGroup;\r\n this.explicitOrderBy = explicitOrderBy;\r\n this.filters = filters;\r\n this.limit = limit;\r\n this.limitType = limitType;\r\n this.startAt = startAt;\r\n this.endAt = endAt;\r\n this.memoizedOrderBy = null;\r\n // The corresponding `Target` of this `Query` instance.\r\n this.memoizedTarget = null;\r\n if (this.startAt) ;\r\n if (this.endAt) ;\r\n }\r\n}\r\n/** Creates a new Query instance with the options provided. */\r\nfunction newQuery(path, collectionGroup, explicitOrderBy, filters, limit, limitType, startAt, endAt) {\r\n return new QueryImpl(path, collectionGroup, explicitOrderBy, filters, limit, limitType, startAt, endAt);\r\n}\r\n/** Creates a new Query for a query that matches all documents at `path` */\r\nfunction newQueryForPath(path) {\r\n return new QueryImpl(path);\r\n}\r\n/**\r\n * Helper to convert a collection group query into a collection query at a\r\n * specific path. This is used when executing collection group queries, since\r\n * we have to split the query into a set of collection queries at multiple\r\n * paths.\r\n */\r\nfunction asCollectionQueryAtPath(query, path) {\r\n return new QueryImpl(path, \r\n /*collectionGroup=*/ null, query.explicitOrderBy.slice(), query.filters.slice(), query.limit, query.limitType, query.startAt, query.endAt);\r\n}\r\n/**\r\n * Returns true if this query does not specify any query constraints that\r\n * could remove results.\r\n */\r\nfunction queryMatchesAllDocuments(query) {\r\n return (query.filters.length === 0 &&\r\n query.limit === null &&\r\n query.startAt == null &&\r\n query.endAt == null &&\r\n (query.explicitOrderBy.length === 0 ||\r\n (query.explicitOrderBy.length === 1 &&\r\n query.explicitOrderBy[0].field.isKeyField())));\r\n}\r\nfunction getFirstOrderByField(query) {\r\n return query.explicitOrderBy.length > 0\r\n ? query.explicitOrderBy[0].field\r\n : null;\r\n}\r\nfunction getInequalityFilterField(query) {\r\n for (const filter of query.filters) {\r\n const result = filter.getFirstInequalityField();\r\n if (result !== null) {\r\n return result;\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * Creates a new Query for a collection group query that matches all documents\r\n * within the provided collection group.\r\n */\r\nfunction newQueryForCollectionGroup(collectionId) {\r\n return new QueryImpl(ResourcePath.emptyPath(), collectionId);\r\n}\r\n/**\r\n * Returns whether the query matches a single document by path (rather than a\r\n * collection).\r\n */\r\nfunction isDocumentQuery$1(query) {\r\n return (DocumentKey.isDocumentKey(query.path) &&\r\n query.collectionGroup === null &&\r\n query.filters.length === 0);\r\n}\r\n/**\r\n * Returns whether the query matches a collection group rather than a specific\r\n * collection.\r\n */\r\nfunction isCollectionGroupQuery(query) {\r\n return query.collectionGroup !== null;\r\n}\r\n/**\r\n * Returns the implicit order by constraint that is used to execute the Query,\r\n * which can be different from the order by constraints the user provided (e.g.\r\n * the SDK and backend always orders by `__name__`).\r\n */\r\nfunction queryOrderBy(query) {\r\n const queryImpl = debugCast(query);\r\n if (queryImpl.memoizedOrderBy === null) {\r\n queryImpl.memoizedOrderBy = [];\r\n const inequalityField = getInequalityFilterField(queryImpl);\r\n const firstOrderByField = getFirstOrderByField(queryImpl);\r\n if (inequalityField !== null && firstOrderByField === null) {\r\n // In order to implicitly add key ordering, we must also add the\r\n // inequality filter field for it to be a valid query.\r\n // Note that the default inequality field and key ordering is ascending.\r\n if (!inequalityField.isKeyField()) {\r\n queryImpl.memoizedOrderBy.push(new OrderBy(inequalityField));\r\n }\r\n queryImpl.memoizedOrderBy.push(new OrderBy(FieldPath$1.keyField(), \"asc\" /* Direction.ASCENDING */));\r\n }\r\n else {\r\n let foundKeyOrdering = false;\r\n for (const orderBy of queryImpl.explicitOrderBy) {\r\n queryImpl.memoizedOrderBy.push(orderBy);\r\n if (orderBy.field.isKeyField()) {\r\n foundKeyOrdering = true;\r\n }\r\n }\r\n if (!foundKeyOrdering) {\r\n // The order of the implicit key ordering always matches the last\r\n // explicit order by\r\n const lastDirection = queryImpl.explicitOrderBy.length > 0\r\n ? queryImpl.explicitOrderBy[queryImpl.explicitOrderBy.length - 1]\r\n .dir\r\n : \"asc\" /* Direction.ASCENDING */;\r\n queryImpl.memoizedOrderBy.push(new OrderBy(FieldPath$1.keyField(), lastDirection));\r\n }\r\n }\r\n }\r\n return queryImpl.memoizedOrderBy;\r\n}\r\n/**\r\n * Converts this `Query` instance to it's corresponding `Target` representation.\r\n */\r\nfunction queryToTarget(query) {\r\n const queryImpl = debugCast(query);\r\n if (!queryImpl.memoizedTarget) {\r\n if (queryImpl.limitType === \"F\" /* LimitType.First */) {\r\n queryImpl.memoizedTarget = newTarget(queryImpl.path, queryImpl.collectionGroup, queryOrderBy(queryImpl), queryImpl.filters, queryImpl.limit, queryImpl.startAt, queryImpl.endAt);\r\n }\r\n else {\r\n // Flip the orderBy directions since we want the last results\r\n const orderBys = [];\r\n for (const orderBy of queryOrderBy(queryImpl)) {\r\n const dir = orderBy.dir === \"desc\" /* Direction.DESCENDING */\r\n ? \"asc\" /* Direction.ASCENDING */\r\n : \"desc\" /* Direction.DESCENDING */;\r\n orderBys.push(new OrderBy(orderBy.field, dir));\r\n }\r\n // We need to swap the cursors to match the now-flipped query ordering.\r\n const startAt = queryImpl.endAt\r\n ? new Bound(queryImpl.endAt.position, queryImpl.endAt.inclusive)\r\n : null;\r\n const endAt = queryImpl.startAt\r\n ? new Bound(queryImpl.startAt.position, queryImpl.startAt.inclusive)\r\n : null;\r\n // Now return as a LimitType.First query.\r\n queryImpl.memoizedTarget = newTarget(queryImpl.path, queryImpl.collectionGroup, orderBys, queryImpl.filters, queryImpl.limit, startAt, endAt);\r\n }\r\n }\r\n return queryImpl.memoizedTarget;\r\n}\r\nfunction queryWithAddedFilter(query, filter) {\r\n filter.getFirstInequalityField();\r\n getInequalityFilterField(query);\r\n const newFilters = query.filters.concat([filter]);\r\n return new QueryImpl(query.path, query.collectionGroup, query.explicitOrderBy.slice(), newFilters, query.limit, query.limitType, query.startAt, query.endAt);\r\n}\r\nfunction queryWithAddedOrderBy(query, orderBy) {\r\n // TODO(dimond): validate that orderBy does not list the same key twice.\r\n const newOrderBy = query.explicitOrderBy.concat([orderBy]);\r\n return new QueryImpl(query.path, query.collectionGroup, newOrderBy, query.filters.slice(), query.limit, query.limitType, query.startAt, query.endAt);\r\n}\r\nfunction queryWithLimit(query, limit, limitType) {\r\n return new QueryImpl(query.path, query.collectionGroup, query.explicitOrderBy.slice(), query.filters.slice(), limit, limitType, query.startAt, query.endAt);\r\n}\r\nfunction queryWithStartAt(query, bound) {\r\n return new QueryImpl(query.path, query.collectionGroup, query.explicitOrderBy.slice(), query.filters.slice(), query.limit, query.limitType, bound, query.endAt);\r\n}\r\nfunction queryWithEndAt(query, bound) {\r\n return new QueryImpl(query.path, query.collectionGroup, query.explicitOrderBy.slice(), query.filters.slice(), query.limit, query.limitType, query.startAt, bound);\r\n}\r\nfunction queryEquals(left, right) {\r\n return (targetEquals(queryToTarget(left), queryToTarget(right)) &&\r\n left.limitType === right.limitType);\r\n}\r\n// TODO(b/29183165): This is used to get a unique string from a query to, for\r\n// example, use as a dictionary key, but the implementation is subject to\r\n// collisions. Make it collision-free.\r\nfunction canonifyQuery(query) {\r\n return `${canonifyTarget(queryToTarget(query))}|lt:${query.limitType}`;\r\n}\r\nfunction stringifyQuery(query) {\r\n return `Query(target=${stringifyTarget(queryToTarget(query))}; limitType=${query.limitType})`;\r\n}\r\n/** Returns whether `doc` matches the constraints of `query`. */\r\nfunction queryMatches(query, doc) {\r\n return (doc.isFoundDocument() &&\r\n queryMatchesPathAndCollectionGroup(query, doc) &&\r\n queryMatchesOrderBy(query, doc) &&\r\n queryMatchesFilters(query, doc) &&\r\n queryMatchesBounds(query, doc));\r\n}\r\nfunction queryMatchesPathAndCollectionGroup(query, doc) {\r\n const docPath = doc.key.path;\r\n if (query.collectionGroup !== null) {\r\n // NOTE: this.path is currently always empty since we don't expose Collection\r\n // Group queries rooted at a document path yet.\r\n return (doc.key.hasCollectionId(query.collectionGroup) &&\r\n query.path.isPrefixOf(docPath));\r\n }\r\n else if (DocumentKey.isDocumentKey(query.path)) {\r\n // exact match for document queries\r\n return query.path.isEqual(docPath);\r\n }\r\n else {\r\n // shallow ancestor queries by default\r\n return query.path.isImmediateParentOf(docPath);\r\n }\r\n}\r\n/**\r\n * A document must have a value for every ordering clause in order to show up\r\n * in the results.\r\n */\r\nfunction queryMatchesOrderBy(query, doc) {\r\n // We must use `queryOrderBy()` to get the list of all orderBys (both implicit and explicit).\r\n // Note that for OR queries, orderBy applies to all disjunction terms and implicit orderBys must\r\n // be taken into account. For example, the query \"a > 1 || b==1\" has an implicit \"orderBy a\" due\r\n // to the inequality, and is evaluated as \"a > 1 orderBy a || b==1 orderBy a\".\r\n // A document with content of {b:1} matches the filters, but does not match the orderBy because\r\n // it's missing the field 'a'.\r\n for (const orderBy of queryOrderBy(query)) {\r\n // order by key always matches\r\n if (!orderBy.field.isKeyField() && doc.data.field(orderBy.field) === null) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction queryMatchesFilters(query, doc) {\r\n for (const filter of query.filters) {\r\n if (!filter.matches(doc)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/** Makes sure a document is within the bounds, if provided. */\r\nfunction queryMatchesBounds(query, doc) {\r\n if (query.startAt &&\r\n !boundSortsBeforeDocument(query.startAt, queryOrderBy(query), doc)) {\r\n return false;\r\n }\r\n if (query.endAt &&\r\n !boundSortsAfterDocument(query.endAt, queryOrderBy(query), doc)) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Returns the collection group that this query targets.\r\n *\r\n * PORTING NOTE: This is only used in the Web SDK to facilitate multi-tab\r\n * synchronization for query results.\r\n */\r\nfunction queryCollectionGroup(query) {\r\n return (query.collectionGroup ||\r\n (query.path.length % 2 === 1\r\n ? query.path.lastSegment()\r\n : query.path.get(query.path.length - 2)));\r\n}\r\n/**\r\n * Returns a new comparator function that can be used to compare two documents\r\n * based on the Query's ordering constraint.\r\n */\r\nfunction newQueryComparator(query) {\r\n return (d1, d2) => {\r\n let comparedOnKeyField = false;\r\n for (const orderBy of queryOrderBy(query)) {\r\n const comp = compareDocs(orderBy, d1, d2);\r\n if (comp !== 0) {\r\n return comp;\r\n }\r\n comparedOnKeyField = comparedOnKeyField || orderBy.field.isKeyField();\r\n }\r\n return 0;\r\n };\r\n}\r\nfunction compareDocs(orderBy, d1, d2) {\r\n const comparison = orderBy.field.isKeyField()\r\n ? DocumentKey.comparator(d1.key, d2.key)\r\n : compareDocumentsByField(orderBy.field, d1, d2);\r\n switch (orderBy.dir) {\r\n case \"asc\" /* Direction.ASCENDING */:\r\n return comparison;\r\n case \"desc\" /* Direction.DESCENDING */:\r\n return -1 * comparison;\r\n default:\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\n/**\r\n * A map implementation that uses objects as keys. Objects must have an\r\n * associated equals function and must be immutable. Entries in the map are\r\n * stored together with the key being produced from the mapKeyFn. This map\r\n * automatically handles collisions of keys.\r\n */\r\nclass ObjectMap {\r\n constructor(mapKeyFn, equalsFn) {\r\n this.mapKeyFn = mapKeyFn;\r\n this.equalsFn = equalsFn;\r\n /**\r\n * The inner map for a key/value pair. Due to the possibility of collisions we\r\n * keep a list of entries that we do a linear search through to find an actual\r\n * match. Note that collisions should be rare, so we still expect near\r\n * constant time lookups in practice.\r\n */\r\n this.inner = {};\r\n /** The number of entries stored in the map */\r\n this.innerSize = 0;\r\n }\r\n /** Get a value for this key, or undefined if it does not exist. */\r\n get(key) {\r\n const id = this.mapKeyFn(key);\r\n const matches = this.inner[id];\r\n if (matches === undefined) {\r\n return undefined;\r\n }\r\n for (const [otherKey, value] of matches) {\r\n if (this.equalsFn(otherKey, key)) {\r\n return value;\r\n }\r\n }\r\n return undefined;\r\n }\r\n has(key) {\r\n return this.get(key) !== undefined;\r\n }\r\n /** Put this key and value in the map. */\r\n set(key, value) {\r\n const id = this.mapKeyFn(key);\r\n const matches = this.inner[id];\r\n if (matches === undefined) {\r\n this.inner[id] = [[key, value]];\r\n this.innerSize++;\r\n return;\r\n }\r\n for (let i = 0; i < matches.length; i++) {\r\n if (this.equalsFn(matches[i][0], key)) {\r\n // This is updating an existing entry and does not increase `innerSize`.\r\n matches[i] = [key, value];\r\n return;\r\n }\r\n }\r\n matches.push([key, value]);\r\n this.innerSize++;\r\n }\r\n /**\r\n * Remove this key from the map. Returns a boolean if anything was deleted.\r\n */\r\n delete(key) {\r\n const id = this.mapKeyFn(key);\r\n const matches = this.inner[id];\r\n if (matches === undefined) {\r\n return false;\r\n }\r\n for (let i = 0; i < matches.length; i++) {\r\n if (this.equalsFn(matches[i][0], key)) {\r\n if (matches.length === 1) {\r\n delete this.inner[id];\r\n }\r\n else {\r\n matches.splice(i, 1);\r\n }\r\n this.innerSize--;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n forEach(fn) {\r\n forEach(this.inner, (_, entries) => {\r\n for (const [k, v] of entries) {\r\n fn(k, v);\r\n }\r\n });\r\n }\r\n isEmpty() {\r\n return isEmpty(this.inner);\r\n }\r\n size() {\r\n return this.innerSize;\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 EMPTY_MUTABLE_DOCUMENT_MAP = new SortedMap(DocumentKey.comparator);\r\nfunction mutableDocumentMap() {\r\n return EMPTY_MUTABLE_DOCUMENT_MAP;\r\n}\r\nconst EMPTY_DOCUMENT_MAP = new SortedMap(DocumentKey.comparator);\r\nfunction documentMap(...docs) {\r\n let map = EMPTY_DOCUMENT_MAP;\r\n for (const doc of docs) {\r\n map = map.insert(doc.key, doc);\r\n }\r\n return map;\r\n}\r\nfunction newOverlayedDocumentMap() {\r\n return newDocumentKeyMap();\r\n}\r\nfunction convertOverlayedDocumentMapToDocumentMap(collection) {\r\n let documents = EMPTY_DOCUMENT_MAP;\r\n collection.forEach((k, v) => (documents = documents.insert(k, v.overlayedDocument)));\r\n return documents;\r\n}\r\nfunction newOverlayMap() {\r\n return newDocumentKeyMap();\r\n}\r\nfunction newMutationMap() {\r\n return newDocumentKeyMap();\r\n}\r\nfunction newDocumentKeyMap() {\r\n return new ObjectMap(key => key.toString(), (l, r) => l.isEqual(r));\r\n}\r\nconst EMPTY_DOCUMENT_VERSION_MAP = new SortedMap(DocumentKey.comparator);\r\nfunction documentVersionMap() {\r\n return EMPTY_DOCUMENT_VERSION_MAP;\r\n}\r\nconst EMPTY_DOCUMENT_KEY_SET = new SortedSet(DocumentKey.comparator);\r\nfunction documentKeySet(...keys) {\r\n let set = EMPTY_DOCUMENT_KEY_SET;\r\n for (const key of keys) {\r\n set = set.add(key);\r\n }\r\n return set;\r\n}\r\nconst EMPTY_TARGET_ID_SET = new SortedSet(primitiveComparator);\r\nfunction targetIdSet() {\r\n return EMPTY_TARGET_ID_SET;\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 an DoubleValue for `value` that is encoded based the serializer's\r\n * `useProto3Json` setting.\r\n */\r\nfunction toDouble(serializer, value) {\r\n if (serializer.useProto3Json) {\r\n if (isNaN(value)) {\r\n return { doubleValue: 'NaN' };\r\n }\r\n else if (value === Infinity) {\r\n return { doubleValue: 'Infinity' };\r\n }\r\n else if (value === -Infinity) {\r\n return { doubleValue: '-Infinity' };\r\n }\r\n }\r\n return { doubleValue: isNegativeZero(value) ? '-0' : value };\r\n}\r\n/**\r\n * Returns an IntegerValue for `value`.\r\n */\r\nfunction toInteger(value) {\r\n return { integerValue: '' + value };\r\n}\r\n/**\r\n * Returns a value for a number that's appropriate to put into a proto.\r\n * The return value is an IntegerValue if it can safely represent the value,\r\n * otherwise a DoubleValue is returned.\r\n */\r\nfunction toNumber(serializer, value) {\r\n return isSafeInteger(value) ? toInteger(value) : toDouble(serializer, value);\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\n/** Used to represent a field transform on a mutation. */\r\nclass TransformOperation {\r\n constructor() {\r\n // Make sure that the structural type of `TransformOperation` is unique.\r\n // See https://github.com/microsoft/TypeScript/issues/5451\r\n this._ = undefined;\r\n }\r\n}\r\n/**\r\n * Computes the local transform result against the provided `previousValue`,\r\n * optionally using the provided localWriteTime.\r\n */\r\nfunction applyTransformOperationToLocalView(transform, previousValue, localWriteTime) {\r\n if (transform instanceof ServerTimestampTransform) {\r\n return serverTimestamp$1(localWriteTime, previousValue);\r\n }\r\n else if (transform instanceof ArrayUnionTransformOperation) {\r\n return applyArrayUnionTransformOperation(transform, previousValue);\r\n }\r\n else if (transform instanceof ArrayRemoveTransformOperation) {\r\n return applyArrayRemoveTransformOperation(transform, previousValue);\r\n }\r\n else {\r\n return applyNumericIncrementTransformOperationToLocalView(transform, previousValue);\r\n }\r\n}\r\n/**\r\n * Computes a final transform result after the transform has been acknowledged\r\n * by the server, potentially using the server-provided transformResult.\r\n */\r\nfunction applyTransformOperationToRemoteDocument(transform, previousValue, transformResult) {\r\n // The server just sends null as the transform result for array operations,\r\n // so we have to calculate a result the same as we do for local\r\n // applications.\r\n if (transform instanceof ArrayUnionTransformOperation) {\r\n return applyArrayUnionTransformOperation(transform, previousValue);\r\n }\r\n else if (transform instanceof ArrayRemoveTransformOperation) {\r\n return applyArrayRemoveTransformOperation(transform, previousValue);\r\n }\r\n return transformResult;\r\n}\r\n/**\r\n * If this transform operation is not idempotent, returns the base value to\r\n * persist for this transform. If a base value is returned, the transform\r\n * operation is always applied to this base value, even if document has\r\n * already been updated.\r\n *\r\n * Base values provide consistent behavior for non-idempotent transforms and\r\n * allow us to return the same latency-compensated value even if the backend\r\n * has already applied the transform operation. The base value is null for\r\n * idempotent transforms, as they can be re-played even if the backend has\r\n * already applied them.\r\n *\r\n * @returns a base value to store along with the mutation, or null for\r\n * idempotent transforms.\r\n */\r\nfunction computeTransformOperationBaseValue(transform, previousValue) {\r\n if (transform instanceof NumericIncrementTransformOperation) {\r\n return isNumber(previousValue) ? previousValue : { integerValue: 0 };\r\n }\r\n return null;\r\n}\r\nfunction transformOperationEquals(left, right) {\r\n if (left instanceof ArrayUnionTransformOperation &&\r\n right instanceof ArrayUnionTransformOperation) {\r\n return arrayEquals(left.elements, right.elements, valueEquals);\r\n }\r\n else if (left instanceof ArrayRemoveTransformOperation &&\r\n right instanceof ArrayRemoveTransformOperation) {\r\n return arrayEquals(left.elements, right.elements, valueEquals);\r\n }\r\n else if (left instanceof NumericIncrementTransformOperation &&\r\n right instanceof NumericIncrementTransformOperation) {\r\n return valueEquals(left.operand, right.operand);\r\n }\r\n return (left instanceof ServerTimestampTransform &&\r\n right instanceof ServerTimestampTransform);\r\n}\r\n/** Transforms a value into a server-generated timestamp. */\r\nclass ServerTimestampTransform extends TransformOperation {\r\n}\r\n/** Transforms an array value via a union operation. */\r\nclass ArrayUnionTransformOperation extends TransformOperation {\r\n constructor(elements) {\r\n super();\r\n this.elements = elements;\r\n }\r\n}\r\nfunction applyArrayUnionTransformOperation(transform, previousValue) {\r\n const values = coercedFieldValuesArray(previousValue);\r\n for (const toUnion of transform.elements) {\r\n if (!values.some(element => valueEquals(element, toUnion))) {\r\n values.push(toUnion);\r\n }\r\n }\r\n return { arrayValue: { values } };\r\n}\r\n/** Transforms an array value via a remove operation. */\r\nclass ArrayRemoveTransformOperation extends TransformOperation {\r\n constructor(elements) {\r\n super();\r\n this.elements = elements;\r\n }\r\n}\r\nfunction applyArrayRemoveTransformOperation(transform, previousValue) {\r\n let values = coercedFieldValuesArray(previousValue);\r\n for (const toRemove of transform.elements) {\r\n values = values.filter(element => !valueEquals(element, toRemove));\r\n }\r\n return { arrayValue: { values } };\r\n}\r\n/**\r\n * Implements the backend semantics for locally computed NUMERIC_ADD (increment)\r\n * transforms. Converts all field values to integers or doubles, but unlike the\r\n * backend does not cap integer values at 2^63. Instead, JavaScript number\r\n * arithmetic is used and precision loss can occur for values greater than 2^53.\r\n */\r\nclass NumericIncrementTransformOperation extends TransformOperation {\r\n constructor(serializer, operand) {\r\n super();\r\n this.serializer = serializer;\r\n this.operand = operand;\r\n }\r\n}\r\nfunction applyNumericIncrementTransformOperationToLocalView(transform, previousValue) {\r\n // PORTING NOTE: Since JavaScript's integer arithmetic is limited to 53 bit\r\n // precision and resolves overflows by reducing precision, we do not\r\n // manually cap overflows at 2^63.\r\n const baseValue = computeTransformOperationBaseValue(transform, previousValue);\r\n const sum = asNumber(baseValue) + asNumber(transform.operand);\r\n if (isInteger(baseValue) && isInteger(transform.operand)) {\r\n return toInteger(sum);\r\n }\r\n else {\r\n return toDouble(transform.serializer, sum);\r\n }\r\n}\r\nfunction asNumber(value) {\r\n return normalizeNumber(value.integerValue || value.doubleValue);\r\n}\r\nfunction coercedFieldValuesArray(value) {\r\n return isArray(value) && value.arrayValue.values\r\n ? value.arrayValue.values.slice()\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/** A field path and the TransformOperation to perform upon it. */\r\nclass FieldTransform {\r\n constructor(field, transform) {\r\n this.field = field;\r\n this.transform = transform;\r\n }\r\n}\r\nfunction fieldTransformEquals(left, right) {\r\n return (left.field.isEqual(right.field) &&\r\n transformOperationEquals(left.transform, right.transform));\r\n}\r\nfunction fieldTransformsAreEqual(left, right) {\r\n if (left === undefined && right === undefined) {\r\n return true;\r\n }\r\n if (left && right) {\r\n return arrayEquals(left, right, (l, r) => fieldTransformEquals(l, r));\r\n }\r\n return false;\r\n}\r\n/** The result of successfully applying a mutation to the backend. */\r\nclass MutationResult {\r\n constructor(\r\n /**\r\n * The version at which the mutation was committed:\r\n *\r\n * - For most operations, this is the updateTime in the WriteResult.\r\n * - For deletes, the commitTime of the WriteResponse (because deletes are\r\n * not stored and have no updateTime).\r\n *\r\n * Note that these versions can be different: No-op writes will not change\r\n * the updateTime even though the commitTime advances.\r\n */\r\n version, \r\n /**\r\n * The resulting fields returned from the backend after a mutation\r\n * containing field transforms has been committed. Contains one FieldValue\r\n * for each FieldTransform that was in the mutation.\r\n *\r\n * Will be empty if the mutation did not contain any field transforms.\r\n */\r\n transformResults) {\r\n this.version = version;\r\n this.transformResults = transformResults;\r\n }\r\n}\r\n/**\r\n * Encodes a precondition for a mutation. This follows the model that the\r\n * backend accepts with the special case of an explicit \"empty\" precondition\r\n * (meaning no precondition).\r\n */\r\nclass Precondition {\r\n constructor(updateTime, exists) {\r\n this.updateTime = updateTime;\r\n this.exists = exists;\r\n }\r\n /** Creates a new empty Precondition. */\r\n static none() {\r\n return new Precondition();\r\n }\r\n /** Creates a new Precondition with an exists flag. */\r\n static exists(exists) {\r\n return new Precondition(undefined, exists);\r\n }\r\n /** Creates a new Precondition based on a version a document exists at. */\r\n static updateTime(version) {\r\n return new Precondition(version);\r\n }\r\n /** Returns whether this Precondition is empty. */\r\n get isNone() {\r\n return this.updateTime === undefined && this.exists === undefined;\r\n }\r\n isEqual(other) {\r\n return (this.exists === other.exists &&\r\n (this.updateTime\r\n ? !!other.updateTime && this.updateTime.isEqual(other.updateTime)\r\n : !other.updateTime));\r\n }\r\n}\r\n/** Returns true if the preconditions is valid for the given document. */\r\nfunction preconditionIsValidForDocument(precondition, document) {\r\n if (precondition.updateTime !== undefined) {\r\n return (document.isFoundDocument() &&\r\n document.version.isEqual(precondition.updateTime));\r\n }\r\n else if (precondition.exists !== undefined) {\r\n return precondition.exists === document.isFoundDocument();\r\n }\r\n else {\r\n return true;\r\n }\r\n}\r\n/**\r\n * A mutation describes a self-contained change to a document. Mutations can\r\n * create, replace, delete, and update subsets of documents.\r\n *\r\n * Mutations not only act on the value of the document but also its version.\r\n *\r\n * For local mutations (mutations that haven't been committed yet), we preserve\r\n * the existing version for Set and Patch mutations. For Delete mutations, we\r\n * reset the version to 0.\r\n *\r\n * Here's the expected transition table.\r\n *\r\n * MUTATION APPLIED TO RESULTS IN\r\n *\r\n * SetMutation Document(v3) Document(v3)\r\n * SetMutation NoDocument(v3) Document(v0)\r\n * SetMutation InvalidDocument(v0) Document(v0)\r\n * PatchMutation Document(v3) Document(v3)\r\n * PatchMutation NoDocument(v3) NoDocument(v3)\r\n * PatchMutation InvalidDocument(v0) UnknownDocument(v3)\r\n * DeleteMutation Document(v3) NoDocument(v0)\r\n * DeleteMutation NoDocument(v3) NoDocument(v0)\r\n * DeleteMutation InvalidDocument(v0) NoDocument(v0)\r\n *\r\n * For acknowledged mutations, we use the updateTime of the WriteResponse as\r\n * the resulting version for Set and Patch mutations. As deletes have no\r\n * explicit update time, we use the commitTime of the WriteResponse for\r\n * Delete mutations.\r\n *\r\n * If a mutation is acknowledged by the backend but fails the precondition check\r\n * locally, we transition to an `UnknownDocument` and rely on Watch to send us\r\n * the updated version.\r\n *\r\n * Field transforms are used only with Patch and Set Mutations. We use the\r\n * `updateTransforms` message to store transforms, rather than the `transforms`s\r\n * messages.\r\n *\r\n * ## Subclassing Notes\r\n *\r\n * Every type of mutation needs to implement its own applyToRemoteDocument() and\r\n * applyToLocalView() to implement the actual behavior of applying the mutation\r\n * to some source document (see `setMutationApplyToRemoteDocument()` for an\r\n * example).\r\n */\r\nclass Mutation {\r\n}\r\n/**\r\n * A utility method to calculate a `Mutation` representing the overlay from the\r\n * final state of the document, and a `FieldMask` representing the fields that\r\n * are mutated by the local mutations.\r\n */\r\nfunction calculateOverlayMutation(doc, mask) {\r\n if (!doc.hasLocalMutations || (mask && mask.fields.length === 0)) {\r\n return null;\r\n }\r\n // mask is null when sets or deletes are applied to the current document.\r\n if (mask === null) {\r\n if (doc.isNoDocument()) {\r\n return new DeleteMutation(doc.key, Precondition.none());\r\n }\r\n else {\r\n return new SetMutation(doc.key, doc.data, Precondition.none());\r\n }\r\n }\r\n else {\r\n const docValue = doc.data;\r\n const patchValue = ObjectValue.empty();\r\n let maskSet = new SortedSet(FieldPath$1.comparator);\r\n for (let path of mask.fields) {\r\n if (!maskSet.has(path)) {\r\n let value = docValue.field(path);\r\n // If we are deleting a nested field, we take the immediate parent as\r\n // the mask used to construct the resulting mutation.\r\n // Justification: Nested fields can create parent fields implicitly. If\r\n // only a leaf entry is deleted in later mutations, the parent field\r\n // should still remain, but we may have lost this information.\r\n // Consider mutation (foo.bar 1), then mutation (foo.bar delete()).\r\n // This leaves the final result (foo, {}). Despite the fact that `doc`\r\n // has the correct result, `foo` is not in `mask`, and the resulting\r\n // mutation would miss `foo`.\r\n if (value === null && path.length > 1) {\r\n path = path.popLast();\r\n value = docValue.field(path);\r\n }\r\n if (value === null) {\r\n patchValue.delete(path);\r\n }\r\n else {\r\n patchValue.set(path, value);\r\n }\r\n maskSet = maskSet.add(path);\r\n }\r\n }\r\n return new PatchMutation(doc.key, patchValue, new FieldMask(maskSet.toArray()), Precondition.none());\r\n }\r\n}\r\n/**\r\n * Applies this mutation to the given document for the purposes of computing a\r\n * new remote document. If the input document doesn't match the expected state\r\n * (e.g. it is invalid or outdated), the document type may transition to\r\n * unknown.\r\n *\r\n * @param mutation - The mutation to apply.\r\n * @param document - The document to mutate. The input document can be an\r\n * invalid document if the client has no knowledge of the pre-mutation state\r\n * of the document.\r\n * @param mutationResult - The result of applying the mutation from the backend.\r\n */\r\nfunction mutationApplyToRemoteDocument(mutation, document, mutationResult) {\r\n if (mutation instanceof SetMutation) {\r\n setMutationApplyToRemoteDocument(mutation, document, mutationResult);\r\n }\r\n else if (mutation instanceof PatchMutation) {\r\n patchMutationApplyToRemoteDocument(mutation, document, mutationResult);\r\n }\r\n else {\r\n deleteMutationApplyToRemoteDocument(mutation, document, mutationResult);\r\n }\r\n}\r\n/**\r\n * Applies this mutation to the given document for the purposes of computing\r\n * the new local view of a document. If the input document doesn't match the\r\n * expected state, the document is not modified.\r\n *\r\n * @param mutation - The mutation to apply.\r\n * @param document - The document to mutate. The input document can be an\r\n * invalid document if the client has no knowledge of the pre-mutation state\r\n * of the document.\r\n * @param previousMask - The fields that have been updated before applying this mutation.\r\n * @param localWriteTime - A timestamp indicating the local write time of the\r\n * batch this mutation is a part of.\r\n * @returns A `FieldMask` representing the fields that are changed by applying this mutation.\r\n */\r\nfunction mutationApplyToLocalView(mutation, document, previousMask, localWriteTime) {\r\n if (mutation instanceof SetMutation) {\r\n return setMutationApplyToLocalView(mutation, document, previousMask, localWriteTime);\r\n }\r\n else if (mutation instanceof PatchMutation) {\r\n return patchMutationApplyToLocalView(mutation, document, previousMask, localWriteTime);\r\n }\r\n else {\r\n return deleteMutationApplyToLocalView(mutation, document, previousMask);\r\n }\r\n}\r\n/**\r\n * If this mutation is not idempotent, returns the base value to persist with\r\n * this mutation. If a base value is returned, the mutation is always applied\r\n * to this base value, even if document has already been updated.\r\n *\r\n * The base value is a sparse object that consists of only the document\r\n * fields for which this mutation contains a non-idempotent transformation\r\n * (e.g. a numeric increment). The provided value guarantees consistent\r\n * behavior for non-idempotent transforms and allow us to return the same\r\n * latency-compensated value even if the backend has already applied the\r\n * mutation. The base value is null for idempotent mutations, as they can be\r\n * re-played even if the backend has already applied them.\r\n *\r\n * @returns a base value to store along with the mutation, or null for\r\n * idempotent mutations.\r\n */\r\nfunction mutationExtractBaseValue(mutation, document) {\r\n let baseObject = null;\r\n for (const fieldTransform of mutation.fieldTransforms) {\r\n const existingValue = document.data.field(fieldTransform.field);\r\n const coercedValue = computeTransformOperationBaseValue(fieldTransform.transform, existingValue || null);\r\n if (coercedValue != null) {\r\n if (baseObject === null) {\r\n baseObject = ObjectValue.empty();\r\n }\r\n baseObject.set(fieldTransform.field, coercedValue);\r\n }\r\n }\r\n return baseObject ? baseObject : null;\r\n}\r\nfunction mutationEquals(left, right) {\r\n if (left.type !== right.type) {\r\n return false;\r\n }\r\n if (!left.key.isEqual(right.key)) {\r\n return false;\r\n }\r\n if (!left.precondition.isEqual(right.precondition)) {\r\n return false;\r\n }\r\n if (!fieldTransformsAreEqual(left.fieldTransforms, right.fieldTransforms)) {\r\n return false;\r\n }\r\n if (left.type === 0 /* MutationType.Set */) {\r\n return left.value.isEqual(right.value);\r\n }\r\n if (left.type === 1 /* MutationType.Patch */) {\r\n return (left.data.isEqual(right.data) &&\r\n left.fieldMask.isEqual(right.fieldMask));\r\n }\r\n return true;\r\n}\r\n/**\r\n * A mutation that creates or replaces the document at the given key with the\r\n * object value contents.\r\n */\r\nclass SetMutation extends Mutation {\r\n constructor(key, value, precondition, fieldTransforms = []) {\r\n super();\r\n this.key = key;\r\n this.value = value;\r\n this.precondition = precondition;\r\n this.fieldTransforms = fieldTransforms;\r\n this.type = 0 /* MutationType.Set */;\r\n }\r\n getFieldMask() {\r\n return null;\r\n }\r\n}\r\nfunction setMutationApplyToRemoteDocument(mutation, document, mutationResult) {\r\n // Unlike setMutationApplyToLocalView, if we're applying a mutation to a\r\n // remote document the server has accepted the mutation so the precondition\r\n // must have held.\r\n const newData = mutation.value.clone();\r\n const transformResults = serverTransformResults(mutation.fieldTransforms, document, mutationResult.transformResults);\r\n newData.setAll(transformResults);\r\n document\r\n .convertToFoundDocument(mutationResult.version, newData)\r\n .setHasCommittedMutations();\r\n}\r\nfunction setMutationApplyToLocalView(mutation, document, previousMask, localWriteTime) {\r\n if (!preconditionIsValidForDocument(mutation.precondition, document)) {\r\n // The mutation failed to apply (e.g. a document ID created with add()\r\n // caused a name collision).\r\n return previousMask;\r\n }\r\n const newData = mutation.value.clone();\r\n const transformResults = localTransformResults(mutation.fieldTransforms, localWriteTime, document);\r\n newData.setAll(transformResults);\r\n document\r\n .convertToFoundDocument(document.version, newData)\r\n .setHasLocalMutations();\r\n return null; // SetMutation overwrites all fields.\r\n}\r\n/**\r\n * A mutation that modifies fields of the document at the given key with the\r\n * given values. The values are applied through a field mask:\r\n *\r\n * * When a field is in both the mask and the values, the corresponding field\r\n * is updated.\r\n * * When a field is in neither the mask nor the values, the corresponding\r\n * field is unmodified.\r\n * * When a field is in the mask but not in the values, the corresponding field\r\n * is deleted.\r\n * * When a field is not in the mask but is in the values, the values map is\r\n * ignored.\r\n */\r\nclass PatchMutation extends Mutation {\r\n constructor(key, data, fieldMask, precondition, fieldTransforms = []) {\r\n super();\r\n this.key = key;\r\n this.data = data;\r\n this.fieldMask = fieldMask;\r\n this.precondition = precondition;\r\n this.fieldTransforms = fieldTransforms;\r\n this.type = 1 /* MutationType.Patch */;\r\n }\r\n getFieldMask() {\r\n return this.fieldMask;\r\n }\r\n}\r\nfunction patchMutationApplyToRemoteDocument(mutation, document, mutationResult) {\r\n if (!preconditionIsValidForDocument(mutation.precondition, document)) {\r\n // Since the mutation was not rejected, we know that the precondition\r\n // matched on the backend. We therefore must not have the expected version\r\n // of the document in our cache and convert to an UnknownDocument with a\r\n // known updateTime.\r\n document.convertToUnknownDocument(mutationResult.version);\r\n return;\r\n }\r\n const transformResults = serverTransformResults(mutation.fieldTransforms, document, mutationResult.transformResults);\r\n const newData = document.data;\r\n newData.setAll(getPatch(mutation));\r\n newData.setAll(transformResults);\r\n document\r\n .convertToFoundDocument(mutationResult.version, newData)\r\n .setHasCommittedMutations();\r\n}\r\nfunction patchMutationApplyToLocalView(mutation, document, previousMask, localWriteTime) {\r\n if (!preconditionIsValidForDocument(mutation.precondition, document)) {\r\n return previousMask;\r\n }\r\n const transformResults = localTransformResults(mutation.fieldTransforms, localWriteTime, document);\r\n const newData = document.data;\r\n newData.setAll(getPatch(mutation));\r\n newData.setAll(transformResults);\r\n document\r\n .convertToFoundDocument(document.version, newData)\r\n .setHasLocalMutations();\r\n if (previousMask === null) {\r\n return null;\r\n }\r\n return previousMask\r\n .unionWith(mutation.fieldMask.fields)\r\n .unionWith(mutation.fieldTransforms.map(transform => transform.field));\r\n}\r\n/**\r\n * Returns a FieldPath/Value map with the content of the PatchMutation.\r\n */\r\nfunction getPatch(mutation) {\r\n const result = new Map();\r\n mutation.fieldMask.fields.forEach(fieldPath => {\r\n if (!fieldPath.isEmpty()) {\r\n const newValue = mutation.data.field(fieldPath);\r\n result.set(fieldPath, newValue);\r\n }\r\n });\r\n return result;\r\n}\r\n/**\r\n * Creates a list of \"transform results\" (a transform result is a field value\r\n * representing the result of applying a transform) for use after a mutation\r\n * containing transforms has been acknowledged by the server.\r\n *\r\n * @param fieldTransforms - The field transforms to apply the result to.\r\n * @param mutableDocument - The current state of the document after applying all\r\n * previous mutations.\r\n * @param serverTransformResults - The transform results received by the server.\r\n * @returns The transform results list.\r\n */\r\nfunction serverTransformResults(fieldTransforms, mutableDocument, serverTransformResults) {\r\n const transformResults = new Map();\r\n hardAssert(fieldTransforms.length === serverTransformResults.length);\r\n for (let i = 0; i < serverTransformResults.length; i++) {\r\n const fieldTransform = fieldTransforms[i];\r\n const transform = fieldTransform.transform;\r\n const previousValue = mutableDocument.data.field(fieldTransform.field);\r\n transformResults.set(fieldTransform.field, applyTransformOperationToRemoteDocument(transform, previousValue, serverTransformResults[i]));\r\n }\r\n return transformResults;\r\n}\r\n/**\r\n * Creates a list of \"transform results\" (a transform result is a field value\r\n * representing the result of applying a transform) for use when applying a\r\n * transform locally.\r\n *\r\n * @param fieldTransforms - The field transforms to apply the result to.\r\n * @param localWriteTime - The local time of the mutation (used to\r\n * generate ServerTimestampValues).\r\n * @param mutableDocument - The document to apply transforms on.\r\n * @returns The transform results list.\r\n */\r\nfunction localTransformResults(fieldTransforms, localWriteTime, mutableDocument) {\r\n const transformResults = new Map();\r\n for (const fieldTransform of fieldTransforms) {\r\n const transform = fieldTransform.transform;\r\n const previousValue = mutableDocument.data.field(fieldTransform.field);\r\n transformResults.set(fieldTransform.field, applyTransformOperationToLocalView(transform, previousValue, localWriteTime));\r\n }\r\n return transformResults;\r\n}\r\n/** A mutation that deletes the document at the given key. */\r\nclass DeleteMutation extends Mutation {\r\n constructor(key, precondition) {\r\n super();\r\n this.key = key;\r\n this.precondition = precondition;\r\n this.type = 2 /* MutationType.Delete */;\r\n this.fieldTransforms = [];\r\n }\r\n getFieldMask() {\r\n return null;\r\n }\r\n}\r\nfunction deleteMutationApplyToRemoteDocument(mutation, document, mutationResult) {\r\n // Unlike applyToLocalView, if we're applying a mutation to a remote\r\n // document the server has accepted the mutation so the precondition must\r\n // have held.\r\n document\r\n .convertToNoDocument(mutationResult.version)\r\n .setHasCommittedMutations();\r\n}\r\nfunction deleteMutationApplyToLocalView(mutation, document, previousMask) {\r\n if (preconditionIsValidForDocument(mutation.precondition, document)) {\r\n document.convertToNoDocument(document.version).setHasLocalMutations();\r\n return null;\r\n }\r\n return previousMask;\r\n}\r\n/**\r\n * A mutation that verifies the existence of the document at the given key with\r\n * the provided precondition.\r\n *\r\n * The `verify` operation is only used in Transactions, and this class serves\r\n * primarily to facilitate serialization into protos.\r\n */\r\nclass VerifyMutation extends Mutation {\r\n constructor(key, precondition) {\r\n super();\r\n this.key = key;\r\n this.precondition = precondition;\r\n this.type = 3 /* MutationType.Verify */;\r\n this.fieldTransforms = [];\r\n }\r\n getFieldMask() {\r\n return null;\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 batch of mutations that will be sent as one unit to the backend.\r\n */\r\nclass MutationBatch {\r\n /**\r\n * @param batchId - The unique ID of this mutation batch.\r\n * @param localWriteTime - The original write time of this mutation.\r\n * @param baseMutations - Mutations that are used to populate the base\r\n * values when this mutation is applied locally. This can be used to locally\r\n * overwrite values that are persisted in the remote document cache. Base\r\n * mutations are never sent to the backend.\r\n * @param mutations - The user-provided mutations in this mutation batch.\r\n * User-provided mutations are applied both locally and remotely on the\r\n * backend.\r\n */\r\n constructor(batchId, localWriteTime, baseMutations, mutations) {\r\n this.batchId = batchId;\r\n this.localWriteTime = localWriteTime;\r\n this.baseMutations = baseMutations;\r\n this.mutations = mutations;\r\n }\r\n /**\r\n * Applies all the mutations in this MutationBatch to the specified document\r\n * to compute the state of the remote document\r\n *\r\n * @param document - The document to apply mutations to.\r\n * @param batchResult - The result of applying the MutationBatch to the\r\n * backend.\r\n */\r\n applyToRemoteDocument(document, batchResult) {\r\n const mutationResults = batchResult.mutationResults;\r\n for (let i = 0; i < this.mutations.length; i++) {\r\n const mutation = this.mutations[i];\r\n if (mutation.key.isEqual(document.key)) {\r\n const mutationResult = mutationResults[i];\r\n mutationApplyToRemoteDocument(mutation, document, mutationResult);\r\n }\r\n }\r\n }\r\n /**\r\n * Computes the local view of a document given all the mutations in this\r\n * batch.\r\n *\r\n * @param document - The document to apply mutations to.\r\n * @param mutatedFields - Fields that have been updated before applying this mutation batch.\r\n * @returns A `FieldMask` representing all the fields that are mutated.\r\n */\r\n applyToLocalView(document, mutatedFields) {\r\n // First, apply the base state. This allows us to apply non-idempotent\r\n // transform against a consistent set of values.\r\n for (const mutation of this.baseMutations) {\r\n if (mutation.key.isEqual(document.key)) {\r\n mutatedFields = mutationApplyToLocalView(mutation, document, mutatedFields, this.localWriteTime);\r\n }\r\n }\r\n // Second, apply all user-provided mutations.\r\n for (const mutation of this.mutations) {\r\n if (mutation.key.isEqual(document.key)) {\r\n mutatedFields = mutationApplyToLocalView(mutation, document, mutatedFields, this.localWriteTime);\r\n }\r\n }\r\n return mutatedFields;\r\n }\r\n /**\r\n * Computes the local view for all provided documents given the mutations in\r\n * this batch. Returns a `DocumentKey` to `Mutation` map which can be used to\r\n * replace all the mutation applications.\r\n */\r\n applyToLocalDocumentSet(documentMap, documentsWithoutRemoteVersion) {\r\n // TODO(mrschmidt): This implementation is O(n^2). If we apply the mutations\r\n // directly (as done in `applyToLocalView()`), we can reduce the complexity\r\n // to O(n).\r\n const overlays = newMutationMap();\r\n this.mutations.forEach(m => {\r\n const overlayedDocument = documentMap.get(m.key);\r\n // TODO(mutabledocuments): This method should take a MutableDocumentMap\r\n // and we should remove this cast.\r\n const mutableDocument = overlayedDocument.overlayedDocument;\r\n let mutatedFields = this.applyToLocalView(mutableDocument, overlayedDocument.mutatedFields);\r\n // Set mutatedFields to null if the document is only from local mutations.\r\n // This creates a Set or Delete mutation, instead of trying to create a\r\n // patch mutation as the overlay.\r\n mutatedFields = documentsWithoutRemoteVersion.has(m.key)\r\n ? null\r\n : mutatedFields;\r\n const overlay = calculateOverlayMutation(mutableDocument, mutatedFields);\r\n if (overlay !== null) {\r\n overlays.set(m.key, overlay);\r\n }\r\n if (!mutableDocument.isValidDocument()) {\r\n mutableDocument.convertToNoDocument(SnapshotVersion.min());\r\n }\r\n });\r\n return overlays;\r\n }\r\n keys() {\r\n return this.mutations.reduce((keys, m) => keys.add(m.key), documentKeySet());\r\n }\r\n isEqual(other) {\r\n return (this.batchId === other.batchId &&\r\n arrayEquals(this.mutations, other.mutations, (l, r) => mutationEquals(l, r)) &&\r\n arrayEquals(this.baseMutations, other.baseMutations, (l, r) => mutationEquals(l, r)));\r\n }\r\n}\r\n/** The result of applying a mutation batch to the backend. */\r\nclass MutationBatchResult {\r\n constructor(batch, commitVersion, mutationResults, \r\n /**\r\n * A pre-computed mapping from each mutated document to the resulting\r\n * version.\r\n */\r\n docVersions) {\r\n this.batch = batch;\r\n this.commitVersion = commitVersion;\r\n this.mutationResults = mutationResults;\r\n this.docVersions = docVersions;\r\n }\r\n /**\r\n * Creates a new MutationBatchResult for the given batch and results. There\r\n * must be one result for each mutation in the batch. This static factory\r\n * caches a document=&gt;version mapping (docVersions).\r\n */\r\n static from(batch, commitVersion, results) {\r\n hardAssert(batch.mutations.length === results.length);\r\n let versionMap = documentVersionMap();\r\n const mutations = batch.mutations;\r\n for (let i = 0; i < mutations.length; i++) {\r\n versionMap = versionMap.insert(mutations[i].key, results[i].version);\r\n }\r\n return new MutationBatchResult(batch, commitVersion, results, versionMap);\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 * Representation of an overlay computed by Firestore.\r\n *\r\n * Holds information about a mutation and the largest batch id in Firestore when\r\n * the mutation was created.\r\n */\r\nclass Overlay {\r\n constructor(largestBatchId, mutation) {\r\n this.largestBatchId = largestBatchId;\r\n this.mutation = mutation;\r\n }\r\n getKey() {\r\n return this.mutation.key;\r\n }\r\n isEqual(other) {\r\n return other !== null && this.mutation === other.mutation;\r\n }\r\n toString() {\r\n return `Overlay{\n largestBatchId: ${this.largestBatchId},\n mutation: ${this.mutation.toString()}\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\nclass ExistenceFilter {\r\n // TODO(b/33078163): just use simplest form of existence filter for now\r\n constructor(count) {\r\n this.count = count;\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 * Error Codes describing the different ways GRPC can fail. These are copied\r\n * directly from GRPC's sources here:\r\n *\r\n * https://github.com/grpc/grpc/blob/bceec94ea4fc5f0085d81235d8e1c06798dc341a/include/grpc%2B%2B/impl/codegen/status_code_enum.h\r\n *\r\n * Important! The names of these identifiers matter because the string forms\r\n * are used for reverse lookups from the webchannel stream. Do NOT change the\r\n * names of these identifiers or change this into a const enum.\r\n */\r\nvar RpcCode;\r\n(function (RpcCode) {\r\n RpcCode[RpcCode[\"OK\"] = 0] = \"OK\";\r\n RpcCode[RpcCode[\"CANCELLED\"] = 1] = \"CANCELLED\";\r\n RpcCode[RpcCode[\"UNKNOWN\"] = 2] = \"UNKNOWN\";\r\n RpcCode[RpcCode[\"INVALID_ARGUMENT\"] = 3] = \"INVALID_ARGUMENT\";\r\n RpcCode[RpcCode[\"DEADLINE_EXCEEDED\"] = 4] = \"DEADLINE_EXCEEDED\";\r\n RpcCode[RpcCode[\"NOT_FOUND\"] = 5] = \"NOT_FOUND\";\r\n RpcCode[RpcCode[\"ALREADY_EXISTS\"] = 6] = \"ALREADY_EXISTS\";\r\n RpcCode[RpcCode[\"PERMISSION_DENIED\"] = 7] = \"PERMISSION_DENIED\";\r\n RpcCode[RpcCode[\"UNAUTHENTICATED\"] = 16] = \"UNAUTHENTICATED\";\r\n RpcCode[RpcCode[\"RESOURCE_EXHAUSTED\"] = 8] = \"RESOURCE_EXHAUSTED\";\r\n RpcCode[RpcCode[\"FAILED_PRECONDITION\"] = 9] = \"FAILED_PRECONDITION\";\r\n RpcCode[RpcCode[\"ABORTED\"] = 10] = \"ABORTED\";\r\n RpcCode[RpcCode[\"OUT_OF_RANGE\"] = 11] = \"OUT_OF_RANGE\";\r\n RpcCode[RpcCode[\"UNIMPLEMENTED\"] = 12] = \"UNIMPLEMENTED\";\r\n RpcCode[RpcCode[\"INTERNAL\"] = 13] = \"INTERNAL\";\r\n RpcCode[RpcCode[\"UNAVAILABLE\"] = 14] = \"UNAVAILABLE\";\r\n RpcCode[RpcCode[\"DATA_LOSS\"] = 15] = \"DATA_LOSS\";\r\n})(RpcCode || (RpcCode = {}));\r\n/**\r\n * Determines whether an error code represents a permanent error when received\r\n * in response to a non-write operation.\r\n *\r\n * See isPermanentWriteError for classifying write errors.\r\n */\r\nfunction isPermanentError(code) {\r\n switch (code) {\r\n case Code.OK:\r\n return fail();\r\n case Code.CANCELLED:\r\n case Code.UNKNOWN:\r\n case Code.DEADLINE_EXCEEDED:\r\n case Code.RESOURCE_EXHAUSTED:\r\n case Code.INTERNAL:\r\n case Code.UNAVAILABLE:\r\n // Unauthenticated means something went wrong with our token and we need\r\n // to retry with new credentials which will happen automatically.\r\n case Code.UNAUTHENTICATED:\r\n return false;\r\n case Code.INVALID_ARGUMENT:\r\n case Code.NOT_FOUND:\r\n case Code.ALREADY_EXISTS:\r\n case Code.PERMISSION_DENIED:\r\n case Code.FAILED_PRECONDITION:\r\n // Aborted might be retried in some scenarios, but that is dependant on\r\n // the context and should handled individually by the calling code.\r\n // See https://cloud.google.com/apis/design/errors.\r\n case Code.ABORTED:\r\n case Code.OUT_OF_RANGE:\r\n case Code.UNIMPLEMENTED:\r\n case Code.DATA_LOSS:\r\n return true;\r\n default:\r\n return fail();\r\n }\r\n}\r\n/**\r\n * Determines whether an error code represents a permanent error when received\r\n * in response to a write operation.\r\n *\r\n * Write operations must be handled specially because as of b/119437764, ABORTED\r\n * errors on the write stream should be retried too (even though ABORTED errors\r\n * are not generally retryable).\r\n *\r\n * Note that during the initial handshake on the write stream an ABORTED error\r\n * signals that we should discard our stream token (i.e. it is permanent). This\r\n * means a handshake error should be classified with isPermanentError, above.\r\n */\r\nfunction isPermanentWriteError(code) {\r\n return isPermanentError(code) && code !== Code.ABORTED;\r\n}\r\n/**\r\n * Maps an error Code from GRPC status code number, like 0, 1, or 14. These\r\n * are not the same as HTTP status codes.\r\n *\r\n * @returns The Code equivalent to the given GRPC status code. Fails if there\r\n * is no match.\r\n */\r\nfunction mapCodeFromRpcCode(code) {\r\n if (code === undefined) {\r\n // This shouldn't normally happen, but in certain error cases (like trying\r\n // to send invalid proto messages) we may get an error with no GRPC code.\r\n logError('GRPC error has no .code');\r\n return Code.UNKNOWN;\r\n }\r\n switch (code) {\r\n case RpcCode.OK:\r\n return Code.OK;\r\n case RpcCode.CANCELLED:\r\n return Code.CANCELLED;\r\n case RpcCode.UNKNOWN:\r\n return Code.UNKNOWN;\r\n case RpcCode.DEADLINE_EXCEEDED:\r\n return Code.DEADLINE_EXCEEDED;\r\n case RpcCode.RESOURCE_EXHAUSTED:\r\n return Code.RESOURCE_EXHAUSTED;\r\n case RpcCode.INTERNAL:\r\n return Code.INTERNAL;\r\n case RpcCode.UNAVAILABLE:\r\n return Code.UNAVAILABLE;\r\n case RpcCode.UNAUTHENTICATED:\r\n return Code.UNAUTHENTICATED;\r\n case RpcCode.INVALID_ARGUMENT:\r\n return Code.INVALID_ARGUMENT;\r\n case RpcCode.NOT_FOUND:\r\n return Code.NOT_FOUND;\r\n case RpcCode.ALREADY_EXISTS:\r\n return Code.ALREADY_EXISTS;\r\n case RpcCode.PERMISSION_DENIED:\r\n return Code.PERMISSION_DENIED;\r\n case RpcCode.FAILED_PRECONDITION:\r\n return Code.FAILED_PRECONDITION;\r\n case RpcCode.ABORTED:\r\n return Code.ABORTED;\r\n case RpcCode.OUT_OF_RANGE:\r\n return Code.OUT_OF_RANGE;\r\n case RpcCode.UNIMPLEMENTED:\r\n return Code.UNIMPLEMENTED;\r\n case RpcCode.DATA_LOSS:\r\n return Code.DATA_LOSS;\r\n default:\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\n/**\r\n * An event from the RemoteStore. It is split into targetChanges (changes to the\r\n * state or the set of documents in our watched targets) and documentUpdates\r\n * (changes to the actual documents).\r\n */\r\nclass RemoteEvent {\r\n constructor(\r\n /**\r\n * The snapshot version this event brings us up to, or MIN if not set.\r\n */\r\n snapshotVersion, \r\n /**\r\n * A map from target to changes to the target. See TargetChange.\r\n */\r\n targetChanges, \r\n /**\r\n * A set of targets that is known to be inconsistent. Listens for these\r\n * targets should be re-established without resume tokens.\r\n */\r\n targetMismatches, \r\n /**\r\n * A set of which documents have changed or been deleted, along with the\r\n * doc's new values (if not deleted).\r\n */\r\n documentUpdates, \r\n /**\r\n * A set of which document updates are due only to limbo resolution targets.\r\n */\r\n resolvedLimboDocuments) {\r\n this.snapshotVersion = snapshotVersion;\r\n this.targetChanges = targetChanges;\r\n this.targetMismatches = targetMismatches;\r\n this.documentUpdates = documentUpdates;\r\n this.resolvedLimboDocuments = resolvedLimboDocuments;\r\n }\r\n /**\r\n * HACK: Views require RemoteEvents in order to determine whether the view is\r\n * CURRENT, but secondary tabs don't receive remote events. So this method is\r\n * used to create a synthesized RemoteEvent that can be used to apply a\r\n * CURRENT status change to a View, for queries executed in a different tab.\r\n */\r\n // PORTING NOTE: Multi-tab only\r\n static createSynthesizedRemoteEventForCurrentChange(targetId, current, resumeToken) {\r\n const targetChanges = new Map();\r\n targetChanges.set(targetId, TargetChange.createSynthesizedTargetChangeForCurrentChange(targetId, current, resumeToken));\r\n return new RemoteEvent(SnapshotVersion.min(), targetChanges, targetIdSet(), mutableDocumentMap(), documentKeySet());\r\n }\r\n}\r\n/**\r\n * A TargetChange specifies the set of changes for a specific target as part of\r\n * a RemoteEvent. These changes track which documents are added, modified or\r\n * removed, as well as the target's resume token and whether the target is\r\n * marked CURRENT.\r\n * The actual changes *to* documents are not part of the TargetChange since\r\n * documents may be part of multiple targets.\r\n */\r\nclass TargetChange {\r\n constructor(\r\n /**\r\n * An opaque, server-assigned token that allows watching a query to be resumed\r\n * after disconnecting without retransmitting all the data that matches the\r\n * query. The resume token essentially identifies a point in time from which\r\n * the server should resume sending results.\r\n */\r\n resumeToken, \r\n /**\r\n * The \"current\" (synced) status of this target. Note that \"current\"\r\n * has special meaning in the RPC protocol that implies that a target is\r\n * both up-to-date and consistent with the rest of the watch stream.\r\n */\r\n current, \r\n /**\r\n * The set of documents that were newly assigned to this target as part of\r\n * this remote event.\r\n */\r\n addedDocuments, \r\n /**\r\n * The set of documents that were already assigned to this target but received\r\n * an update during this remote event.\r\n */\r\n modifiedDocuments, \r\n /**\r\n * The set of documents that were removed from this target as part of this\r\n * remote event.\r\n */\r\n removedDocuments) {\r\n this.resumeToken = resumeToken;\r\n this.current = current;\r\n this.addedDocuments = addedDocuments;\r\n this.modifiedDocuments = modifiedDocuments;\r\n this.removedDocuments = removedDocuments;\r\n }\r\n /**\r\n * This method is used to create a synthesized TargetChanges that can be used to\r\n * apply a CURRENT status change to a View (for queries executed in a different\r\n * tab) or for new queries (to raise snapshots with correct CURRENT status).\r\n */\r\n static createSynthesizedTargetChangeForCurrentChange(targetId, current, resumeToken) {\r\n return new TargetChange(resumeToken, current, documentKeySet(), documentKeySet(), documentKeySet());\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 * Represents a changed document and a list of target ids to which this change\r\n * applies.\r\n *\r\n * If document has been deleted NoDocument will be provided.\r\n */\r\nclass DocumentWatchChange {\r\n constructor(\r\n /** The new document applies to all of these targets. */\r\n updatedTargetIds, \r\n /** The new document is removed from all of these targets. */\r\n removedTargetIds, \r\n /** The key of the document for this change. */\r\n key, \r\n /**\r\n * The new document or NoDocument if it was deleted. Is null if the\r\n * document went out of view without the server sending a new document.\r\n */\r\n newDoc) {\r\n this.updatedTargetIds = updatedTargetIds;\r\n this.removedTargetIds = removedTargetIds;\r\n this.key = key;\r\n this.newDoc = newDoc;\r\n }\r\n}\r\nclass ExistenceFilterChange {\r\n constructor(targetId, existenceFilter) {\r\n this.targetId = targetId;\r\n this.existenceFilter = existenceFilter;\r\n }\r\n}\r\nclass WatchTargetChange {\r\n constructor(\r\n /** What kind of change occurred to the watch target. */\r\n state, \r\n /** The target IDs that were added/removed/set. */\r\n targetIds, \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 /** An RPC error indicating why the watch failed. */\r\n cause = null) {\r\n this.state = state;\r\n this.targetIds = targetIds;\r\n this.resumeToken = resumeToken;\r\n this.cause = cause;\r\n }\r\n}\r\n/** Tracks the internal state of a Watch target. */\r\nclass TargetState {\r\n constructor() {\r\n /**\r\n * The number of pending responses (adds or removes) that we are waiting on.\r\n * We only consider targets active that have no pending responses.\r\n */\r\n this.pendingResponses = 0;\r\n /**\r\n * Keeps track of the document changes since the last raised snapshot.\r\n *\r\n * These changes are continuously updated as we receive document updates and\r\n * always reflect the current set of changes against the last issued snapshot.\r\n */\r\n this.documentChanges = snapshotChangesMap();\r\n /** See public getters for explanations of these fields. */\r\n this._resumeToken = ByteString.EMPTY_BYTE_STRING;\r\n this._current = false;\r\n /**\r\n * Whether this target state should be included in the next snapshot. We\r\n * initialize to true so that newly-added targets are included in the next\r\n * RemoteEvent.\r\n */\r\n this._hasPendingChanges = true;\r\n }\r\n /**\r\n * Whether this target has been marked 'current'.\r\n *\r\n * 'Current' has special meaning in the RPC protocol: It implies that the\r\n * Watch backend has sent us all changes up to the point at which the target\r\n * was added and that the target is consistent with the rest of the watch\r\n * stream.\r\n */\r\n get current() {\r\n return this._current;\r\n }\r\n /** The last resume token sent to us for this target. */\r\n get resumeToken() {\r\n return this._resumeToken;\r\n }\r\n /** Whether this target has pending target adds or target removes. */\r\n get isPending() {\r\n return this.pendingResponses !== 0;\r\n }\r\n /** Whether we have modified any state that should trigger a snapshot. */\r\n get hasPendingChanges() {\r\n return this._hasPendingChanges;\r\n }\r\n /**\r\n * Applies the resume token to the TargetChange, but only when it has a new\r\n * value. Empty resumeTokens are discarded.\r\n */\r\n updateResumeToken(resumeToken) {\r\n if (resumeToken.approximateByteSize() > 0) {\r\n this._hasPendingChanges = true;\r\n this._resumeToken = resumeToken;\r\n }\r\n }\r\n /**\r\n * Creates a target change from the current set of changes.\r\n *\r\n * To reset the document changes after raising this snapshot, call\r\n * `clearPendingChanges()`.\r\n */\r\n toTargetChange() {\r\n let addedDocuments = documentKeySet();\r\n let modifiedDocuments = documentKeySet();\r\n let removedDocuments = documentKeySet();\r\n this.documentChanges.forEach((key, changeType) => {\r\n switch (changeType) {\r\n case 0 /* ChangeType.Added */:\r\n addedDocuments = addedDocuments.add(key);\r\n break;\r\n case 2 /* ChangeType.Modified */:\r\n modifiedDocuments = modifiedDocuments.add(key);\r\n break;\r\n case 1 /* ChangeType.Removed */:\r\n removedDocuments = removedDocuments.add(key);\r\n break;\r\n default:\r\n fail();\r\n }\r\n });\r\n return new TargetChange(this._resumeToken, this._current, addedDocuments, modifiedDocuments, removedDocuments);\r\n }\r\n /**\r\n * Resets the document changes and sets `hasPendingChanges` to false.\r\n */\r\n clearPendingChanges() {\r\n this._hasPendingChanges = false;\r\n this.documentChanges = snapshotChangesMap();\r\n }\r\n addDocumentChange(key, changeType) {\r\n this._hasPendingChanges = true;\r\n this.documentChanges = this.documentChanges.insert(key, changeType);\r\n }\r\n removeDocumentChange(key) {\r\n this._hasPendingChanges = true;\r\n this.documentChanges = this.documentChanges.remove(key);\r\n }\r\n recordPendingTargetRequest() {\r\n this.pendingResponses += 1;\r\n }\r\n recordTargetResponse() {\r\n this.pendingResponses -= 1;\r\n }\r\n markCurrent() {\r\n this._hasPendingChanges = true;\r\n this._current = true;\r\n }\r\n}\r\nconst LOG_TAG$g = 'WatchChangeAggregator';\r\n/**\r\n * A helper class to accumulate watch changes into a RemoteEvent.\r\n */\r\nclass WatchChangeAggregator {\r\n constructor(metadataProvider) {\r\n this.metadataProvider = metadataProvider;\r\n /** The internal state of all tracked targets. */\r\n this.targetStates = new Map();\r\n /** Keeps track of the documents to update since the last raised snapshot. */\r\n this.pendingDocumentUpdates = mutableDocumentMap();\r\n /** A mapping of document keys to their set of target IDs. */\r\n this.pendingDocumentTargetMapping = documentTargetMap();\r\n /**\r\n * A list of targets with existence filter mismatches. These targets are\r\n * known to be inconsistent and their listens needs to be re-established by\r\n * RemoteStore.\r\n */\r\n this.pendingTargetResets = new SortedSet(primitiveComparator);\r\n }\r\n /**\r\n * Processes and adds the DocumentWatchChange to the current set of changes.\r\n */\r\n handleDocumentChange(docChange) {\r\n for (const targetId of docChange.updatedTargetIds) {\r\n if (docChange.newDoc && docChange.newDoc.isFoundDocument()) {\r\n this.addDocumentToTarget(targetId, docChange.newDoc);\r\n }\r\n else {\r\n this.removeDocumentFromTarget(targetId, docChange.key, docChange.newDoc);\r\n }\r\n }\r\n for (const targetId of docChange.removedTargetIds) {\r\n this.removeDocumentFromTarget(targetId, docChange.key, docChange.newDoc);\r\n }\r\n }\r\n /** Processes and adds the WatchTargetChange to the current set of changes. */\r\n handleTargetChange(targetChange) {\r\n this.forEachTarget(targetChange, targetId => {\r\n const targetState = this.ensureTargetState(targetId);\r\n switch (targetChange.state) {\r\n case 0 /* WatchTargetChangeState.NoChange */:\r\n if (this.isActiveTarget(targetId)) {\r\n targetState.updateResumeToken(targetChange.resumeToken);\r\n }\r\n break;\r\n case 1 /* WatchTargetChangeState.Added */:\r\n // We need to decrement the number of pending acks needed from watch\r\n // for this targetId.\r\n targetState.recordTargetResponse();\r\n if (!targetState.isPending) {\r\n // We have a freshly added target, so we need to reset any state\r\n // that we had previously. This can happen e.g. when remove and add\r\n // back a target for existence filter mismatches.\r\n targetState.clearPendingChanges();\r\n }\r\n targetState.updateResumeToken(targetChange.resumeToken);\r\n break;\r\n case 2 /* WatchTargetChangeState.Removed */:\r\n // We need to keep track of removed targets to we can post-filter and\r\n // remove any target changes.\r\n // We need to decrement the number of pending acks needed from watch\r\n // for this targetId.\r\n targetState.recordTargetResponse();\r\n if (!targetState.isPending) {\r\n this.removeTarget(targetId);\r\n }\r\n break;\r\n case 3 /* WatchTargetChangeState.Current */:\r\n if (this.isActiveTarget(targetId)) {\r\n targetState.markCurrent();\r\n targetState.updateResumeToken(targetChange.resumeToken);\r\n }\r\n break;\r\n case 4 /* WatchTargetChangeState.Reset */:\r\n if (this.isActiveTarget(targetId)) {\r\n // Reset the target and synthesizes removes for all existing\r\n // documents. The backend will re-add any documents that still\r\n // match the target before it sends the next global snapshot.\r\n this.resetTarget(targetId);\r\n targetState.updateResumeToken(targetChange.resumeToken);\r\n }\r\n break;\r\n default:\r\n fail();\r\n }\r\n });\r\n }\r\n /**\r\n * Iterates over all targetIds that the watch change applies to: either the\r\n * targetIds explicitly listed in the change or the targetIds of all currently\r\n * active targets.\r\n */\r\n forEachTarget(targetChange, fn) {\r\n if (targetChange.targetIds.length > 0) {\r\n targetChange.targetIds.forEach(fn);\r\n }\r\n else {\r\n this.targetStates.forEach((_, targetId) => {\r\n if (this.isActiveTarget(targetId)) {\r\n fn(targetId);\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Handles existence filters and synthesizes deletes for filter mismatches.\r\n * Targets that are invalidated by filter mismatches are added to\r\n * `pendingTargetResets`.\r\n */\r\n handleExistenceFilter(watchChange) {\r\n const targetId = watchChange.targetId;\r\n const expectedCount = watchChange.existenceFilter.count;\r\n const targetData = this.targetDataForActiveTarget(targetId);\r\n if (targetData) {\r\n const target = targetData.target;\r\n if (targetIsDocumentTarget(target)) {\r\n if (expectedCount === 0) {\r\n // The existence filter told us the document does not exist. We deduce\r\n // that this document does not exist and apply a deleted document to\r\n // our updates. Without applying this deleted document there might be\r\n // another query that will raise this document as part of a snapshot\r\n // until it is resolved, essentially exposing inconsistency between\r\n // queries.\r\n const key = new DocumentKey(target.path);\r\n this.removeDocumentFromTarget(targetId, key, MutableDocument.newNoDocument(key, SnapshotVersion.min()));\r\n }\r\n else {\r\n hardAssert(expectedCount === 1);\r\n }\r\n }\r\n else {\r\n const currentSize = this.getCurrentDocumentCountForTarget(targetId);\r\n if (currentSize !== expectedCount) {\r\n // Existence filter mismatch: We reset the mapping and raise a new\r\n // snapshot with `isFromCache:true`.\r\n this.resetTarget(targetId);\r\n this.pendingTargetResets = this.pendingTargetResets.add(targetId);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Converts the currently accumulated state into a remote event at the\r\n * provided snapshot version. Resets the accumulated changes before returning.\r\n */\r\n createRemoteEvent(snapshotVersion) {\r\n const targetChanges = new Map();\r\n this.targetStates.forEach((targetState, targetId) => {\r\n const targetData = this.targetDataForActiveTarget(targetId);\r\n if (targetData) {\r\n if (targetState.current && targetIsDocumentTarget(targetData.target)) {\r\n // Document queries for document that don't exist can produce an empty\r\n // result set. To update our local cache, we synthesize a document\r\n // delete if we have not previously received the document. This\r\n // resolves the limbo state of the document, removing it from\r\n // limboDocumentRefs.\r\n //\r\n // TODO(dimond): Ideally we would have an explicit lookup target\r\n // instead resulting in an explicit delete message and we could\r\n // remove this special logic.\r\n const key = new DocumentKey(targetData.target.path);\r\n if (this.pendingDocumentUpdates.get(key) === null &&\r\n !this.targetContainsDocument(targetId, key)) {\r\n this.removeDocumentFromTarget(targetId, key, MutableDocument.newNoDocument(key, snapshotVersion));\r\n }\r\n }\r\n if (targetState.hasPendingChanges) {\r\n targetChanges.set(targetId, targetState.toTargetChange());\r\n targetState.clearPendingChanges();\r\n }\r\n }\r\n });\r\n let resolvedLimboDocuments = documentKeySet();\r\n // We extract the set of limbo-only document updates as the GC logic\r\n // special-cases documents that do not appear in the target cache.\r\n //\r\n // TODO(gsoltis): Expand on this comment once GC is available in the JS\r\n // client.\r\n this.pendingDocumentTargetMapping.forEach((key, targets) => {\r\n let isOnlyLimboTarget = true;\r\n targets.forEachWhile(targetId => {\r\n const targetData = this.targetDataForActiveTarget(targetId);\r\n if (targetData &&\r\n targetData.purpose !== 2 /* TargetPurpose.LimboResolution */) {\r\n isOnlyLimboTarget = false;\r\n return false;\r\n }\r\n return true;\r\n });\r\n if (isOnlyLimboTarget) {\r\n resolvedLimboDocuments = resolvedLimboDocuments.add(key);\r\n }\r\n });\r\n this.pendingDocumentUpdates.forEach((_, doc) => doc.setReadTime(snapshotVersion));\r\n const remoteEvent = new RemoteEvent(snapshotVersion, targetChanges, this.pendingTargetResets, this.pendingDocumentUpdates, resolvedLimboDocuments);\r\n this.pendingDocumentUpdates = mutableDocumentMap();\r\n this.pendingDocumentTargetMapping = documentTargetMap();\r\n this.pendingTargetResets = new SortedSet(primitiveComparator);\r\n return remoteEvent;\r\n }\r\n /**\r\n * Adds the provided document to the internal list of document updates and\r\n * its document key to the given target's mapping.\r\n */\r\n // Visible for testing.\r\n addDocumentToTarget(targetId, document) {\r\n if (!this.isActiveTarget(targetId)) {\r\n return;\r\n }\r\n const changeType = this.targetContainsDocument(targetId, document.key)\r\n ? 2 /* ChangeType.Modified */\r\n : 0 /* ChangeType.Added */;\r\n const targetState = this.ensureTargetState(targetId);\r\n targetState.addDocumentChange(document.key, changeType);\r\n this.pendingDocumentUpdates = this.pendingDocumentUpdates.insert(document.key, document);\r\n this.pendingDocumentTargetMapping =\r\n this.pendingDocumentTargetMapping.insert(document.key, this.ensureDocumentTargetMapping(document.key).add(targetId));\r\n }\r\n /**\r\n * Removes the provided document from the target mapping. If the\r\n * document no longer matches the target, but the document's state is still\r\n * known (e.g. we know that the document was deleted or we received the change\r\n * that caused the filter mismatch), the new document can be provided\r\n * to update the remote document cache.\r\n */\r\n // Visible for testing.\r\n removeDocumentFromTarget(targetId, key, updatedDocument) {\r\n if (!this.isActiveTarget(targetId)) {\r\n return;\r\n }\r\n const targetState = this.ensureTargetState(targetId);\r\n if (this.targetContainsDocument(targetId, key)) {\r\n targetState.addDocumentChange(key, 1 /* ChangeType.Removed */);\r\n }\r\n else {\r\n // The document may have entered and left the target before we raised a\r\n // snapshot, so we can just ignore the change.\r\n targetState.removeDocumentChange(key);\r\n }\r\n this.pendingDocumentTargetMapping =\r\n this.pendingDocumentTargetMapping.insert(key, this.ensureDocumentTargetMapping(key).delete(targetId));\r\n if (updatedDocument) {\r\n this.pendingDocumentUpdates = this.pendingDocumentUpdates.insert(key, updatedDocument);\r\n }\r\n }\r\n removeTarget(targetId) {\r\n this.targetStates.delete(targetId);\r\n }\r\n /**\r\n * Returns the current count of documents in the target. This includes both\r\n * the number of documents that the LocalStore considers to be part of the\r\n * target as well as any accumulated changes.\r\n */\r\n getCurrentDocumentCountForTarget(targetId) {\r\n const targetState = this.ensureTargetState(targetId);\r\n const targetChange = targetState.toTargetChange();\r\n return (this.metadataProvider.getRemoteKeysForTarget(targetId).size +\r\n targetChange.addedDocuments.size -\r\n targetChange.removedDocuments.size);\r\n }\r\n /**\r\n * Increment the number of acks needed from watch before we can consider the\r\n * server to be 'in-sync' with the client's active targets.\r\n */\r\n recordPendingTargetRequest(targetId) {\r\n // For each request we get we need to record we need a response for it.\r\n const targetState = this.ensureTargetState(targetId);\r\n targetState.recordPendingTargetRequest();\r\n }\r\n ensureTargetState(targetId) {\r\n let result = this.targetStates.get(targetId);\r\n if (!result) {\r\n result = new TargetState();\r\n this.targetStates.set(targetId, result);\r\n }\r\n return result;\r\n }\r\n ensureDocumentTargetMapping(key) {\r\n let targetMapping = this.pendingDocumentTargetMapping.get(key);\r\n if (!targetMapping) {\r\n targetMapping = new SortedSet(primitiveComparator);\r\n this.pendingDocumentTargetMapping =\r\n this.pendingDocumentTargetMapping.insert(key, targetMapping);\r\n }\r\n return targetMapping;\r\n }\r\n /**\r\n * Verifies that the user is still interested in this target (by calling\r\n * `getTargetDataForTarget()`) and that we are not waiting for pending ADDs\r\n * from watch.\r\n */\r\n isActiveTarget(targetId) {\r\n const targetActive = this.targetDataForActiveTarget(targetId) !== null;\r\n if (!targetActive) {\r\n logDebug(LOG_TAG$g, 'Detected inactive target', targetId);\r\n }\r\n return targetActive;\r\n }\r\n /**\r\n * Returns the TargetData for an active target (i.e. a target that the user\r\n * is still interested in that has no outstanding target change requests).\r\n */\r\n targetDataForActiveTarget(targetId) {\r\n const targetState = this.targetStates.get(targetId);\r\n return targetState && targetState.isPending\r\n ? null\r\n : this.metadataProvider.getTargetDataForTarget(targetId);\r\n }\r\n /**\r\n * Resets the state of a Watch target to its initial state (e.g. sets\r\n * 'current' to false, clears the resume token and removes its target mapping\r\n * from all documents).\r\n */\r\n resetTarget(targetId) {\r\n this.targetStates.set(targetId, new TargetState());\r\n // Trigger removal for any documents currently mapped to this target.\r\n // These removals will be part of the initial snapshot if Watch does not\r\n // resend these documents.\r\n const existingKeys = this.metadataProvider.getRemoteKeysForTarget(targetId);\r\n existingKeys.forEach(key => {\r\n this.removeDocumentFromTarget(targetId, key, /*updatedDocument=*/ null);\r\n });\r\n }\r\n /**\r\n * Returns whether the LocalStore considers the document to be part of the\r\n * specified target.\r\n */\r\n targetContainsDocument(targetId, key) {\r\n const existingKeys = this.metadataProvider.getRemoteKeysForTarget(targetId);\r\n return existingKeys.has(key);\r\n }\r\n}\r\nfunction documentTargetMap() {\r\n return new SortedMap(DocumentKey.comparator);\r\n}\r\nfunction snapshotChangesMap() {\r\n return new SortedMap(DocumentKey.comparator);\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 DIRECTIONS = (() => {\r\n const dirs = {};\r\n dirs[\"asc\" /* Direction.ASCENDING */] = 'ASCENDING';\r\n dirs[\"desc\" /* Direction.DESCENDING */] = 'DESCENDING';\r\n return dirs;\r\n})();\r\nconst OPERATORS = (() => {\r\n const ops = {};\r\n ops[\"<\" /* Operator.LESS_THAN */] = 'LESS_THAN';\r\n ops[\"<=\" /* Operator.LESS_THAN_OR_EQUAL */] = 'LESS_THAN_OR_EQUAL';\r\n ops[\">\" /* Operator.GREATER_THAN */] = 'GREATER_THAN';\r\n ops[\">=\" /* Operator.GREATER_THAN_OR_EQUAL */] = 'GREATER_THAN_OR_EQUAL';\r\n ops[\"==\" /* Operator.EQUAL */] = 'EQUAL';\r\n ops[\"!=\" /* Operator.NOT_EQUAL */] = 'NOT_EQUAL';\r\n ops[\"array-contains\" /* Operator.ARRAY_CONTAINS */] = 'ARRAY_CONTAINS';\r\n ops[\"in\" /* Operator.IN */] = 'IN';\r\n ops[\"not-in\" /* Operator.NOT_IN */] = 'NOT_IN';\r\n ops[\"array-contains-any\" /* Operator.ARRAY_CONTAINS_ANY */] = 'ARRAY_CONTAINS_ANY';\r\n return ops;\r\n})();\r\nconst COMPOSITE_OPERATORS = (() => {\r\n const ops = {};\r\n ops[\"and\" /* CompositeOperator.AND */] = 'AND';\r\n ops[\"or\" /* CompositeOperator.OR */] = 'OR';\r\n return ops;\r\n})();\r\nfunction assertPresent(value, description) {\r\n}\r\n/**\r\n * This class generates JsonObject values for the Datastore API suitable for\r\n * sending to either GRPC stub methods or via the JSON/HTTP REST API.\r\n *\r\n * The serializer supports both Protobuf.js and Proto3 JSON formats. By\r\n * setting `useProto3Json` to true, the serializer will use the Proto3 JSON\r\n * format.\r\n *\r\n * For a description of the Proto3 JSON format check\r\n * https://developers.google.com/protocol-buffers/docs/proto3#json\r\n *\r\n * TODO(klimt): We can remove the databaseId argument if we keep the full\r\n * resource name in documents.\r\n */\r\nclass JsonProtoSerializer {\r\n constructor(databaseId, useProto3Json) {\r\n this.databaseId = databaseId;\r\n this.useProto3Json = useProto3Json;\r\n }\r\n}\r\nfunction fromRpcStatus(status) {\r\n const code = status.code === undefined ? Code.UNKNOWN : mapCodeFromRpcCode(status.code);\r\n return new FirestoreError(code, status.message || '');\r\n}\r\n/**\r\n * Returns a value for a number (or null) that's appropriate to put into\r\n * a google.protobuf.Int32Value proto.\r\n * DO NOT USE THIS FOR ANYTHING ELSE.\r\n * This method cheats. It's typed as returning \"number\" because that's what\r\n * our generated proto interfaces say Int32Value must be. But GRPC actually\r\n * expects a { value: <number> } 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 fromAggregationResult(aggregationQueryResponse) {\r\n var _a;\r\n assertPresent(aggregationQueryResponse.result);\r\n assertPresent(aggregationQueryResponse.result.aggregateFields);\r\n return new ObjectValue({\r\n mapValue: { fields: (_a = aggregationQueryResponse.result) === null || _a === void 0 ? void 0 : _a.aggregateFields }\r\n });\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, aggregates) {\r\n const queryTarget = toQueryTarget(serializer, target);\r\n const aggregations = [];\r\n aggregates.forEach(aggregate => {\r\n if (aggregate.aggregateType === 'count') {\r\n aggregations.push({\r\n alias: aggregate.alias.canonicalString(),\r\n count: {}\r\n });\r\n }\r\n else if (aggregate.aggregateType === 'avg') {\r\n aggregations.push({\r\n alias: aggregate.alias.canonicalString(),\r\n avg: {\r\n field: toFieldPathReference(aggregate.fieldPath)\r\n }\r\n });\r\n }\r\n else if (aggregate.aggregateType === 'sum') {\r\n aggregations.push({\r\n alias: aggregate.alias.canonicalString(),\r\n sum: {\r\n field: toFieldPathReference(aggregate.fieldPath)\r\n }\r\n });\r\n }\r\n });\r\n return {\r\n structuredAggregationQuery: {\r\n aggregations,\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 * <p>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 * <p>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 * <p>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 * <ul>\r\n * <li>A | (B | C) == (A | B) | C == (A | B | C)\r\n * <li>A & (B & C) == (A & B) & C == (A & B & C)\r\n * </ul>\r\n *\r\n * <p>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 getDocumentsMatchingQuery(transaction, query, offset, mutatedDocs) {\r\n const collection = query.path;\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 if (document.isFoundDocument() &&\r\n (queryMatches(query, document) || mutatedDocs.has(document.key))) {\r\n // Either the document matches the given query, or it is mutated.\r\n results = results.insert(document.key, document);\r\n }\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 * <p>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 overlays;\r\n return this.documentOverlayCache\r\n .getOverlaysForCollection(transaction, query.path, offset.largestBatchId)\r\n .next(result => {\r\n overlays = result;\r\n return this.remoteDocumentCache.getDocumentsMatchingQuery(transaction, query, offset, overlays);\r\n })\r\n .next(remoteDocuments => {\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 getDocumentsMatchingQuery(transaction, query, offset, mutatedDocs) {\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 collectionPath = query.path;\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 if (!mutatedDocs.has(document.key) && !queryMatches(query, document)) {\r\n // The document cannot possibly match the query.\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_<persistence_prefix>_<instance_key>\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 const safariIndexdbBugVersionRegex = /(?:Version|Mobile)\\/1[456]/;\r\n if (isSafari() &&\r\n (navigator.appVersion.match(safariIndexdbBugVersionRegex) ||\r\n navigator.userAgent.match(safariIndexdbBugVersionRegex))) {\r\n // On Safari 14, 15, and 16, 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_<persistence_prefix>_<instance_key>\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_<persistence_prefix>_<batch_id>\r\n// (for unauthenticated users)\r\n// or: firestore_mutations_<persistence_prefix>_<batch_id>_<user_uid>\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_<persistence_prefix>_<target_id>\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_<persistence_prefix>\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_<persistenceKey>\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_<persistence_prefix>'.\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 2023 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 value returned from the most recent invocation of\r\n * `generateUniqueDebugId()`, or null if it has never been invoked.\r\n */\r\nlet lastUniqueDebugId = null;\r\n/**\r\n * Generates and returns an initial value for `lastUniqueDebugId`.\r\n *\r\n * The returned value is randomly selected from a range of integers that are\r\n * represented as 8 hexadecimal digits. This means that (within reason) any\r\n * numbers generated by incrementing the returned number by 1 will also be\r\n * represented by 8 hexadecimal digits. This leads to all \"IDs\" having the same\r\n * length when converted to a hexadecimal string, making reading logs containing\r\n * these IDs easier to follow. And since the return value is randomly selected\r\n * it will help to differentiate between logs from different executions.\r\n */\r\nfunction generateInitialUniqueDebugId() {\r\n const minResult = 0x10000000;\r\n const maxResult = 0x90000000;\r\n const resultRange = maxResult - minResult;\r\n const resultOffset = Math.round(resultRange * Math.random());\r\n return minResult + resultOffset;\r\n}\r\n/**\r\n * Generates and returns a unique ID as a hexadecimal string.\r\n *\r\n * The returned ID is intended to be used in debug logging messages to help\r\n * correlate log messages that may be spatially separated in the logs, but\r\n * logically related. For example, a network connection could include the same\r\n * \"debug ID\" string in all of its log messages to help trace a specific\r\n * connection over time.\r\n *\r\n * @return the 10-character generated ID (e.g. \"0xa1b2c3d4\").\r\n */\r\nfunction generateUniqueDebugId() {\r\n if (lastUniqueDebugId === null) {\r\n lastUniqueDebugId = generateInitialUniqueDebugId();\r\n }\r\n else {\r\n lastUniqueDebugId++;\r\n }\r\n return '0x' + lastUniqueDebugId.toString(16);\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<fs.Stats>) => {\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 = 'GrpcConnection';\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 streamId = generateUniqueDebugId();\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}' ${streamId} 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}' ${streamId} 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}' ${streamId} 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 streamId = generateUniqueDebugId();\r\n const results = [];\r\n const responseDeferred = new Deferred();\r\n logDebug(LOG_TAG$9, `RPC '${rpcName}' ${streamId} 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} ${streamId} 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}' ${streamId} 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}' ${streamId} 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 streamId = generateUniqueDebugId();\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, `RPC '${rpcName}' stream ${streamId} 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, `RPC '${rpcName}' stream ${streamId} ` +\r\n 'not sending because gRPC stream is closed:', msg);\r\n }\r\n },\r\n closeFn: () => {\r\n logDebug(LOG_TAG$9, `RPC '${rpcName}' stream ${streamId} 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, `RPC '${rpcName}' stream ${streamId} received:`, msg);\r\n stream.callOnMessage(msg);\r\n }\r\n });\r\n grpcStream.on('end', () => {\r\n logDebug(LOG_TAG$9, `RPC '${rpcName}' stream ${streamId} ended.`);\r\n close();\r\n });\r\n grpcStream.on('error', (grpcError) => {\r\n if (!closed) {\r\n logWarn(LOG_TAG$9, `RPC '${rpcName}' stream ${streamId} 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 RPC '${rpcName}' stream ${streamId} ` +\r\n `to ${this.databaseInfo.host}`);\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\t\"sum\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"avg\"\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\tsum: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Sum\",\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\tavg: {\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Avg\",\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\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\tSum: {\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\tfield: {\n\t\t\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\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\tAvg: {\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\tfield: {\n\t\t\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\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}\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, aggregates) {\r\n const datastoreImpl = debugCast(datastore);\r\n const request = toRunAggregationQueryRequest(datastoreImpl.serializer, queryToTarget(query), aggregates);\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 // Omit RunAggregationQueryResponse that only contain readTimes.\r\n const filteredResult = response.filter(proto => !!proto.result);\r\n hardAssert(filteredResult.length === 1);\r\n return fromAggregationResult(filteredResult[0]);\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.resolve()\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 2023 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 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\n/*\r\n * A wrapper implementation of Observer<T> 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 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 firestoreClientRunAggregateQuery(client, query, aggregates) {\r\n const deferred = new Deferred();\r\n client.asyncQueue.enqueueAndForget(async () => {\r\n // TODO (sum/avg) should we update this to use the event manager?\r\n // Implement and call executeAggregateQueryViaSnapshotListener, similar\r\n // to the implementation in firestoreClientGetDocumentsViaSnapshotListener\r\n // above\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 aggregate result because the client is offline.'));\r\n }\r\n else {\r\n const datastore = await getDatastore(client);\r\n deferred.resolve(invokeRunAggregationQueryRpc(datastore, query, aggregates));\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\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\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:1)}).\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<LoadBundleTaskProgress>`.\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<LoadBundleTaskProgress>.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<LoadBundleTaskProgress>.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<Uint8Array>` 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<LoadBundleTaskProgress>`.\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 2023 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 * Concrete implementation of the Aggregate type.\r\n */\r\nclass AggregateImpl {\r\n constructor(alias, aggregateType, fieldPath) {\r\n this.alias = alias;\r\n this.aggregateType = aggregateType;\r\n this.fieldPath = fieldPath;\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\nconst aliasRegExp = /^[_a-zA-Z][_a-zA-Z0-9]*(?:\\.[_a-zA-Z][_a-zA-Z0-9]*)*$/;\r\n/**\r\n * An alias for aggregation results.\r\n * @internal\r\n */\r\nclass AggregateAlias {\r\n /**\r\n * @internal\r\n * @param alias Un-escaped alias representation\r\n */\r\n constructor(alias) {\r\n this.alias = alias;\r\n }\r\n /**\r\n * Returns true if the string could be used as an alias.\r\n */\r\n static isValidAlias(value) {\r\n return aliasRegExp.test(value);\r\n }\r\n /**\r\n * Return an escaped and quoted string representation of the alias.\r\n */\r\n canonicalString() {\r\n let alias = this.alias.replace(/\\\\/g, '\\\\\\\\').replace(/`/g, '\\\\`');\r\n if (!AggregateAlias.isValidAlias(alias)) {\r\n alias = '`' + alias + '`';\r\n }\r\n return alias;\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 * 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 /**\r\n * Create a new AggregateField<T>\r\n * @param _aggregateType Specifies the type of aggregation operation to perform.\r\n * @param _internalFieldPath Optionally specifies the field that is aggregated.\r\n * @internal\r\n */\r\n constructor(\r\n // TODO (sum/avg) make aggregateType public when the feature is supported\r\n _aggregateType = 'count', _internalFieldPath) {\r\n this._aggregateType = _aggregateType;\r\n this._internalFieldPath = _internalFieldPath;\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, _userDataWriter, _data) {\r\n this._userDataWriter = _userDataWriter;\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._userDataWriter.convertValue(this._data.value);\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 * 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(<field>)` 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(<field>)` 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:1)}, {@link (startAfter:1)}, {@link\r\n * (endBefore:1)}, {@link (endAt:1)}, {@link limit}, {@link limitToLast} and\r\n * can then be passed to {@link (query:1)} 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:1)} 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 \"&lt;\", \"&lt;=\", \"==\", \"&lt;\",\r\n * \"&lt;=\", \"!=\").\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:1)} to create a new query\r\n * instance that also contains the `QueryCompositeFilterConstraint`.\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 */\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 */\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:1)} 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:1)} 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:1)} 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:1)} 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}\r\n/**\r\n * Given an operator, returns the set of operators that cannot be used with it.\r\n *\r\n * This is not a comprehensive check, and this function should be removed in the\r\n * long term. Validations should occur in the Firestore backend.\r\n *\r\n * Operators in a query must adhere to the following set of rules:\r\n * 1. Only one inequality per query.\r\n * 2. `NOT_IN` cannot be used with array, disjunctive, or `NOT_EQUAL` operators.\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-any\" /* Operator.ARRAY_CONTAINS_ANY */:\r\n case \"in\" /* Operator.IN */:\r\n return [\"not-in\" /* Operator.NOT_IN */];\r\n case \"not-in\" /* Operator.NOT_IN */:\r\n return [\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 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 * Create an AggregateField object that can be used to compute the sum of\r\n * a specified field over a range of documents in the result set of a query.\r\n * @param field Specifies the field to sum across the result set.\r\n * @internal TODO (sum/avg) remove when public\r\n */\r\nfunction sum(field) {\r\n return new AggregateField('sum', fieldPathFromArgument$1('sum', field));\r\n}\r\n/**\r\n * Create an AggregateField object that can be used to compute the average of\r\n * a specified field over a range of documents in the result set of a query.\r\n * @param field Specifies the field to average across the result set.\r\n * @internal TODO (sum/avg) remove when public\r\n */\r\nfunction average(field) {\r\n return new AggregateField('avg', fieldPathFromArgument$1('average', field));\r\n}\r\n/**\r\n * Create an AggregateField object that can be used to compute the count of\r\n * documents in the result set of a query.\r\n * @internal TODO (sum/avg) remove when public\r\n */\r\nfunction count() {\r\n return new AggregateField('count');\r\n}\r\n/**\r\n * Compares two 'AggregateField` instances for equality.\r\n *\r\n * @param left Compare this AggregateField to the `right`.\r\n * @param right Compare this AggregateField to the `left`.\r\n * @internal TODO (sum/avg) remove when public\r\n */\r\nfunction aggregateFieldEqual(left, right) {\r\n var _a, _b;\r\n return (left instanceof AggregateField &&\r\n right instanceof AggregateField &&\r\n left._aggregateType === right._aggregateType &&\r\n ((_a = left._internalFieldPath) === null || _a === void 0 ? void 0 : _a.canonicalString()) ===\r\n ((_b = right._internalFieldPath) === null || _b === void 0 ? void 0 : _b.canonicalString()));\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 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 * 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(<field>)` 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(<field>)` 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 * 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 countQuerySpec = {\r\n count: count()\r\n };\r\n return getAggregateFromServer(query, countQuerySpec);\r\n}\r\n/**\r\n * Calculates the specified aggregations over the documents in the result\r\n * set of the given query, without actually downloading the documents.\r\n *\r\n * Using this function to perform aggregations is efficient because only the\r\n * final aggregation values, not the documents' data, is downloaded. This\r\n * function can even perform aggregations of the documents if the result set\r\n * would be prohibitively large to 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 to aggregate over.\r\n * @param aggregateSpec An `AggregateSpec` object that specifies the aggregates\r\n * to perform over the result set. The AggregateSpec specifies aliases for each\r\n * aggregate, which can be used to retrieve the aggregate result.\r\n * @example\r\n * ```typescript\r\n * const aggregateSnapshot = await getAggregateFromServer(query, {\r\n * countOfDocs: count(),\r\n * totalHours: sum('hours'),\r\n * averageScore: average('score')\r\n * });\r\n *\r\n * const countOfDocs: number = aggregateSnapshot.data().countOfDocs;\r\n * const totalHours: number = aggregateSnapshot.data().totalHours;\r\n * const averageScore: number | null = aggregateSnapshot.data().averageScore;\r\n * ```\r\n * @internal TODO (sum/avg) remove when public\r\n */\r\nfunction getAggregateFromServer(query, aggregateSpec) {\r\n const firestore = cast(query.firestore, Firestore);\r\n const client = ensureFirestoreConfigured(firestore);\r\n const internalAggregates = mapToArray(aggregateSpec, (aggregate, alias) => {\r\n return new AggregateImpl(new AggregateAlias(alias), aggregate._aggregateType, aggregate._internalFieldPath);\r\n });\r\n // Run the aggregation and convert the results\r\n return firestoreClientRunAggregateQuery(client, query._query, internalAggregates).then(aggregateResult => convertToAggregateQuerySnapshot(firestore, query, aggregateResult));\r\n}\r\n/**\r\n * Converts the core aggregration result to an `AggregateQuerySnapshot`\r\n * that can be returned to the consumer.\r\n * @param query\r\n * @param aggregateResult Core aggregation result\r\n * @internal\r\n */\r\nfunction convertToAggregateQuerySnapshot(firestore, query, aggregateResult) {\r\n const userDataWriter = new ExpUserDataWriter(firestore);\r\n const querySnapshot = new AggregateQuerySnapshot(query, userDataWriter, aggregateResult);\r\n return querySnapshot;\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, aggregateFieldEqual, aggregateQuerySnapshotEqual, and, arrayRemove, arrayUnion, average, clearIndexedDbPersistence, collection, collectionGroup, connectFirestoreEmulator, count, deleteDoc, deleteField, disableNetwork, doc, documentId, enableIndexedDbPersistence, enableMultiTabIndexedDbPersistence, enableNetwork, endAt, endBefore, ensureFirestoreConfigured, executeWrite, getAggregateFromServer, 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, sum, 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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AAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;AACxD,IAAI,OAAO,0BAA0B,CAAC,MAAM,EAAE,mBAAmB,IAAI,cAAc,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAC3J,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,GAAG;AACvB,IAAI,OAAO,IAAI,oBAAoB,CAAC,aAAa,CAAC,CAAC;AACnD,CAAC;AACD;AACA;AACA;AACA;AACA,SAAS,eAAe,GAAG;AAC3B,IAAI,OAAO,IAAI,6BAA6B,CAAC,iBAAiB,CAAC,CAAC;AAChE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,GAAG,QAAQ,EAAE;AACjC;AACA;AACA,IAAI,OAAO,IAAI,wBAAwB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,GAAG,QAAQ,EAAE;AAClC;AACA;AACA,IAAI,OAAO,IAAI,yBAAyB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AAClE,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,CAAC,EAAE;AACtB,IAAI,OAAO,IAAI,8BAA8B,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,SAAS,EAAE;AAC/B,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC3C,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AACzC,IAAI,OAAO,IAAI,UAAU,CAAC,SAAS,EAAE,SAAS,IAAI,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AACtF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,qBAAqB,CAAC,SAAS,EAAE,mBAAmB,EAAE;AAC/D,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC3C,IAAI,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;AACxD;AACA;AACA,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,EAAE;AAC7G,QAAQ,OAAO,CAAC,oDAAoD,CAAC,CAAC;AACtE,QAAQ,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AACjC,KAAK;AACL,IAAI,MAAM,aAAa,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC;AAC5D,IAAI,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,+BAA+B,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;AAChH,CAAC;AACD,SAAS,YAAY,CAAC,mBAAmB,EAAE;AAC3C,IAAI,MAAM,kBAAkB,GAAG,OAAO,mBAAmB,KAAK,QAAQ;AACtE,UAAU,YAAY,CAAC,mBAAmB,CAAC;AAC3C,UAAU,mBAAmB,CAAC;AAC9B,IAAI,MAAM,aAAa,GAAG,EAAE,CAAC;AAC7B,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE;AACnD,QAAQ,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,OAAO,EAAE;AACxD,YAAY,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAC3E,YAAY,MAAM,QAAQ,GAAG,EAAE,CAAC;AAChC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC7C,gBAAgB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AAClD,oBAAoB,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC7E,oBAAoB,MAAM,SAAS,GAAG,+BAA+B,CAAC,uBAAuB,EAAE,eAAe,CAAC,CAAC;AAChH,oBAAoB,IAAI,KAAK,CAAC,WAAW,KAAK,UAAU,EAAE;AAC1D,wBAAwB,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC,0BAA0B,CAAC,CAAC;AAC/F,qBAAqB;AACrB,yBAAyB,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE;AAC1D,wBAAwB,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC,2BAA2B,CAAC,CAAC;AAChG,qBAAqB;AACrB,yBAAyB,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,EAAE;AAC3D,wBAAwB,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC,4BAA4B,CAAC,CAAC;AACjG,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,YAAY,aAAa,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACrH,SAAS;AACT,KAAK;AACL,IAAI,OAAO,aAAa,CAAC;AACzB,CAAC;AACD,SAAS,YAAY,CAAC,IAAI,EAAE;AAC5B,IAAI,IAAI;AACR,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,KAAK;AACL,IAAI,OAAO,CAAC,EAAE;AACd,QAAQ,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,wBAAwB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACtI,KAAK;AACL,CAAC;AACD,SAAS,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE;AACtC,IAAI,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;AAC5C,QAAQ,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,4BAA4B,GAAG,QAAQ,CAAC,CAAC;AACjG,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,CAAC,MAAM,CAAC;;;;"}
\No newline at end of file