{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/indexes/PriorityIndex.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/ChildrenNode.js","webpack:///../node_modules/process/browser.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/Node.js","webpack:///./entry/firebase.js","webpack:///../node_modules/firebase/app/index.js","webpack:///../node_modules/@firebase/polyfill/dist/esm/index.js","webpack:///../node_modules/@firebase/polyfill/dist/esm/src/polyfills/promise.js","webpack:///../node_modules/promise-polyfill/promise.js","webpack:///../node_modules/@firebase/polyfill/dist/esm/src/shims/find.js","webpack:///../node_modules/@firebase/polyfill/dist/esm/src/shims/findIndex.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/deepCopy.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/deferred.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/environment.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/errors.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/jwt.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/query.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/sha1.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/hash.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/subscribe.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/validation.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/utf8.js","webpack:///../node_modules/@firebase/auth/dist/auth.js","webpack:///../node_modules/firebase/database/index.js","webpack:///../node_modules/@firebase/database/dist/cjs/index.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/storage/DOMStorageWrapper.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/storage/MemoryStorage.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/api/TransactionResult.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/NextPushId.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/EventRegistration.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/Event.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/SyncTree.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/operation/AckUserWrite.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/operation/ListenComplete.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/operation/Merge.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/View.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/ViewProcessor.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/ChildChangeAccumulator.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/CompleteChildSource.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/EventGenerator.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/WriteTree.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/CompoundWrite.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/SnapshotHolder.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/AuthTokenProvider.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/stats/StatsCollection.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/stats/StatsReporter.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/EventQueue.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/VisibilityMonitor.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/OnlineMonitor.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/realtime/TransportManager.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/realtime/polling/PacketReceiver.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/ReadonlyRestClient.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/QueryParams.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/filter/LimitedFilter.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/Repo_transaction.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/Tree.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/api/internal.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/api/test_access.js","webpack:///../node_modules/firebase/messaging/index.js","webpack:///../node_modules/firebase/storage/index.js","webpack:///../node_modules/firebase/firestore/index.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/log.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/version.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/assert.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/platform/platform.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/error.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/api.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/obj.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/input_validation.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/misc.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/api/blob.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/api/geo_point.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/database_info.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/model/path.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/model/document_key.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/model/document.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/sorted_map.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/model/field_value.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/types.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/query.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/query_data.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/timestamp.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/snapshot_version.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/model/mutation.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/remote/rpc_error.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/remote/existence_filter.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/sorted_set.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/model/collections.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/remote/remote_event.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/remote/watch_change.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/remote/serializer.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/remote/stream_bridge.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/platform_browser/webchannel_connection.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/platform_browser/browser_platform.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/platform_browser/browser_init.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/api/field_path.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/types.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/view_snapshot.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/target_id_generator.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/model/document_set.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/obj_map.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/event_manager.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/persistence_promise.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/eager_garbage_collector.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/local_view_changes.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/reference_set.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/view.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/sync_engine.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/model/mutation_batch.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/encoded_resource_path.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/indexeddb_schema.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/simple_db.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/indexeddb_mutation_queue.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/indexeddb_query_cache.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/indexeddb_remote_document_cache.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/local_serializer.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/indexeddb_persistence.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/local_documents_view.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/remote_document_change_buffer.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/local_store.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/memory_mutation_queue.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/memory_query_cache.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/memory_remote_document_cache.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/memory_persistence.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/local/no_op_garbage_collector.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/promise.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/remote/backoff.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/remote/persistent_stream.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/remote/datastore.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/transaction.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/remote/remote_store.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/core/firestore_client.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/async_observer.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/util/async_queue.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/auth/user.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/api/credentials.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/api/observer.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/api/field_value.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/api/user_data_converter.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/api/database.js","webpack:///../node_modules/@firebase/firestore/dist/esm/src/platform/config.js","webpack:///../node_modules/@firebase/firestore/dist/esm/index.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/constants.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/error.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/string.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/taskenums.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/xhrio.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/object.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/promise_external.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/type.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/xhrio_network.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/xhriopool.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/json.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/location.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/path.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/url.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/metadata.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/args.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/fs.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/blob.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/array.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/requestinfo.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/requests.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/observer.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/tasksnapshot.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/async.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/task.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/reference.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/failrequest.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/requestmap.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/authwrapper.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/request.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/implementation/backoff.js","webpack:///../node_modules/@firebase/storage/dist/esm/src/service.js","webpack:///../node_modules/@firebase/storage/dist/esm/index.js","webpack:///../node_modules/@firebase/messaging/dist/esm/src/models/errors.js","webpack:///../node_modules/@firebase/messaging/dist/esm/src/helpers/array-buffer-to-base64.js","webpack:///../node_modules/@firebase/messaging/dist/esm/src/controllers/window-controller.js","webpack:///../node_modules/@firebase/messaging/dist/esm/src/models/fcm-details.js","webpack:///../node_modules/@firebase/messaging/dist/esm/src/models/token-manager.js","webpack:///../node_modules/@firebase/messaging/dist/esm/src/models/notification-permission.js","webpack:///../node_modules/@firebase/messaging/dist/esm/src/controllers/controller-interface.js","webpack:///../node_modules/@firebase/messaging/dist/esm/src/models/worker-page-message.js","webpack:///../node_modules/@firebase/messaging/dist/esm/src/models/default-sw.js","webpack:///../node_modules/@firebase/messaging/dist/esm/src/controllers/sw-controller.js","webpack:///../node_modules/@firebase/messaging/dist/esm/index.js","webpack:///../node_modules/@firebase/webchannel-wrapper/dist/index.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/validation.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/operation/Operation.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/Change.js","webpack:///../node_modules/timers-browserify/main.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/util.js","webpack:///../node_modules/setimmediate/setImmediate.js","webpack:///../node_modules/@firebase/util/dist/cjs/index.js","webpack:///../node_modules/webpack/buildin/global.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/indexes/KeyIndex.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/nodeFromJSON.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/storage/storage.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/realtime/Constants.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/indexes/Index.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/Path.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/LeafNode.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/SortedMap.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/Repo.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/CacheNode.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/constants.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/api/Reference.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/api/DataSnapshot.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/ImmutableTree.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/filter/IndexedFilter.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/stats/StatsManager.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/RepoManager.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/assert.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/crypt.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/json.js","webpack:///../node_modules/@firebase/util/dist/cjs/src/obj.js","webpack:///../node_modules/firebase/auth/index.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/api/Database.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/libs/parser.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/RepoInfo.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/api/onDisconnect.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/api/Query.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/snap.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/indexes/ValueIndex.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/IndexMap.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/childSet.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/comparators.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/snap/indexes/PathIndex.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/ServerValues.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/SparseSnapshotTree.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/CountedSet.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/operation/Overwrite.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/SyncPoint.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/ViewCache.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/stats/StatsListener.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/PersistentConnection.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/util/EventEmitter.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/realtime/Connection.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/realtime/BrowserPollConnection.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/realtime/WebSocketConnection.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/ServerActions.js","webpack:///../node_modules/@firebase/database/dist/cjs/src/core/view/filter/RangedFilter.js","webpack:///../node_modules/firebase/index.js","webpack:///../node_modules/@firebase/app/dist/esm/src/firebaseApp.js","webpack:///../node_modules/@firebase/app/dist/esm/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","extendStatics","__extends","this","setPrototypeOf","__proto__","Array","b","__","constructor","nodeFromJSON","MAX_NODE","Index_1","util_1","Node_1","LeafNode_1","setNodeFromJSON","val","setMaxNode","PriorityIndex","_super","apply","arguments","compare","a","aPriority","node","getPriority","bPriority","indexCmp","compareTo","nameCompare","isDefinedOn","isEmpty","indexedValueChanged","oldNode","newNode","equals","minPost","NamedNode","MIN","maxPost","MAX_NAME","LeafNode","makePost","indexValue","priorityNode","toString","Index","PRIORITY_INDEX","EMPTY_NODE","util_2","SortedMap_1","snap_1","PriorityIndex_1","KeyIndex_1","IndexMap_1","comparators_1","ChildrenNode","children_","priorityNode_","indexMap_","lazyHash_","validatePriorityNode","assert","SortedMap","NAME_COMPARATOR","IndexMap","Default","configurable","isLeafNode","updatePriority","newPriorityNode","getImmediateChild","childName","child","getChild","path","front","getFront","popFront","hasChild","updateImmediateChild","newChildNode","newPriority","namedNode","newChildren","newIndexMap","remove","removeFromIndexes","insert","addToIndexes","updateChild","getLength","newImmediateChild","numChildren","count","exportFormat","obj","numKeys","maxKey","allIntegerKeys","forEachChild","childNode","INTEGER_REGEXP_","test","Math","max","Number","array","hash","toHash_1","priorityHashText","childHash","sha1","getPredecessorChildName","index","idx","resolveIndex_","predecessor","getPredecessorKey","getFirstChildName","indexDefinition","minKey","getFirstChild","getLastChildName","getLastChild","action","inorderTraversal","wrappedNode","getIterator","getIteratorFrom","startPost","iterator","Wrap","next","peek","getNext","getReverseIterator","getReverseIteratorFrom","endPost","other","withIndex","KEY_INDEX","hasIndex","addIndex","isIndexed","otherChildrenNode","thisIter","otherIter","thisCurrent","otherCurrent","MaxNode","defineProperties","MIN_NAME","MAX","KeyIndex","__EMPTY_NODE","__childrenNodeConstructor","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","setTimeout","e","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","length","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","noop","nextTick","args","push","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","require","window","firebase","default","__global","global","self","Promise","setTimeoutFunc","fn","TypeError","_state","_handled","_value","undefined","_deferreds","doResolve","handle","deferred","_immediateFn","cb","onFulfilled","onRejected","ret","reject","promise","resolve","newValue","then","finale","thisArg","_unhandledRejectionFn","Handler","done","reason","ex","prom","all","arr","slice","remaining","res","race","values","setImmediate","err","console","warn","_setImmediateFn","_setUnhandledRejectionFn","root","find","predicate","k","kValue","findIndex","deepExtend","target","source","Date","getTime","prop","deepCopy","patchProperty","Deferred","_this","wrapCallback","callback","error","catch","constants_1","getUA","navigator","isMobileCordova","isReactNative","isNodeSdk","CONSTANTS","NODE_CLIENT","NODE_ADMIN","captureStackTrace","patchCapture","captureFake","result","FirebaseError","code","message","ErrorFactory","err_1","stack","service","serviceName","errors","pattern","data","template","fullCode","replace","match","crypt_1","json_1","decode","token","header","claims","signature","parts","split","jsonEval","base64Decode","isValidTimestamp","validSince","validUntil","now","floor","issuedAtTime","isValidFormat","decoded","isAdmin","obj_1","querystring","querystringParams","params","forEach","isArray","arrayVal","encodeURIComponent","join","querystringDecode","Sha1","chain_","buf_","W_","pad_","inbuf_","total_","blockSize","reset","compress_","buf","opt_offset","W","charCodeAt","f","update","bytes","opt_length","lengthMinusBlock","inbuf","digest","totalBits","j","Hash","createSubscribe","executor","onNoObservers","proxy","ObserverProxy","subscribe","observers","unsubscribes","observerCount","task","finalized","forEachObserver","observer","close","complete","nextOrObserver","methods","_i","methods_1","method","implementsAnyMethods","unsub","unsubscribeOne","finalError","sendOne","async","onError","errorPrefix","fnName","argumentNumber","optional","argName","validateArgCount","minCount","maxCount","argCount","argError","validateNamespace","namespace","validateCallback","validateContextObject","context","assert_1","stringToByteArray","str","out","high","stringLength","h","aa","ba","ca","da","splice","propertyIsEnumerable","ea","fa","ha","q","ia","random","ja","ka","la","unshift","Function","indexOf","ma","na","ib","Rc","u","String","oa","shift","pa","trim","qa","ra","sa","ta","ua","va","wa","xa","v","ya","za","Aa","Ba","w","Ma","Da","map","g","Ea","some","Ha","Ia","Ja","Ca","Ka","La","Na","Oa","userAgent","x","Pa","Qa","Ra","Sa","Ta","Ua","Va","Wa","Xa","fb","$a","y","ab","bb","toLowerCase","db","eb","document","documentMode","gb","hb","exec","parseFloat","kb","Za","jb","Ya","parseInt","lb","mb","$goog_Thenable","nb","ob","pb","compatMode","wb","zb","rb","qb","sb","tb","ub","yb","Cb","Window","MessageChannel","postMessage","addEventListener","createElement","style","display","src","documentElement","appendChild","contentWindow","open","write","location","protocol","host","origin","port1","onmessage","port2","onreadystatechange","parentNode","removeChild","xb","Ab","Bb","set","z","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","A","B","Lb","Mb","Qb","Rb","Vb","Pb","D","Ac","Bc","Zb","Wb","Xb","Tb","Ub","Yb","cancel","Sb","$b","ac","bc","cc","dc","ec","fc","gc","hc","jc","kc","JSON","stringify","ic","lc","mc","nc","oc","pc","qc","rc","sc","vc","wc","getElementById","xc","cssText","className","htmlFor","yc","setAttribute","lastIndexOf","cellpadding","cellspacing","colspan","frameborder","height","maxlength","nonce","role","rowspan","type","usemap","valign","width","createTextNode","nodeType","item","Cc","Dc","Boolean","Fc","valueOf","isFinite","isNaN","Ec","Gc","Hc","substr","Ic","Jc","Kc","Fa","Lc","Mc","freeze","Nc","Oc","Pc","removeEventListener","C","Qc","relatedTarget","button","screenY","screenX","clientY","clientX","metaKey","shiftKey","altKey","ctrlKey","pointerId","pointerType","changedTouches","srcElement","nodeName","fromElement","toElement","pageX","pageY","defaultPrevented","2","3","4","preventDefault","returnValue","keyCode","Sc","Tc","Uc","listener","capture","Vc","Wc","Xc","Yc","Zc","$c","ad","cd","dd","ed","fd","gd","hd","kd","id","attachEvent","jd","bd","ld","E","md","detachEvent","nd","od","pd","handleEvent","F","G","qd","rd","sd","td","vd","wd","ud","xd","yd","zd","log","Ad","timeStamp","msWriteProfilerMark","Bd","Cd","Ed","S","P","Fd","Gd","H","clear","Jd","Kd","Ld","charAt","Nd","Md","fromCharCode","Od","Rd","Sd","Qd","Td","Vd","Wd","Xd","Yd","Pd","be","$d","ae","Uint8Array","Int32Array","ce","de","ee","fe","ge","he","vb","tc","Hd","ie","je","ke","le","me","oe","qe","re","se","te","ue","ve","He","Me","Ke","Be","we","Ce","I","De","Ee","Fe","decodeURI","decodeURIComponent","encodeURI","Ge","xe","ye","ze","Ae","Qe","substring","pe","Ie","Je","Le","Ne","Oe","Pe","Re","Se","XMLHttpRequest","ActiveXObject","Te","headers","Ue","N","Ve","We","Dd","J","Xe","Ye","Ze","toUpperCase","$e","af","ne","Ga","FormData","setRequestHeader","responseType","withCredentials","bf","ontimeout","cf","send","abort","df","ef","ff","gf","hf","statusText","readyState","status","getResponse","response","responseText","mozResponseArrayBuffer","kf","lf","mf","nf","of","pf","onload","onerror","qf","attributes","charset","getElementsByTagName","rf","tagName","sf","tf","XDomainRequest","responseXML","onprogress","uf","vf","wf","href","xf","Cf","Df","Ef","screen","availHeight","availWidth","top","left","resizable","statusbar","toolbar","Af","Ff","scrollbars","standalone","noreferrer","createEvent","initMouseEvent","dispatchEvent","opener","uc","focus","getResponseHeader","contentType","getAllResponseHeaders","Hf","If","Kf","Lf","Mf","K","INTERNAL","Nf","Bf","Of","Pf","sort","L","Qf","localStorage","Rf","setItem","removeItem","indexedDB","Sf","Tf","Uf","Vf","Wf","Xf","parse","Yf","Zf","___jsl","CP","$f","onLine","connection","ag","bg","visibilityState","dg","toUTCString","fg","eg","gg","abcd","M","hg","ig","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","toJSON","xg","yg","zg","Ag","Bg","Cg","Dg","Eg","Fg","Gg","continueUrl","canHandleCodeInApp","androidPackageName","androidMinimumVersion","androidInstallApp","iOSBundleId","Hg","sub","provider_id","sign_in_provider","Ig","iss","aud","exp","Jg","Kg","Lg","Mg","Ng","Og","Pg","Qg","Rg","Sg","Tg","Ug","Vg","isNewUser","kind","rawUserInfo","providerId","profile","login","screenName","Wg","O","Xg","idToken","accessToken","oauthToken","oauthTokenSecret","Zg","id_token","access_token","secret","oauth_token_secret","postBody","requestUri","bh","isOAuthProvider","ch","dh","credential","eh","fh","gh","hh","ih","jh","kh","nh","oh","Y","ph","temporaryProof","phoneNumber","sessionInfo","sh","auth","uh","vh","oauthAccessToken","oauthIdToken","wh","xh","yh","eventId","urlResponse","sessionId","zh","Yg","$g","ah","Q","lh","email","password","mh","PROVIDER_ID","qh","operation","rh","verificationId","verificationCode","verify","gi","th","recaptchaToken","Ah","Bh","Ch","Dh","Eh","Fh","secureTokenEndpoint","secureTokenTimeout","Gh","secureTokenHeaders","Hh","firebaseEndpoint","firebaseTimeout","Ih","firebaseHeaders","Jh","unsubscribe","Kh","Lh","Mh","Nh","zf","gapi","client","request","Qh","Ud","Ph","Oh","jf","Uh","Vh","$h","ai","setApiKey","getToken","setToken","body","authType","bi","ci","di","displayName","photoUrl","ki","li","needConfirmation","errorMessage","mi","returnIdpCredential","ni","oi","autoCreate","pi","qi","oobCode","deleteAttribute","requestType","ei","fi","hi","ri","newPassword","si","ti","endpoint","ga","ui","T","Xh","vi","ji","deleteProvider","wi","Zh","xi","recaptchaSiteKey","yi","USER_NOT_FOUND","kg","returnSecureToken","Sh","Th","keyInvalid","ipRefererBlocked","INVALID_CUSTOM_TOKEN","CREDENTIAL_MISMATCH","MISSING_CUSTOM_TOKEN","INVALID_IDENTIFIER","MISSING_CONTINUE_URI","INVALID_EMAIL","INVALID_PASSWORD","USER_DISABLED","MISSING_PASSWORD","EMAIL_EXISTS","PASSWORD_LOGIN_DISABLED","INVALID_IDP_RESPONSE","FEDERATED_USER_ID_ALREADY_LINKED","INVALID_MESSAGE_PAYLOAD","INVALID_RECIPIENT_EMAIL","INVALID_SENDER","EMAIL_NOT_FOUND","EXPIRED_OOB_CODE","INVALID_OOB_CODE","MISSING_OOB_CODE","CREDENTIAL_TOO_OLD_LOGIN_AGAIN","INVALID_ID_TOKEN","TOKEN_EXPIRED","CORS_UNSUPPORTED","DYNAMIC_LINK_NOT_ACTIVATED","INVALID_APP_ID","TOO_MANY_ATTEMPTS_TRY_LATER","WEAK_PASSWORD","OPERATION_NOT_ALLOWED","USER_CANCELLED","CAPTCHA_CHECK_FAILED","INVALID_APP_CREDENTIAL","INVALID_CODE","INVALID_PHONE_NUMBER","INVALID_SESSION_INFO","INVALID_TEMPORARY_PROOF","MISSING_APP_CREDENTIAL","MISSING_CODE","MISSING_PHONE_NUMBER","MISSING_SESSION_INFO","QUOTA_EXCEEDED","SESSION_EXPIRED","INVALID_CONTINUE_URI","MISSING_ANDROID_PACKAGE_NAME","MISSING_IOS_BUNDLE_ID","UNAUTHORIZED_DOMAIN","INVALID_OAUTH_CLIENT_ID","INVALID_CERT_HASH","Bi","zi","Ai","Ci","Ki","Ji","Ii","where","url","messageHandlersFilter","position","dontclear","restyle","setHideOnLeave","Fi","ping","Di","Yi","Li","Mi","Ni","app","Oi","Pi","authorizedDomains","Yh","RegExp","Qi","register","Hi","authEvent","Ri","Ti","Ui","Vi","reactNative","AsyncStorage","Wi","Xi","$i","errorCode","onupgradeneeded","createObjectStore","keyPath","onsuccess","Zi","aj","objectStore","bj","transaction","cj","ej","gj","fj","hj","ij","kj","sessionStorage","jj","lj","Browser","mj","Node","nj","ReactNative","oj","$","Gi","webStorageSupport","Si","closed","Gf","getItem","X","put","add","zc","getAll","openCursor","yf","dj","pj","tj","qj","NONE","sj","uj","vj","wj","xj","yj","Dj","setInterval","oldValue","zj","Aj","Bj","Cj","clearInterval","Ej","Fj","Hj","Ij","Jj","Lj","Id","Pj","Mj","Oj","handleOpenURL","Qj","Gj","Rj","Kj","ibi","apn","appDisplayName","Nj","Sj","Uj","Wj","Xj","Yj","unknown","signInViaRedirect","linkViaRedirect","reauthViaRedirect","signInViaPopup","linkViaPopup","reauthViaPopup","Zj","SDK_VERSION","ak","bk","ck","dk","Vj","ek","fk","gk","Tj","hk","ik","jk","mk","lk","user","pk","qk","rk","uk","vk","wk","refreshToken","xk","expiresIn","yk","grant_type","refresh_token","Rh","expires_in","expirationTime","zk","lastSignInTime","creationTime","Bk","uid","photoURL","Ck","Dk","apiKey","appName","authDomain","Ek","Fk","Gk","U","R","Hk","V","Ik","Jk","Kk","Lk","start","Mk","Ok","Ob","Pk","emailVerified","isAnonymous","metadata","createdAt","lastLoginAt","providerData","Qk","Rk","Sk","Tk","Uk","Vk","Wk","Ak","Xk","Yk","Zk","bl","al","additionalUserInfo","operationType","cl","reload","dl","el","fl","Z","gl","hl","il","jl","stsTokenManager","redirectEventId","ll","kk","nk","ok","confirm","sk","tk","cg","users","localId","providerUserInfo","rawId","$k","passwordHash","ii","delete","jg","nl","rl","ql","ol","Nb","pl","tl","ul","vl","wl","options","xl","ml","Hl","yl","zl","Al","logFramework","Bl","Cl","Dl","El","Fl","kl","Gl","Nk","Il","currentUser","Kl","_lat","getUid","Ll","Ml","rj","languages","language","userLanguage","sl","addAuthTokenListener","Jl","removeAuthTokenListener","identifier","continueUri","allProviders","Wh","Nl","Ol","Pl","Tl","Vl","Wl","theme","Xl","Yl","hasChildNodes","Zl","$l","am","cm","fm","grecaptcha","render","gm","dm","em","bm","execute","firstChild","hm","Infinity","im","jm","km","lm","Persistence","LOCAL","SESSION","registerService","Auth","Element","App","extendNamespace","User","app_1","Database_1","Database","Query_1","Query","Reference_1","Reference","enableLogging","RepoManager_1","TEST_ACCESS","ServerValue","registerDatabase","instance","unused","RepoManager","getInstance","databaseFromApp","DataSnapshot_1","DataSnapshot","onDisconnect_1","OnDisconnect","DOMStorageWrapper","domStorage_","prefix_","prefixedName_","storedVal","MemoryStorage","cache_","isInMemoryStorage","contains","TransactionResult","committed","snapshot","PUSH_CHARS","lastPushTime","lastRandChars","nextPushId","duplicateTime","timeStampChars","Event_1","ValueEventRegistration","callback_","cancelCallback_","context_","respondsTo","eventType","change","query","getQueryParams","getIndex","DataEvent","snapshotNode","getRef","getEventRunner","eventData","ctx","getEventType","cancelCB_1","cb_1","createCancelEvent","CancelEvent","matches","hasAnyCallback","ChildEventRegistration","callbacks_","eventToCheck","ref","prevName","cancelCB_2","cb_2","otherCount","getCount","otherKey","getAnyKey","thisKey","every","eventRegistration","getPath","getParent","exportVal","AckUserWrite_1","ChildrenNode_1","util_3","ImmutableTree_1","ListenComplete_1","Merge_1","Operation_1","Overwrite_1","Path_1","SyncPoint_1","WriteTree_1","SyncTree","listenProvider_","syncPointTree_","ImmutableTree","Empty","pendingWriteTree_","WriteTree","tagToQueryMap_","queryToTagMap_","applyUserOverwrite","newData","writeId","visible","addOverwrite","applyOperationToSyncPoints_","Overwrite","OperationSource","applyUserMerge","changedChildren","addMerge","changeTree","fromObject","Merge","ackUserWrite","revert","getWrite","removeWrite","affectedTree_1","snap","Path","children","pathString","AckUserWrite","applyServerOverwrite","Server","applyServerMerge","applyListenComplete","ListenComplete","applyTaggedQueryOverwrite","tag","queryKey","queryKeyForTag_","parseQueryKey_","queryPath","queryId","relativePath","op","forServerTaggedQuery","applyTaggedOperation_","applyTaggedQueryMerge","applyTaggedListenComplete","addEventRegistration","serverCache","foundAncestorDefaultView","foreachOnPath","pathToSyncPoint","sp","getCompleteServerCache","hasCompleteView","serverCacheComplete","syncPoint","SyncPoint","subtree","foreachChild","childSyncPoint","completeCache","viewAlreadyExists","viewExistsForQuery","loadsAllData","makeQueryKey_","getNextQueryTag_","writesCache","childWrites","events","view","viewForQuery","setupListener_","removeEventRegistration","cancelError","maybeSyncPoint","cancelEvents","queryIdentifier","removedAndEvents","removed","removingDefault","covered","findOnPath","parentSyncPoint","newViews","collectDistinctViewsForSubTree_","newQuery","getQuery","createListenerForView_","startListening","queryForListening_","tagForQuery_","hashFn","onComplete","stopListening","queryToRemove","tagToRemove","removeTags_","calcCompleteEventCache","writeIdsToExclude","writeTree","pathSoFar","fold","maybeChildSyncPoint","childMap","getCompleteView","views_1","getQueryViews","childViews","queries","removedQuery","removedQueryKey","removedQueryTag","isDefault","queriesToStop","queries_1","childQueries","queryToStop","getServerCache","errorForServerCode","splitIndex","safeGet","nextQueryTag_","applyOperation","applyOperationHelper_","syncPointTree","applyOperationDescendantsHelper_","childOperation","operationForChild","childTree","childServerCache","childWritesCache","affectedTree","OperationType","ACK_USER_WRITE","LISTEN_COMPLETE","MERGE","IndexedFilter_1","ViewProcessor_1","CacheNode_1","ViewCache_1","EventGenerator_1","Change_1","View","query_","initialViewCache","eventRegistrations_","indexFilter","IndexedFilter","filter","getNodeFilter","processor_","ViewProcessor","initialServerCache","initialEventCache","getEventCache","serverSnap","updateFullNode","getNode","eventSnap","newServerCache","CacheNode","isFullyInitialized","filtersNodes","newEventCache","viewCache_","ViewCache","eventGenerator_","EventGenerator","cache","getCompleteServerSnap","path_1","registration","maybeEvent","existing","completeServerCache","getCompleteEventSnap","oldViewCache","assertIndexed","viewCache","generateEventsForChanges_","changes","getInitialEvents","initialChanges","Change","childAddedChange","valueChange","eventCache","registrations","generateEventsForChanges","ChildChangeAccumulator_1","CompleteChildSource_1","ProcessorResult","filter_","newViewCache","filterServerNode","accumulator","ChildChangeAccumulator","OVERWRITE","overwrite","fromUser","applyUserOverwrite_","fromServer","tagged","isFiltered","applyServerOverwrite_","merge","applyUserMerge_","applyServerMerge_","revertUserWrite_","ackUserWrite_","assertionError","listenComplete_","getChanges","maybeAddValueEvent_","isLeafOrEmpty","oldCompleteSnap","generateEventCacheAfterServerEvent_","changePath","oldEventSnap","shadowingWrite","serverNode","completeChildren","completeEventChildren","calcCompleteEventChildren","completeNode","childKey","oldEventNode","updatedPriority","calcEventCacheAfterServerOverwrite","childChangePath","newEventChild","isCompleteForChild","eventChildUpdate","calcCompleteChild","updateEventSnap","changedSnap","oldServerSnap","serverFilter","getIndexedFilter","newServerNode","isCompleteForPath","NO_COMPLETE_CHILD_SOURCE","updateServerSnap","WriteTreeCompleteChildSource","oldChild","newChild","getCompleteChild","getBack","parent","newEventSnap","cacheHasChild_","curViewCache","foreach","writePath","applyMerge_","viewMergeTree","setTree","serverChild","childMergeTree","isUnknownDeepMerge","ackPath","changedChildren_1","changedChildren_2","mergePath","serverCachePath","oldServerNode","oldEventCache","serverChildren","changeMap_","trackChildChange","CHILD_ADDED","CHILD_CHANGED","CHILD_REMOVED","oldChange","oldType","childChangedChange","childRemovedChange","oldSnap","getValues","NoCompleteChildSource_","getChildAfterChild","reverse","writes_","optCompleteServerCache_","completeServerData","nodes","calcIndexedSlice","index_","eventRegistrations","moves","childMovedChange","generateEventsForType_","CHILD_MOVED","VALUE","filteredChanges","compareChanges_","materializedChange","materializeSingleChange_","aWrapped","bWrapped","CompoundWrite_1","visibleWrites_","CompoundWrite","allWrites_","lastWriteId_","WriteTreeRef","addWrite","addWrites","record","writeToRemove","removedWriteWasVisible","removedWriteOverlapsWithOtherWrites","currentWrite","recordContainsPath_","resetTree_","getCompleteWriteData","getCompleteNode","treePath","includeHiddenWrites","childCompoundWrite","hasCompleteWrite","mergeAtPath","layerTree_","layeredCache","shadowingNode","subMerge","completeServerChildren","topLevelSet","childSnap","merge_1","getCompleteChildren","childPath","existingEventSnap","existingServerSnap","childMerge","toIterate","cmp","getCompare","iter","writeRecord","findKey","DefaultFilter_","writes","treeRoot","compoundWrite","deepNode","treePath_","writeTree_","existingServerCache","rootmost","findRootMostValueAndPath","rootMostPath","updates","newWrite","applySubtreeWrite_","priorityWrite_1","SnapshotHolder","rootNode_","updateSnapshot","newSnapshotNode","AuthTokenProvider","app_","forceRefresh","addTokenChangeListener","removeTokenChangeListener","notifyForInvalidToken","StatsCollection","counters_","incrementCounter","amount","StatsListener_1","StatsReporter","collection","server_","statsToReport_","statsListener_","StatsListener","setTimeoutNonBlocking","reportStats_","includeStat","stat","stats","reportedStats","haveStatsToReport","reportStats","EventQueue","eventLists_","recursionDepth_","queueEvents","eventDataList","currList","eventPath","EventList","raiseEventsAtPath","raiseQueuedEventsMatchingPredicate_","raiseEventsForChangedPath","changedPath","sentAll","eventList","raise","path_","events_","eventFn","logger","exceptionGuard","EventEmitter_1","VisibilityMonitor","hidden","visibilityChange","visible_","trigger","getInitialEvent","EventEmitter","OnlineMonitor","online_","currentlyOnline","BrowserPollConnection_1","WebSocketConnection_1","TransportManager","repoInfo","initTransports_","BrowserPollConnection","WebSocketConnection","isWebSocketsAvailable","isSkipPollConnection","previouslyFailed","webSocketOnly","transports_","transports_1","each","ALL_TRANSPORTS","transport","initialTransport","upgradeTransport","PacketReceiver","onMessage_","pendingResponses","currentResponseNum","closeAfterResponse","onClose","closeAfter","responseNum","handleResponse","requestNum","_loop_1","toProcess","this_1","_loop_2","util_4","util_5","ReadonlyRestClient","repoInfo_","onDataUpdate_","authTokenProvider_","log_","logWrapper","listens_","getListenId_","listen","currentHashFn","listenId","thisListen","queryStringParamaters","toRestQueryStringParameters","restRequest_","unlisten","refreshAuthToken","queryStringParameters","authTokenData","authToken","secure","xhr","ServerActions","ValueIndex_1","PathIndex_1","LimitedFilter_1","RangedFilter_1","QueryParams","limitSet_","startSet_","startNameSet_","endSet_","endNameSet_","limit_","viewFrom_","indexStartValue_","indexStartName_","indexEndValue_","indexEndName_","hasStart","isViewFromLeft","WIRE_PROTOCOL_CONSTANTS_","VIEW_FROM_LEFT","getIndexStartValue","getIndexStartName","hasEnd","getIndexEndValue","getIndexEndName","hasLimit","hasAnchoredLimit","getLimit","copy_","copy","limit","newLimit","newParams","limitToFirst","limitToLast","VIEW_FROM_RIGHT","startAt","endAt","orderBy","getQueryObject","WIRE_PROTOCOL_CONSTANTS","INDEX_START_VALUE","INDEX_START_NAME","INDEX_END_VALUE","INDEX_END_NAME","LIMIT","viewFrom","VIEW_FROM","INDEX","LimitedFilter","RangedFilter","REST_CONSTANTS","REST_QUERY_CONSTANTS_","qs","VALUE_INDEX","PathIndex","ORDER_BY","START_AT","END_AT","LIMIT_TO_FIRST","LIMIT_TO_LAST","DEFAULT","rangedFilter_","reverse_","affectedPath","optChangeAccumulator","fullLimitUpdateChild_","newSnap","filtered","getEndPost","getStartPost","hasNext","indexCompare_1","foundStartPost","changeAccumulator","indexCmp_1","newChildNamedNode","windowBoundary","inRange","oldChildSnap","nextChild","compareNext","TransactionStatus","Tree_1","ServerValues_1","validation_1","nodeFromJSON_1","Repo_1","Repo","MAX_TRANSACTION_RETRIES_","transactions_init_","transactionQueueTree_","Tree","startTransaction","transactionUpdate","applyLocally","valueCallback","watchRef","order","LUIDGenerator","retryCount","unwatcher","abortReason","currentWriteId","currentInputSnapshot","currentOutputSnapshotRaw","currentOutputSnapshotResolved","currentState","getLatestState_","newVal","validateFirebaseData","RUN","queueNode","subTree","nodeQueue","getValue","setValue","priorityForNode","isValidPriority","serverSyncTree_","serverValues","generateServerValues","newNodeUnresolved","resolveDeferredValueSnapshot","getNextWriteId_","eventQueue_","sendReadyTransactions_","excludeSets","pruneCompletedTransactionsBelowNode_","buildTransactionQueue_","sendTransactionQueue_","hasChildren","setsToIgnore","txn","latestState","snapToSend","latestHash","SENT","dataToSend","pathToSend","callbacks","COMPLETED","SENT_NEEDS_ABORT","NEEDS_ABORT","rerunTransactions_","rootMostTransactionNode","getAncestorTransactionNode_","rerunTransactionQueue_","abortTransaction","currentNode","newDataNode","oldWriteId","newNodeResolved","lastInput","transactionNode","transactionQueue","aggregateTransactionQueuesForNode_","to","from","abortTransactions_","forEachAncestor","abortTransactionsOnNode_","forEachDescendant","lastSent","TreeNode","childCount","name_","parent_","node_","pathObj","updateParents_","includeSelf","childrenFirst","forEachImmediateDescendantWithValue","updateChild_","childEmpty","childExists","forceLongPolling","forceDisallow","forceAllow","forceWebSockets","setSecurityDebugCallback","repo","persistentConnection_","securityDebugCallback_","showDelta","statsIncrementCounter","metric","dataUpdateCount","interceptServerData","interceptServerData_","RepoInfo_1","PersistentConnection_1","Connection_1","DataConnection","PersistentConnection","simpleListen","sendRequest","echo","onEcho","RealTimeConnection","Connection","hijackHash","newHash","oldPut","opt_onComplete","opt_hash","ConnectionTarget","RepoInfo","listens","firebaseRef","forceRestClient","LogLevel","logLevel","ERROR","getLogLevel","setLogLevel","newLevel","debug","msg","DEBUG","time","toISOString","argToString","platform","getPlatform","formatJSON","fail","failure","assertion","PlatformSupport","setPlatform","emptyByteString","Code","FirestoreError","makeConstructorPrivate","cls","optionalMessage","PublicConstructor","staticProperty","forEachNumber","num","shallowCopy","validateExactNumberOfArgs","functionName","numberOfArgs","formatPlural","validateAtLeastNumberOfArgs","minNumberOfArgs","validateBetweenNumberOfArgs","maxNumberOfArgs","validateNamedArrayAtLeastNumberOfElements","minNumberOfElements","validateArgType","argument","validateType","ordinal","validateOptionalArgType","validateNamedType","optionName","validateNamedOptionalType","validateNamedOptionalPropertyEquals","inputName","input","expected","expectedDescription","expected_1","valueDescription","actualDescription","validateNamedPropertyEquals","isPlainObject","description","getPrototypeOf","customObjectName","results","tryGetCustomObjectType","validateDefined","validateOptionNames","optionNames","_","invalidClassError","AutoId","newId","chars","autoId","primitiveComparator","right","arrayEquals","isEqual","assertUint8ArrayAvailable","assertBase64Available","base64Available","Blob","binaryString","_binaryString","fromBase64String","base64","atob","fromUint8Array","char","toBase64","btoa","toUint8Array","buffer","_compareTo","PublicBlob","GeoPoint","latitude","longitude","_long","DatabaseInfo","databaseId","persistenceKey","ssl","DatabaseId","projectId","database","segments","offset","init","construct","comparator","nameOrPath","segment","popFirst","size","popLast","firstSegment","lastSegment","isPrefixOf","end","toArray","p1","p2","min","ResourcePath","canonicalString","fromString","EMPTY_PATH","identifierRegExp","FieldPath","isValidIdentifier","isKeyField","keyField","fromServerFormat","current","addCurrentSegment","inBackticks","DocumentKey","isDocumentKey","k1","k2","fromSegments","fromPathString","EMPTY","Document","hasLocalMutations","field","fieldValue","compareByKey","d1","d2","compareByField","v1","v2","NoDocument","BLACK","prunedNodes","reverseTraversal","SortedMapIterator","startKey","isReverse","nodeStack","pop","LLRBNode","color","RED","fixUp","removeMin","isRed","moveRedLeft","smallest","rotateRight","moveRedRight","rotateLeft","colorFlip","nr","checkMaxDepth","blackDepth","check","pow","LLRBEmptyNode","TypeOrder","ServerTimestampBehavior","FieldValueOptions","serverTimestampBehavior","fromSnapshotOptions","serverTimestamps","Estimate","Previous","defaultOptions","FieldValue","defaultCompareTo","typeOrder","NullValue","internalValue","INSTANCE","BooleanValue","TRUE","FALSE","NumberValue","numericEquals","IntegerValue","DoubleValue","NAN","NaN","POSITIVE_INFINITY","NEGATIVE_INFINITY","StringValue","TimestampValue","toDate","ServerTimestampValue","localWriteTime","previousValue","BlobValue","RefValue","GeoPointValue","ObjectValue","it1","it2","next1","next2","setChild","pathSegment","ArrayValue","minLength","NumberAsAny","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","isInteger","isNullOrUndefined","explicitOrderBy","filters","memoizedCanonicalId","memoizedOrderBy","assertValidBound","atPath","inequalityField","getInequalityFilterField","firstOrderByField","getFirstOrderByField","KEY_ORDERING_ASC","foundKeyOrdering","_a","lastDirection","Direction","ASCENDING","KEY_ORDERING_DESC","addFilter","isInequality","newFilters","addOrderBy","newOrderBy","withLimit","withStartAt","bound","withEndAt","canonicalId","_b","_c","docComparator","comparedOnKeyField","comp","doc","matchesAncestor","matchesOrderBy","matchesFilters","matchesBounds","isDocumentQuery","docPath","sortsBeforeDocument","RelationOp","LESS_THAN","LESS_THAN_OR_EQUAL","EQUAL","GREATER_THAN_OR_EQUAL","GREATER_THAN","RelationFilter","refValue","comparison","matchesComparison","matchesValue","NullFilter","NanFilter","fieldFilter","QueryPurpose","DESCENDING","Bound","before","orderByComponent","component","docValue","thisPosition","otherPosition","OrderBy","isKeyOrderBy","isoRegExp","Timestamp","seconds","nanos","fromEpochMilliseconds","fromDate","date","milliseconds","fromISOString","utc","fraction","nanoStr","toEpochMilliseconds","SnapshotVersion","timestamp","fromMicroseconds","fromTimestamp","forDeletedDoc","toMicroseconds","toTimestamp","MutationType","QueryData","targetId","purpose","snapshotVersion","resumeToken","updated","FieldMask","fields","ServerTimestampTransform","FieldTransform","transform","MutationResult","transformResults","RpcCode","Precondition","updateTime","exists","isValidFor","maybeDoc","isNone","Mutation","verifyKeyMatches","getPostMutationVersion","SetMutation","precondition","Set","applyToRemoteDocument","mutationResult","applyToLocalView","baseDoc","PatchMutation","fieldMask","Patch","patchDocument","patchObject","fieldPath","TransformMutation","fieldTransforms","Transform","requireDocument","transformObject","localTransformResults","fieldTransform","DeleteMutation","Delete","ExistenceFilter","isPermanentError","mapCodeFromRpcCode","OK","CANCELLED","UNKNOWN","DEADLINE_EXCEEDED","RESOURCE_EXHAUSTED","UNAVAILABLE","UNAUTHENTICATED","INVALID_ARGUMENT","NOT_FOUND","ALREADY_EXISTS","PERMISSION_DENIED","FAILED_PRECONDITION","ABORTED","OUT_OF_RANGE","UNIMPLEMENTED","DATA_LOSS","mapRpcCodeFromCode","SortedSet","fromMapKeys","keys","has","elem","first","last","forEachInRange","range","forEachWhile","firstAfterOrEqual","unionWith","thisIt","otherIt","thisElem","otherElem","EMPTY_MAYBE_DOCUMENT_MAP","maybeDocumentMap","EMPTY_DOCUMENT_MAP","documentMap","EMPTY_DOCUMENT_VERSION_MAP","documentVersionMap","EMPTY_DOCUMENT_KEY_SET","documentKeySet","CurrentStatusUpdate","RemoteEvent","targetChanges","documentUpdates","addDocumentUpdate","handleExistenceFilterMismatch","mapping","ResetMapping","currentStatusUpdate","MarkNotCurrent","WatchTargetChangeState","EMPTY_KEY_SET","docs","UpdateMapping","addedDocuments","removedDocuments","applyToKeySet","DocumentWatchChange","updatedTargetIds","removedTargetIds","newDoc","ExistenceFilterChange","existenceFilter","state","targetIds","cause","WatchChangeAggregator","listenTargets","pendingTargetResponses","existenceFilters","frozen","watchChange","addDocumentChange","addTargetChange","addExistenceFilterChange","addChanges","watchChanges","createRemoteEvent","isActiveTarget","ensureTargetChange","None","docChange","relevant","targetChange","NoChange","applyResumeToken","Added","recordTargetResponse","Removed","Current","MarkCurrent","Reset","newCount","dirs","ops","DIRECTIONS","OPERATORS","assertPresent","parseInt64","JsonProtoSerializer","useProto3Json","unsafeCastProtoByteString","byteString","fromRpcStatus","toInt32Value","fromInt32Value","toBytes","fromBlob","blob","toVersion","fromVersion","toResourceName","fullyQualifiedPrefixPath","fromResourceName","resource","isValidResourceName","toName","fromName","extractLocalPathFromResourceName","toQueryPath","encodedDatabaseId","fromQueryPath","resourceName","toValue","nullValue","booleanValue","integerValue","doubleValue","stringValue","mapValue","toMapValue","arrayValue","toArrayValue","timestampValue","geoPointValue","bytesValue","referenceValue","fromValue","hasTag","fromFields","dbId","toMutationDocument","toFields","toDocument","fromDocument","fromFound","found","fromMissing","missing","readTime","fromMaybeDocument","toWatchTargetChangeState","toTestWatchChange","documentChange","documentDelete","documentRemove","targetChangeType","fromWatchChange","fromWatchTargetChangeState","causeProto","entityChange","docDelete","docRemove","versionFromListenResponse","toMutation","mutation","updateMask","toDocumentMask","toFieldTransform","currentDocument","toPrecondition","fromMutation","proto","fromPrecondition","fromDocumentMask","fromFieldTransform","fromWriteResult","fromWriteResults","protos","setToServerValue","toDocumentsTarget","documents","fromDocumentsTarget","documentsTarget","toQueryTarget","structuredQuery","collectionId","toFilter","toOrder","toCursor","fromQueryTarget","fromCount","filterBy","fromFilter","fromOrder","fromCursor","toListenRequestLabels","queryData","toLabel","Listen","ExistenceFilterMismatch","LimboResolution","toTarget","toRelationFilter","toUnaryFilter","compositeFilter","unaryFilter","fromUnaryFilter","fromRelationFilter","reduce","accum","orderBys","toPropertyOrder","fromPropertyOrder","cursor","toDirection","fromDirection","toOperatorName","fromOperatorName","toFieldPathReference","fromFieldPathReference","fieldReference","direction","nanField","nullField","fieldPaths","StreamBridge","sendFn","closeFn","onOpen","wrappedOnOpen","wrappedOnClose","onMessage","wrappedOnMessage","callOnOpen","callOnClose","callOnMessage","LOG_TAG","RPC_NAME_REST_MAPPING","BatchGetDocuments","Commit","X_GOOG_API_CLIENT_VALUE","WebChannelConnection","info","pool","baseUrl","modifyHeadersForRequest","authHeaders","invokeRPC","rpcName","makeUrl","getObject","listenOnce","COMPLETE","getLastErrorCode","NO_ERROR","json","getResponseJson","TIMEOUT","HTTP_ERROR","status_1","getStatus","getResponseText","mapCodeFromHttpStatus","getStatusText","getLastError","releaseObject","requestString","invokeStreamingRPC","openStream","urlParts","webchannelTransport","backgroundChannelTest","httpSessionIdParam","initMessageHeaders","httpHeadersOverwriteParam","sendRawJson","supportsCrossDomainXhr","channel","createWebChannel","opened","streamBridge","unguardedEventListen","param","EventType","OPEN","CLOSE","MESSAGE","msgData","status_2","mapCodeFromRpcStatus","urlRpcName","BrowserPlatform","loadConnection","databaseInfo","newSerializer","encoded","raw","OnlineState","ChangeType","SyncState","fieldNames","_internalPath","documentId","_DOCUMENT_ID","RESERVED","GeneratorIds","DocumentChangeSet","changeMap","track","Metadata","Modified","ViewSnapshot","oldDocs","docChanges","fromCache","hasPendingWrites","syncStateChanged","otherChanges","DocumentSet","keyedMap","sortedSet","emptySet","oldSet","thisDoc","otherDoc","docStrings","newSet","ObjectMap","mapKeyFn","inner","matches_1","entries","entries_1","QueryListenersInfo","EventManager","syncEngine","onlineState","Unknown","onChange","firstListen","queryInfo","applyOnlineStateChange","viewSnap","onViewSnapshot","lastListen","viewSnaps","viewSnaps_1","QueryListener","queryObserver","raisedInitialEvent","includeDocumentMetadataChanges","shouldRaiseEvent","shouldRaiseInitialEvent","raiseInitialEvent","maybeOnline","Failed","waitForSyncWhenOnline","hasPendingWritesChanged","includeQueryMetadataChanges","getInitialViewChanges","PersistencePromise","nextCallback","catchCallback","isDone","callbackAttached","nextFn","catchFn","wrapFailure","wrapSuccess","toPromise","wrapUserFunction","waitFor","nextPromise","initial","EagerGarbageCollector","isEager","sources","potentialGarbage","addGarbageSource","garbageSource","setGarbageCollector","removeGarbageSource","addPotentialGarbageKey","collectGarbage","promises","garbageKeys","hasRefsPromise","documentHasAnyReferences","hasRefs","containsKey","LocalViewChanges","addedKeys","removedKeys","fromSnapshot","viewSnapshot","ReferenceSet","refsByKey","refsByTarget","compareByTargetId","garbageCollector","addReference","addReferences","removeReference","removeRef","removeReferences","removeReferencesForId","emptyKey","startRef","endRef","removeAllReferences","referencesForId","firstRef","DocReference","targetOrBatchId","TargetIdGenerator","generatorId","initAfter","afterWithoutGenerator","afterGenerator","previousId","forLocalStore","LocalStore","forSyncEngine","SyncEngine","AddedLimboDocument","RemovedLimboDocument","syncedDocuments","syncState","limboDocuments","mutatedKeys","documentSet","computeDocChanges","previousChanges","changeSet","oldDocumentSet","newMutatedKeys","newDocumentSet","needsRefill","lastDocInLimit","newMaybeDoc","oldDoc","docsEqual","applyChanges","c1","c2","compareChangeType","applyTargetChange","limboChanges","updateLimboDocuments","newSyncState","Synced","Local","shouldBeInLimbo","targetMapping","oldLimboDocuments","QueryView","localStore","remoteStore","viewHandler","errorHandler","queryViewsByQuery","queryViewsByTarget","limboTargetsByKey","limboKeysByTarget","limboDocumentRefs","limboCollector","mutationUserCallbacks","targetIdGenerator","assertSubscribed","allocateQuery","executeQuery","remoteDocumentKeys","remoteKeys","viewDocChanges","viewChange","queryView","releaseQuery","removeAndCleanupQuery","batch","userCallback","localWrite","addMutationCallback","batchId","emitNewSnapsAndNotifyLocalStore","fillWritePipeline","wrapUpdateFunctionError","runTransaction","updateFunction","retries","createTransaction","userPromise","wrappedUpdateFunction","commit","applyRemoteEvent","remoteEvent","limboKey","newViewSnapshots","rejectListen","docMap","event_1","queryView_1","applySuccessfulWrite","mutationBatchResult","processUserCallback","acknowledgeBatch","rejectFailedWrite","rejectBatch","newCallbacks","toKey","gcLimboDocuments","updateTrackedLimbos","limboChanges_1","limboChange","trackLimboChange","limboTargetId","currentLimboDocs","newSnaps","docChangesInAllViews","queriesProcessed","notifyLocalViewChanges","handleUserChange","MutationBatch","mutations","docKey","batchResult","mutationResults","keySet","isTombstone","toTombstone","MutationBatchResult","commitVersion","streamToken","docVersions","versionMap","encode","encodeSeparator","encodeSegment","resultBuf","escapeChar","lastReasonableEscapeIndex","segmentBuilder","currentPiece","createOrUpgradeDb","oldVersion","DbMutationQueue","store","DbMutationBatch","DbTargetDocument","createIndex","documentTargetsIndex","documentTargetsKeyPath","unique","DbTarget","queryTargetsIndexName","queryTargetsKeyPath","DbRemoteDocument","DbOwner","DbTargetGlobal","DbTimestamp","ownerId","leaseTimestampMs","userId","lastAcknowledgedBatchId","lastStreamToken","localWriteTimeMs","DbDocumentMutation","prefixForUser","prefixForPath","PLACEHOLDER","DbNoDocument","noDocument","lastListenSequenceNumber","highestTargetId","highestListenSequenceNumber","lastRemoteSnapshotVersion","ALL_STORES","SimpleDb","openOrCreate","runUpgrade","isAvailable","event","wrapRequest","deleteDatabase","objectStores","transactionFn","transactionFnResult","completionPromise","IterationController","dbCursor","shouldStop","nextKey","skip","SimpleDbTransaction","objectStoresNames","aborted","onabort","oncomplete","storeName","SimpleDbStore","keyOrValue","loadAll","indexOrRange","iterateCursor","deleteAll","keysOnly","control","iterate","optionsOrCallback","cursorRequest","controller","userResult","primaryKey","skipToKey","continue","indexName","openKeyCursor","IndexedDbMutationQueue","serializer","forUser","isUnauthenticated","loadNextBatchIdFromDb","nextBatchId","mutationQueuesStore","checkEmpty","empty","maxBatchId","mutationsStore","lastIndex","nextUser","IDBKeyRange","keyForBatchId","getNextBatchId","getHighestAcknowledgedBatchId","validateStreamToken","getLastStreamToken","setLastStreamToken","addMutationBatch","dbBatch","toDbMutationBatch","mutations_1","indexKey","documentMutationsStore","lookupMutationBatch","fromDbMutationBatch","getNextMutationBatchAfterBatchId","lowerBound","foundBatch","getAllMutationBatches","dbBatches","getAllMutationBatchesThroughBatchId","getAllMutationBatchesAffectingDocumentKey","documentKey","indexPrefix","indexStart","userID","encodedPath","batchID","mutationKey","getAllMutationBatchesAffectingQuery","immediateChildrenLength","uniqueBatchIDs","removeMutationBatches","batches","indexTxn","only","numDeleted","removePromise","batches_1","performConsistencyCheck","startRange","danglingMutationReferences","getStore","IndexedDbQueryCache","globalTargetStore","lastSavedVersion","getHighestTargetId","getLastRemoteSnapshotVersion","setLastRemoteSnapshotVersion","addQueryData","addedQueryPromise","targetsStore","toDbTarget","removeQueryData","removeMatchingKeysForTargetId","getQueryData","fromDbTarget","addMatchingKeys","documentTargetStore","removeMatchingKeys","notifyGCForRemovedKeys","getMatchingKeysForTargetId","IndexedDbRemoteDocumentCache","addEntry","maybeDocument","remoteDocumentsStore","dbKey","toDbRemoteDocument","removeEntry","getEntry","dbRemoteDoc","fromDbRemoteDocument","getDocumentsMatchingQuery","LocalSerializer","remoteSerializer","remoteDoc","serializedMutations","dbTarget","queryProto","dbTimestamp","EXISTING_OWNER_ERROR_MSG","IndexedDbPersistence","prefix","generateOwnerId","dbName","MAIN_DATABASE","localStoragePrefix","started","simpleDb","tryAcquireOwnerLease","scheduleOwnerLeaseRefreshes","attachWindowUnloadHook","persistenceError","shutdown","detachWindowUnloadHook","stopOwnerLeaseRefreshes","releaseOwnerLease","getMutationQueue","getQueryCache","getRemoteDocumentCache","ensureOwnerLease","buildStoragePrefix","isDefaultDatabase","dbOwner","validOwner","newDbOwner","minAcceptable","maxAcceptable","getZombiedOwnerId","ownerLeaseRefreshHandle","windowUnloadHandler","setZombiedOwnerId","zombiedOwnerId","zombiedOwnerLocalStorageKey","zombieOwnerId","LocalDocumentsView","remoteDocumentCache","mutationQueue","getDocument","computeLocalDocument","getDocuments","getDocumentsMatchingDocumentQuery","getDocumentsMatchingCollectionQuery","queryResults","computeLocalDocuments","promisedResults","matchingMutationBatches","matchingKeys","matchingMutationBatches_1","mutatedDoc","RemoteDocumentChangeBuffer","assertChanges","bufferedEntry","persistence","initialUser","localViewReferences","heldBatchResults","remoteDocuments","queryCache","localDocuments","startMutationQueue","startQueryCache","oldBatches","promisedOldBatches","newBatches","changedKeys","_d","highestAck","ackedBatches","promisedBatch","changedDocuments","affected","shouldHoldBatchResult","documentBuffer_1","releaseBatchResults","promisedAffectedKeys","toReject","affectedKeys","promisedToReject","lastAcked","removeMutationBatch","documentBuffer","changedDocKeys","existingDoc","releasedWriteKeys","lastRemoteVersion","remoteVersion","releaseHeldBatchResults","promisedReleasedWriteKeys","viewChanges","viewChanges_1","nextMutationBatch","afterBatchId","readDocument","cached","documentBuffer_2","garbage","toRelease","isRemoteUpToVersion","batchResults","promiseChain","applyWriteToRemoteDocuments","batchResults_1","affectedDocs","batches_2","docKeys","ackVersion","MemoryMutationQueue","highestAcknowledgedBatchId","batchesByDocumentKey","batchIndex","indexOfExistingBatchId","findMutationBatch","rawIndex","indexOfBatchId","getAllLiveMutationBatchesBeforeIndex","endIndex","immediateChildrenPathLength","startPath","rowKeyPath","batchCount","firstBatchId","queueCount","startIndex","length_1","references","MemoryQueryCache","MemoryRemoteDocumentCache","MemoryPersistence","mutationQueues","MemoryPersistenceTransaction","NoOpGarbageCollector","PersistentStreamState","ExponentialBackoff","initialDelayMs","backoffFactor","maxDelayMs","currentBaseMs","resetToMax","backoffAndWait","def","delayWithJitterMs","jitterDelayMs","PersistentStream","credentialsProvider","initialBackoffDelay","idle","stream","backoff","Initial","isStarted","Backoff","Open","isOpen","performBackoff","stop","Stopped","inhibitBackoff","markIdle","schedule","handleIdleCloseTimer","cancelIdleCheck","finalState","tearDown","startStream","rpcError","handleStreamClose","dispatchIfStillActive","currentStream_1","startRpc","PersistentListenStream","credentials","watchChangeProto","onWatchChange","watch","addTarget","labels","unwatch","removeTarget","PersistentWriteStream","handshakeComplete_","writeMutations","responseProto","writeResults","commitTime","onMutationResult","onHandshakeComplete","writeHandshake","Datastore","newPersistentWriteStream","newPersistentWatchStream","lookup","Transaction","datastore","readVersions","recordVersion","docVersion","existingVersion","preconditionForUpdate","toMutations","unwritten","RemoteStore","onlineStateHandler","pendingWrites","lastBatchSeen","accumulatedWatchChanges","watchStream","writeStream","watchStreamOnlineState","watchStreamFailures","shouldWarnOffline","enableNetwork","updateOnlineState","newState","Healthy","updateOnlineStateAfterFailure","isNetworkEnabled","shouldStartWatchStream","startWatchStream","disableNetwork","disableNetworkInternal","cleanUpWatchStreamState","cleanUpWriteStreamState","sendWatchRequest","sendUnwatchRequest","recordPendingTargetRequest","onWatchStreamOpen","onWatchStreamClose","onWatchStreamChange","handleTargetError","handleWatchChangeBatch","aggregator","deletedDoc","trackedRemote","newQueryData","requestQueryData","canWriteMutations","outstandingWrites","shouldStartWriteStream","startWriteStream","handshakeComplete","onWriteStreamOpen","onWriteStreamClose","onWriteHandshakeComplete","success","handleWriteError","handleHandshakeError","FirestoreClient","asyncQueue","usePersistence","initializationDone","persistenceResult","initialized","setUserChangeListener","initializePersistence","initializeRest","startIndexedDbPersistence","canFallback","startMemoryPersistence","storagePrefix","eventMgr","verifyOperationInProgress","removeUserChangeListener","AsyncObserver","muted","scheduleEvent","mute","eventHandler","AsyncQueue","tail","delayedOperations","delayedOperationsCount","operationInProgress","delay","delayedOp_1","scheduleInternal","drain","executeDelayedTasks","entry","otherUser","GOOGLE_CREDENTIALS","FIRST_PARTY","OAuthToken","Authorization","EmptyCredentialsProvider","userListener","FirebaseCredentialsProvider","tokenListener","userCounter","newUser","getUser","initialUserCounter","tokenData","currentUid","FirstPartyToken","sessionIndex","FirstPartyCredentialsProvider","makeCredentialsProvider","isPartialObserver","UserDataSource","FieldValueImpl","DeleteFieldValueImpl","serverTimestamp","ServerTimestampFieldValueImpl","PublicFieldValue","RESERVED_FIELD_REGEX","ParsedSetData","ParsedUpdateData","isWrite","dataSource","MergeSet","Update","QueryValue","ParseContext","methodName","arrayElement","validatePath","childContextForField","validatePathSegment","childContextForFieldPath","childContextForArray","createError","fieldDescription","DocumentKeyReference","UserDataConverter","preConverter","parseSetData","validatePlainObject","updateData","parseData","parseMergeData","parseUpdateData","fieldMaskPaths","fieldPathFromDotSeparatedString","childContext","runPreConverter","parsedValue","mask","parseUpdateVarargs","moreFieldsAndValues","fieldPathFromArgument","value_1","parseQueryValue","parsed","parseArray","looksLikeJsonObject","parseObject","parseScalarValue","entryIndex","array_1","parsedEntry","search","fromDotSeparatedString","FirestoreSettings","settings","defaultValue","FirestoreConfig","Firestore","databaseIdOrApp","_queue","_firestoreClient","config","firebaseApp","databaseIdFromApp","external_1","_config","_databaseId","settingsLiteral","newSettings","ensureClientConfigured","enablePersistence","configureClient","_dataConverter","thisDb","otherDb","firestore","_key","forPath","SILENT","level","_firestore","_transaction","documentRef","validateReference","validateSetOptions","fieldOrUpdateData","WriteBatch","_mutations","_committed","verifyNotCommitted","DocumentReference","onSnapshot","includeMetadataChanges","currArg","internalOptions","onSnapshotInternal","errHandler","asyncObserver","internalListener","SnapshotMetadata","DocumentSnapshot","_document","_fromCache","validateSnapshotOptions","convertObject","convertValue","convertArray","QueryDocumentSnapshot","_query","opStr","validateNewFilter","directionStr","validateNewOrderBy","docOrField","boundFromDocOrFields","startAfter","endBefore","boundFromDocument","allFields","boundFromFields","components","rawValue","wrapped","firestoreClient","existingField","validateOrderByAndInequalityMatch","inequality","QuerySnapshot","_originalQuery","_snapshot","_cachedChanges","convertToDocumentImpl","lastDoc_1","index_1","oldIndex","newIndex","indexTracker_1","resultChangeType","changesFromSnapshot","CollectionReference","parentPath","docRef","PublicFirestore","PublicTransaction","PublicWriteBatch","PublicDocumentReference","PublicDocumentSnapshot","PublicQueryDocumentSnapshot","PublicQuery","PublicQuerySnapshot","PublicCollectionReference","firestoreNamespace","registerFirestore","domainBase","FirebaseStorageError","code_","prependCode","message_","serverResponse_","codeProp","codeEquals","serverResponseProp","setServerResponseProp","serverResponse","cannotSliceBlob","noDownloadURL","invalidArgument","appDeleted","invalidFormat","format","internalError","StringFormat","RAW","BASE64","BASE64URL","DATA_URL","formatValidator","stringFormat","StringData","opt_contentType","dataFromString","string","utf8Bytes_","base64Bytes_","rest","percentEncodedBytes_","dataURLBytes_","dataURLContentType_","hasMinus","hasUnder","hasPlus","hasSlash","dataURL","middle","ErrorCode","TaskEvent","STATE_CHANGED","InternalTaskState","TaskState","RUNNING","PAUSED","SUCCESS","CANCELED","taskStateFromInternalTaskState","clone","make","resolver","isDef","isJustDef","isFunction","isObject","isNonNullObject","isString","isNativeBlob","isNativeBlobDefined","NetworkXhrIo","sent_","xhr_","errorCode_","sendPromise_","ABORT","NETWORK_ERROR","opt_body","opt_headers","getErrorCode","addUploadProgressListener","upload","removeUploadProgressListener","XhrIoPool","createXhrIo","jsonObjectOrNull","Location","bucket","fullServerUrl","bucketOnlyServerUrl","makeFromBucketSpec","bucketString","bucketLocation","makeFromUrl","groups","regex","indices","postModify","loc","group","captures","bucketValue","pathValue","canonicalChildPath","lastComponent","makeNormalUrl","urlPart","makeUploadUrl","makeQueryString","queryPart","nextPart","noXform_","Mapping","server","opt_local","opt_writable","opt_xform","local","writable","xform","mappings_","getMappings","mappings","nameMapping","fullPath","xformPath","sizeMapping","tokens","alt","fromResource","authWrapper","makeStorageReference","addRef","toResourceString","metadataValidator","validate","specs","passed","minArgs","maxArgs","argMin","argMax","real","countPart","plural","validator","opt_optional","stringSpec","opt_validator","stringValidator","uploadDataSpec","ArrayBuffer","metadataSpec","nonNegativeNumberSpec","looseObjectSpec","nullFunctionSpec","getBlobBuilder","BlobBuilder","WebKitBlobBuilder","getBlob","var_args","append","FbsBlob","opt_elideCopy","blobType","data_","byteLength","size_","type_","startByte","endByte","sliced","webkitSlice","mozSlice","blobby","uint8Arrays","finalLength_1","merged_1","uploadData","RequestInfo","handler","urlParams","progressCallback","successCodes","additionalRetryCodes","handlerCheck","cndn","metadataHandler","text","resourceString","sharedErrorHandler","newErr","objectErrorHandler","shared","getMetadata","maxOperationRetryTime","requestInfo","updateMetadata","deleteObject","metadataForUpload_","opt_metadata","determineContentType_","ResumableUploadStatus","total","checkResumeHeader_","opt_allowed","continueResumableUpload","chunkSize","opt_status","opt_progressCallback","bytesLeft","bytesToUpload","maxUploadRetryTime","uploadStatus","newCurrent","opt_error","opt_complete","UploadTaskSnapshot","bytesTransferred","totalBytes","urls","argsToForward","UploadTask","transferred_","needToFetchStatus_","needToFetchMetadata_","observers_","error_","uploadUrl_","request_","chunkMultiplier_","resolve_","reject_","ref_","authWrapper_","location_","blob_","metadata_","resumable_","shouldDoResumable_","state_","errorHandler_","completeTransitions_","transition_","metadataErrorHandler_","promise_","start_","makeProgressCallback_","sizeBefore","loaded","updateProgress_","createResumable_","fetchStatus_","fetchMetadata_","continueUpload_","oneShotUpload_","resolveToken_","getAuthToken","createRequest","makeRequest","getPromise","sizeString","statusRequest","uploadRequest","newStatus","increaseMultiplier_","metadataRequest","boundary","genBoundary","preBlobPart","postBlobPart","multipartRequest","transferred","old","notifyObservers_","wasPaused","externalState","completed","typeValidator","_p","nextOrObserverMessage","nextValidator","observerValidator","nextOrObserverValidator","makeBinder","addObserver_","removeObserver_","binderNextOrObserverValidator","binderSpecs","typeOnly","notifyObserver_","arraylike","finishPromise_","triggered","resume","valid","pause","newRef","newPath","throwIfRoot_","putString","getDownloadURL","FailRequest","appDelete","RequestMap","map_","id_","addRequest","unmap","AuthWrapper","maker","requestMaker","bucket_","deleted_","extractBucket_","storageRefMaker_","requestMaker_","pool_","service_","maxOperationRetryTime_","maxUploadRetryTime_","requestMap_","_error","deleteApp","setMaxUploadRetryTime","setMaxOperationRetryTime","NetworkRequest","errorCallback","pendingXhr_","backoffId_","canceled_","appDelete_","url_","method_","headers_","body_","successCodes_","additionalRetryCodes_","errorCallback_","progressCallback_","timeout_","backoffDone","requestWentThrough","wasSuccessCode","canceled","RequestEndStatus","waitSeconds","timeoutId","hitTimeout","cancelState","triggeredCallback","triggerCallback","callWithDelay","millis","waitMillis","mustStop","stopped","wasTimeout","backoffCallback","progressListener","hitServer","isRetryStatusCode_","successCode","wasCanceled","progressEvent","lengthComputable","isFiveHundredCode","isExtraRetryCode","isRequestSpecificRetryCode","opt_canceled","addAuthHeader_","number","addVersionHeader_","Service","authWrapperBucket","internals_","refFromURL","ServiceInternals","factory","opt_url","registerStorage","namespaceExports","Storage","CODES","AVAILABLE_IN_WINDOW","AVAILABLE_IN_SW","SHOULD_BE_INHERITED","BAD_SENDER_ID","INCORRECT_GCM_SENDER_ID","PERMISSION_DEFAULT","PERMISSION_BLOCKED","UNSUPPORTED_BROWSER","NOTIFICATIONS_BLOCKED","FAILED_DEFAULT_REGISTRATION","SW_REGISTRATION_EXPECTED","GET_SUBSCRIPTION_FAILED","INVALID_SAVED_TOKEN","SW_REG_REDUNDANT","TOKEN_SUBSCRIBE_FAILED","TOKEN_SUBSCRIBE_NO_TOKEN","TOKEN_SUBSCRIBE_NO_PUSH_SET","USE_SW_BEFORE_GET_TOKEN","INVALID_DELETE_TOKEN","DELETE_TOKEN_NOT_FOUND","DELETE_SCOPE_NOT_FOUND","BG_HANDLER_FUNCTION_EXPECTED","NO_WINDOW_CLIENT_TO_MSG","UNABLE_TO_RESUBSCRIBE","NO_FCM_TOKEN_FOR_RESUBSCRIBE","FAILED_TO_DELETE_TOKEN","NO_SW_IN_REG","BAD_SCOPE","BAD_VAPID_KEY","BAD_SUBSCRIPTION","BAD_TOKEN","BAD_PUSH_SET","FAILED_DELETE_VAPID_KEY","codes","arrayBuffer","uint8Version","FCM_APPLICATION_SERVER_KEY","ENDPOINT","APPLICATION_SERVER_KEY","SUBSCRIPTION_OPTIONS","userVisibleOnly","applicationServerKey","FCM_TOKEN_OBJ_STORE","TokenManager","errorFactory_","openDbPromise_","openDatabase_","DB_NAME","closeDatabase","getTokenDetailsFromToken","fcmToken","getTokenDetailsFromSWScope_","swScope","scopeRequest","getAllTokenDetailsForSenderId_","senderId","senderIdTokens","subscribeToFCM","subscription","pushSet","p256dh","fcmSubscribeBody","Headers","fetch","fcmTokenResponse","isSameSubscription_","masterTokenDetails","saveTokenDetails_","swRegistration","fcmPushSet","details","scope","fcmSenderId","getSavedToken","ServiceWorkerRegistration","allTokenDetails","tokenDetails","pushManager","getSubscription","createToken","fcmTokenDetails","deleteToken","ControllerInterface","messagingSenderId_","tokenManager_","currentPermission","getNotificationPermission_","getSWRegistration_","requestPermission","useServiceWorker","optError","optCompleted","onTokenRefresh","setBackgroundMessageHandler","Notification","permission","getTokenManager","PARAMS","TYPE_OF_MSG","DATA","PUSH_MSG_RECEIVED","NOTIFICATION_CLICKED","msgType","WindowController","messageObserver_","tokenRefreshObserver_","onTokenRefresh_","setupSWMessageListener_","isSupported_","manifestCheck_","manifestCheckPromise_","manifestTag","querySelector","manifestContent","managePermissionResult","permissionPromise","registrationToUse_","waitForRegistrationToActivate_","serviceWorker","installing","waiting","active","stateChangeListener","browserErrorMessage","workerPageMessage","pushMessage","PushSubscription","SWController","onPush_","onSubChange_","onNotificationClick_","bgMessageHandler_","msgPayload","handleMsgPromise","hasVisibleClients_","hasVisibleClients","notification","sendMessageToWindowClients_","notificationDetails","getNotificationData_","notificationTitle","showNotification","waitUntil","tokenManager","newSubscription","stopImmediatePropagation","clickAction","getWindowClient_","windowClient","clients","openWindow","internalMsg","attemptToMessageClient_","notificationInformation","assign","parsedURL","URL","matchAll","includeUncontrolled","clientList","suitableClient","registerMessaging","Messaging","goog","eval","abs","Zd","Image","concurrentRequestLimit","fastHandshake","sendBeacon","round","hostname","port","testUrl","messageUrlParams","messageHeaders","clientProtocolHeaderRequired","messageContentType","__sm__","__data__","createWebChannelTransport","WebChannel","INVALID_KEY_REGEX_","INVALID_PATH_REGEX_","MAX_LEAF_SIZE_","isValidKey","isValidPathString","isValidRootPathString","priority","isInvalidJSONNumber","validateFirebaseDataArg","ValidationPath","toErrorString","hasDotValue_1","hasActualChild_1","validateFirebaseMergePaths","mergePaths","curPath","comparePaths","prevPath","validateFirebaseMergeDataArg","validatePriority","validateEventType","validateKey","validatePathString","validateRootPathString","validateWritablePath","validateUrl","parsedUrl","validateCredential","cred","validateBoolean","bool","validateString","validateObject","validateObjectContainsKey","opt_type","newSnapshot","oldSnapshot","Timeout","clearFn","_id","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","util_6","storage_1","util_7","utf8Bytes","sha1Bytes","encodeByteArray","buildLogMessage_","firstLog_","logger_","persistent","SessionStorage","fatal","warnIfPageIsSecure","warnAboutUnsupportedMethod","executeWhenDOMReady","called_1","wrappedFn_1","aAsInt","tryParseInt","bAsInt","stringCompare","requireKey","ObjectToUniqueKey","splitStringBySize","segsize","dataSegs","bindCallback","doubleToIEEE754String","ln","bits","LN2","hexByteString","hexByte","isChromeExtensionContentScript","isWindowsStoreApp","Windows","UI","intVal","callUserCallback","beingCrawled","exportPropGetter","fnGet","registerImmediate","html","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","runIfPresent","importScripts","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","script","base64Encode","deepCopy_1","deferred_1","environment_1","errors_1","jwt_1","extend","findValue","query_1","sha1_1","subscribe_1","utf8_1","childSet_1","jsonLeaf","node_1","jsonObj_1","childData","children_1","childrenHavePriority_1","hinzeJsonObj_1","childSet","buildChildSet","NAME_ONLY_COMPARATOR","sortedChildSet","DOMStorageWrapper_1","MemoryStorage_1","createStoragefor","domStorageName","domStorage","PersistentStorage","PROTOCOL_VERSION","VERSION_PARAM","TRANSPORT_SESSION_PARAM","REFERER_PARAM","FORGE_REF","FORGE_DOMAIN","LAST_SESSION_PARAM","WEBSOCKET","LONG_POLLING","oldWrapped","newWrapped","pathOrString","pieceNum","pieces_","copyTo","pieceNum_","toUrlEncodedString","begin","pieces","childPathObj","childPieces","outerPath","innerPath","outer","leftKeys","rightKeys","errorPrefix_","parts_","byteLength_","checkValid_","MAX_PATH_LENGTH_BYTES","MAX_PATH_DEPTH","value_","toHash","compareToLeafNode_","otherLeaf","otherLeafType","thisLeafType","otherIndex","VALUE_TYPE_ORDER","thisIndex","isReverse_","resultGenerator_","nodeStack_","min_","fixUp_","removeMin_","isRed_","moveRedLeft_","rotateRight_","moveRedRight_","rotateLeft_","colorFlip_","checkMaxDepth_","check_","comparator_","root_","rightParent","resultGenerator","SparseSnapshotTree_1","SyncTree_1","SnapshotHolder_1","AuthTokenProvider_1","StatsManager_1","StatsReporter_1","EventQueue_1","ReadonlyRestClient_1","nextWriteId_","interceptServerDataCallback_","onDisconnect_","SparseSnapshotTree","authTokenProvider","stats_","StatsManager","getCollection","onConnectStatus_","authOverride","onServerInfoUpdate_","statsReporter_","getOrCreateReporter","infoData_","infoSyncTree_","infoEvents","updateInfo_","serverTime","generateWithValues","isMerge","taggedChildren","taggedSnap","connectStatus","runOnDisconnectEvents_","setWithPriority","errorReason","clearEvents","callOnCompleteCallback","childrenToMerge","changedKey","changedValue","writeId_1","resolvedOnDisconnectTree","resolveDeferredValueTree","forEachTree","onDisconnectCancel","forget","onDisconnectSet","onDisconnectPut","remember","onDisconnectSetWithPriority","onDisconnectUpdate","onDisconnectMerge","addEventCallbackForQuery","removeEventCallbackForQuery","interrupt","longestName","currentValue","__database","fullyInitialized_","filtered_","TransactionResult_1","NextPushId_1","QueryParams_1","getKey","getRoot","databaseProp","objectToMerge","newObjectToMerge","promiseComplete","setPriority","thennablePushRef","pushRef","onDisconnect","__referenceConstructor","childPathString","childRef","childrenNode","emptyChildrenSingleton","tree","findRootMostMatchingPathAndValue","childExistingPathAndValue","toSet","newTree","fold_","findOnPath_","pathToFollow","foreachOnPath_","currentRelativePath","foreach_","StatsCollection_1","hashString","collections_","creatorFunction","reporters_","parser_1","_staticInstance","repos_","useRestClient_","dbUrl","parseRepoInfo","createRepo","deleteRepo","appRepos","toURLString","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","HAS_NATIVE_SUPPORT","opt_webSafe","init_","byteToCharMap","output","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","encodeString","decodeString","pos","c3","byteArrayToString","decodeStringToByteArray","charToByteMap","byte4","ENCODED_VALS","ENCODED_VALS_WEBSAFE","objTo","objFrom","rv","opt_obj","opt_this","repo_","DatabaseInternals","checkDeleted_","apiName","goOffline","goOnline","TIMESTAMP","parseURL","subdomain","domain","scheme","colonInd","slashInd","pathStringDecoded","piece","decodePath","Constants_1","internalHost","needsQueryParam","isCacheableHost","isDemoHost","isCustomHost","updateHost","newHost","connectionURL","connURL","pairs","EventRegistration_1","queryParams_","orderByCalled_","validateQueryEndpoints_","startNode","endNode","tooManyArgsError","wrongArgTypeError","validateLimit_","validateNoPreviousOrderByCall_","cancelCallbackOrContext","getCancelAndContextArgs_","onValueEvent","onChildEvent","cancelCallback","container","cancelOrContext","firstCall","onceCallback","orderByChild","parsedPath","orderByKey","orderByPriority","orderByValue","equalTo","queryObject","sameRepo","samePath","sameQueryIdentifier","ValueIndex","valueNode","_defaultIndexMap","fallbackObject","indexes_","indexSet_","sortedMap","existingChildren","childList","sawIndexedValue","newIndexSet","newIndexes","indexedChildren","existingSnap","SortedMap_2","LOG_2","Base12Num","current_","bits_","nextBitIsOne","keyFn","mapSortFn","buildBalancedTree","low","base12","buildPennant","attachPennant","pennant","isOne","buildFrom12Array","indexPath_","extractChild","aChild","bChild","resolveDeferredValue","resolvedTree","rawPri","leafNode","CountedSet_1","CountedSet","self_1","prefixPath","func","View_1","views_","optCompleteServerCache","events_1","eventCacheComplete","hadCompleteView","viewQueryId","eventCache_","serverCache_","collection_","last_","newStats","delta","VisibilityMonitor_1","OnlineMonitor_1","ServerActions_1","authOverride_","nextPersistentConnectionId_","interruptReasons_","outstandingPuts_","outstandingPutCount_","onDisconnectRequestQueue_","connected_","reconnectDelay_","maxReconnectDelay_","lastSessionId","establishConnectionTimer_","requestCBHash_","requestNumber_","realtime_","authToken_","forceTokenRefresh_","invalidAuthTokenCount_","firstConnection_","lastConnectionAttemptTime_","lastConnectionEstablishedTime_","scheduleConnect_","onVisible_","onOnline_","onResponse","curReqNum","listenSpec","sendListen_","req","payload","warnOnListenWarnings_","removeListen_","warnings","indexSpec","indexPath","tryAuth","reduceReconnectDelayIfAdminCredential_","token_1","authMethod","requestData","onAuthRevoked_","sendUnlisten_","queryObj","sendOnDisconnect_","putInternal","sendPut_","queued","onDataMessage_","reqNum","onDataPush_","onListenRevoked_","onSecurityDebugPacket_","onReady_","handleTimestamp_","sendConnectStats_","restoreState_","establishConnection_","online","onRealtimeDisconnect_","cancelSentTransactions_","shouldReconnect_","timeSinceLastConnectAttempt","reconnectDelay","onDataMessage_1","onReady_1","connId_1","nextConnectionId_","lastSessionId_1","canceled_1","connection_1","closeFn_1","serverTimeOffset","normalizedPathString","statusCode","explanation","clientName","allowedEvents_","listeners_","validateEventType_","et","TransportManager_1","onKill_","connectionCount","pendingDataMessages","transportManager_","conn","conn_","nextTransportId_","primaryResponsesRequired_","onMessageReceived","connReceiver_","onConnectionLost","disconnReceiver_","tx_","rx_","secondaryConn_","isHealthy_","healthyTimeout_ms","healthyTimeout_","bytesReceived","markConnectionHealthy","bytesSent","everConnected","onConnectionLost_","onSecondaryConnectionLost_","onPrimaryMessageReceived_","onSecondaryMessageReceived_","dataMsg","sendData_","tryCleanupConnection","connId","onSecondaryControl_","controlData","cmd","upgradeIfSecondaryHealthy_","secondaryResponsesRequired_","parsedData","layer","proceedWithUpgrade_","onControl_","onPrimaryResponse_","onHandshake_","onConnectionShutdown_","onReset_","sendPingOnPrimaryIfNecessary_","handshake","ts","onConnectionEstablished_","tryStartUpgrade_","startUpgrade_","closeConnections_","PacketReceiver_1","FIREBASE_LONGPOLL_START_PARAM","FIREBASE_LONGPOLL_CLOSE_COMMAND","FIREBASE_LONGPOLL_COMMAND_CB_NAME","FIREBASE_LONGPOLL_DATA_CB_NAME","FIREBASE_LONGPOLL_ID_PARAM","FIREBASE_LONGPOLL_PW_PARAM","FIREBASE_LONGPOLL_SERIAL_PARAM","FIREBASE_LONGPOLL_CALLBACK_ID_PARAM","FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM","FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET","FIREBASE_LONGPOLL_DATA_PARAM","FIREBASE_LONGPOLL_DISCONN_FRAME_PARAM","FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM","transportSessionId","everConnected_","urlFn","curSegmentNum","myPacketOrderer","isClosed_","connectTimeoutTimer_","onClosed_","scriptTagHolder","FirebaseIFrameScriptHolder","command","arg1","arg2","incrementIncomingBytes_","sendNewPolls","pN","uniqueCallbackIdentifier","connectURL","addTag","startLongPoll","addDisconnectPingFrame","forceAllow_","forceDisallow_","shutdown_","myDisconnFrame","dataStr","base64data","MAX_URL_DATA_SIZE","enqueueSegment","pw","commandCB","onMessageCB","outstandingRequests","pendingSegs","currentSerial","myIFrame","createIFrame_","iframeContents","iframe","contentDocument","alive","innerHTML","myID","myPW","theURL","nodeRestRequest","newRequest_","curDataString","theSeg","seg","addLongPollTag_","segnum","totalsegs","serial","doNewRequest","keepaliveTimeout","loadCB","doNodeLongPoll","newScript_1","rstate","WebSocketImpl","MozWebSocket","WebSocket","setWebSocketImpl","impl","keepaliveTimer","frames","totalFrames","connectionURL_","device","mySock","onopen","onclose","handleIncomingFrame","isOldAndroid","oldAndroidMatch","appendFrame_","fullMess","jsonMess","handleNewFrameCount_","frameCount","extractFrameCount_","mess","resetKeepAlive","remainingData","sendString_","responsesRequiredToBeHealthy","healthyTimeout","indexedFilter_","startPost_","getStartPost_","endPost_","getEndPost_","startName","endName","tokenListeners","FirebaseAppImpl","firebase_","isDeleted_","services_","options_","checkDestroyed_","removeApp","services","serviceKey","instanceKey","_getService","instanceIdentifier","instanceSpecifier","factories","extendApp","props","appErrors","createFirebaseNamespace","apps_","appHooks","initializeApp","callAppHooks","apps","createService","serviceProperties","appHook","allowMultipleInstances","getApps","serviceNamespace","appArg","serviceFxn","useAsService","eventName","factoryName","useService"],"mappings":"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","file":"firebase.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1382);\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Index_1 = require(\"./Index\");\nvar util_1 = require(\"../../util/util\");\nvar Node_1 = require(\"../Node\");\nvar LeafNode_1 = require(\"../LeafNode\");\nvar nodeFromJSON;\nvar MAX_NODE;\nfunction setNodeFromJSON(val) {\n nodeFromJSON = val;\n}\nexports.setNodeFromJSON = setNodeFromJSON;\nfunction setMaxNode(val) {\n MAX_NODE = val;\n}\nexports.setMaxNode = setMaxNode;\n/**\n * @constructor\n * @extends {Index}\n * @private\n */\nvar PriorityIndex = /** @class */ (function (_super) {\n __extends(PriorityIndex, _super);\n function PriorityIndex() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @inheritDoc\n */\n PriorityIndex.prototype.compare = function (a, b) {\n var aPriority = a.node.getPriority();\n var bPriority = b.node.getPriority();\n var indexCmp = aPriority.compareTo(bPriority);\n if (indexCmp === 0) {\n return util_1.nameCompare(a.name, b.name);\n }\n else {\n return indexCmp;\n }\n };\n /**\n * @inheritDoc\n */\n PriorityIndex.prototype.isDefinedOn = function (node) {\n return !node.getPriority().isEmpty();\n };\n /**\n * @inheritDoc\n */\n PriorityIndex.prototype.indexedValueChanged = function (oldNode, newNode) {\n return !oldNode.getPriority().equals(newNode.getPriority());\n };\n /**\n * @inheritDoc\n */\n PriorityIndex.prototype.minPost = function () {\n return Node_1.NamedNode.MIN;\n };\n /**\n * @inheritDoc\n */\n PriorityIndex.prototype.maxPost = function () {\n return new Node_1.NamedNode(util_1.MAX_NAME, new LeafNode_1.LeafNode('[PRIORITY-POST]', MAX_NODE));\n };\n /**\n * @param {*} indexValue\n * @param {string} name\n * @return {!NamedNode}\n */\n PriorityIndex.prototype.makePost = function (indexValue, name) {\n var priorityNode = nodeFromJSON(indexValue);\n return new Node_1.NamedNode(name, new LeafNode_1.LeafNode('[PRIORITY-POST]', priorityNode));\n };\n /**\n * @return {!string} String representation for inclusion in a query spec\n */\n PriorityIndex.prototype.toString = function () {\n return '.priority';\n };\n return PriorityIndex;\n}(Index_1.Index));\nexports.PriorityIndex = PriorityIndex;\nexports.PRIORITY_INDEX = new PriorityIndex();\n\n//# sourceMappingURL=PriorityIndex.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar util_2 = require(\"../util/util\");\nvar SortedMap_1 = require(\"../util/SortedMap\");\nvar Node_1 = require(\"./Node\");\nvar snap_1 = require(\"./snap\");\nvar PriorityIndex_1 = require(\"./indexes/PriorityIndex\");\nvar KeyIndex_1 = require(\"./indexes/KeyIndex\");\nvar IndexMap_1 = require(\"./IndexMap\");\nvar LeafNode_1 = require(\"./LeafNode\");\nvar comparators_1 = require(\"./comparators\");\n// TODO: For memory savings, don't store priorityNode_ if it's empty.\nvar EMPTY_NODE;\n/**\n * ChildrenNode is a class for storing internal nodes in a DataSnapshot\n * (i.e. nodes with children). It implements Node and stores the\n * list of children in the children property, sorted by child name.\n *\n * @constructor\n * @implements {Node}\n */\nvar ChildrenNode = /** @class */ (function () {\n /**\n *\n * @param {!SortedMap.} children_ List of children\n * of this node..\n * @param {?Node} priorityNode_ The priority of this node (as a snapshot node).\n * @param {!IndexMap} indexMap_\n */\n function ChildrenNode(children_, priorityNode_, indexMap_) {\n this.children_ = children_;\n this.priorityNode_ = priorityNode_;\n this.indexMap_ = indexMap_;\n this.lazyHash_ = null;\n /**\n * Note: The only reason we allow null priority is for EMPTY_NODE, since we can't use\n * EMPTY_NODE as the priority of EMPTY_NODE. We might want to consider making EMPTY_NODE its own\n * class instead of an empty ChildrenNode.\n */\n if (this.priorityNode_) {\n snap_1.validatePriorityNode(this.priorityNode_);\n }\n if (this.children_.isEmpty()) {\n util_1.assert(!this.priorityNode_ || this.priorityNode_.isEmpty(), 'An empty node cannot have a priority');\n }\n }\n Object.defineProperty(ChildrenNode, \"EMPTY_NODE\", {\n get: function () {\n return (EMPTY_NODE ||\n (EMPTY_NODE = new ChildrenNode(new SortedMap_1.SortedMap(comparators_1.NAME_COMPARATOR), null, IndexMap_1.IndexMap.Default)));\n },\n enumerable: true,\n configurable: true\n });\n /** @inheritDoc */\n ChildrenNode.prototype.isLeafNode = function () {\n return false;\n };\n /** @inheritDoc */\n ChildrenNode.prototype.getPriority = function () {\n return this.priorityNode_ || EMPTY_NODE;\n };\n /** @inheritDoc */\n ChildrenNode.prototype.updatePriority = function (newPriorityNode) {\n if (this.children_.isEmpty()) {\n // Don't allow priorities on empty nodes\n return this;\n }\n else {\n return new ChildrenNode(this.children_, newPriorityNode, this.indexMap_);\n }\n };\n /** @inheritDoc */\n ChildrenNode.prototype.getImmediateChild = function (childName) {\n // Hack to treat priority as a regular child\n if (childName === '.priority') {\n return this.getPriority();\n }\n else {\n var child = this.children_.get(childName);\n return child === null ? EMPTY_NODE : child;\n }\n };\n /** @inheritDoc */\n ChildrenNode.prototype.getChild = function (path) {\n var front = path.getFront();\n if (front === null)\n return this;\n return this.getImmediateChild(front).getChild(path.popFront());\n };\n /** @inheritDoc */\n ChildrenNode.prototype.hasChild = function (childName) {\n return this.children_.get(childName) !== null;\n };\n /** @inheritDoc */\n ChildrenNode.prototype.updateImmediateChild = function (childName, newChildNode) {\n util_1.assert(newChildNode, 'We should always be passing snapshot nodes');\n if (childName === '.priority') {\n return this.updatePriority(newChildNode);\n }\n else {\n var namedNode = new Node_1.NamedNode(childName, newChildNode);\n var newChildren = void 0, newIndexMap = void 0, newPriority = void 0;\n if (newChildNode.isEmpty()) {\n newChildren = this.children_.remove(childName);\n newIndexMap = this.indexMap_.removeFromIndexes(namedNode, this.children_);\n }\n else {\n newChildren = this.children_.insert(childName, newChildNode);\n newIndexMap = this.indexMap_.addToIndexes(namedNode, this.children_);\n }\n newPriority = newChildren.isEmpty() ? EMPTY_NODE : this.priorityNode_;\n return new ChildrenNode(newChildren, newPriority, newIndexMap);\n }\n };\n /** @inheritDoc */\n ChildrenNode.prototype.updateChild = function (path, newChildNode) {\n var front = path.getFront();\n if (front === null) {\n return newChildNode;\n }\n else {\n util_1.assert(path.getFront() !== '.priority' || path.getLength() === 1, '.priority must be the last token in a path');\n var newImmediateChild = this.getImmediateChild(front).updateChild(path.popFront(), newChildNode);\n return this.updateImmediateChild(front, newImmediateChild);\n }\n };\n /** @inheritDoc */\n ChildrenNode.prototype.isEmpty = function () {\n return this.children_.isEmpty();\n };\n /** @inheritDoc */\n ChildrenNode.prototype.numChildren = function () {\n return this.children_.count();\n };\n /** @inheritDoc */\n ChildrenNode.prototype.val = function (exportFormat) {\n if (this.isEmpty())\n return null;\n var obj = {};\n var numKeys = 0, maxKey = 0, allIntegerKeys = true;\n this.forEachChild(PriorityIndex_1.PRIORITY_INDEX, function (key, childNode) {\n obj[key] = childNode.val(exportFormat);\n numKeys++;\n if (allIntegerKeys && ChildrenNode.INTEGER_REGEXP_.test(key)) {\n maxKey = Math.max(maxKey, Number(key));\n }\n else {\n allIntegerKeys = false;\n }\n });\n if (!exportFormat && allIntegerKeys && maxKey < 2 * numKeys) {\n // convert to array.\n var array = [];\n for (var key in obj)\n array[key] = obj[key];\n return array;\n }\n else {\n if (exportFormat && !this.getPriority().isEmpty()) {\n obj['.priority'] = this.getPriority().val();\n }\n return obj;\n }\n };\n /** @inheritDoc */\n ChildrenNode.prototype.hash = function () {\n if (this.lazyHash_ === null) {\n var toHash_1 = '';\n if (!this.getPriority().isEmpty())\n toHash_1 +=\n 'priority:' +\n snap_1.priorityHashText(this.getPriority().val()) +\n ':';\n this.forEachChild(PriorityIndex_1.PRIORITY_INDEX, function (key, childNode) {\n var childHash = childNode.hash();\n if (childHash !== '')\n toHash_1 += ':' + key + ':' + childHash;\n });\n this.lazyHash_ = toHash_1 === '' ? '' : util_2.sha1(toHash_1);\n }\n return this.lazyHash_;\n };\n /** @inheritDoc */\n ChildrenNode.prototype.getPredecessorChildName = function (childName, childNode, index) {\n var idx = this.resolveIndex_(index);\n if (idx) {\n var predecessor = idx.getPredecessorKey(new Node_1.NamedNode(childName, childNode));\n return predecessor ? predecessor.name : null;\n }\n else {\n return this.children_.getPredecessorKey(childName);\n }\n };\n /**\n * @param {!Index} indexDefinition\n * @return {?string}\n */\n ChildrenNode.prototype.getFirstChildName = function (indexDefinition) {\n var idx = this.resolveIndex_(indexDefinition);\n if (idx) {\n var minKey = idx.minKey();\n return minKey && minKey.name;\n }\n else {\n return this.children_.minKey();\n }\n };\n /**\n * @param {!Index} indexDefinition\n * @return {?NamedNode}\n */\n ChildrenNode.prototype.getFirstChild = function (indexDefinition) {\n var minKey = this.getFirstChildName(indexDefinition);\n if (minKey) {\n return new Node_1.NamedNode(minKey, this.children_.get(minKey));\n }\n else {\n return null;\n }\n };\n /**\n * Given an index, return the key name of the largest value we have, according to that index\n * @param {!Index} indexDefinition\n * @return {?string}\n */\n ChildrenNode.prototype.getLastChildName = function (indexDefinition) {\n var idx = this.resolveIndex_(indexDefinition);\n if (idx) {\n var maxKey = idx.maxKey();\n return maxKey && maxKey.name;\n }\n else {\n return this.children_.maxKey();\n }\n };\n /**\n * @param {!Index} indexDefinition\n * @return {?NamedNode}\n */\n ChildrenNode.prototype.getLastChild = function (indexDefinition) {\n var maxKey = this.getLastChildName(indexDefinition);\n if (maxKey) {\n return new Node_1.NamedNode(maxKey, this.children_.get(maxKey));\n }\n else {\n return null;\n }\n };\n /**\n * @inheritDoc\n */\n ChildrenNode.prototype.forEachChild = function (index, action) {\n var idx = this.resolveIndex_(index);\n if (idx) {\n return idx.inorderTraversal(function (wrappedNode) {\n return action(wrappedNode.name, wrappedNode.node);\n });\n }\n else {\n return this.children_.inorderTraversal(action);\n }\n };\n /**\n * @param {!Index} indexDefinition\n * @return {SortedMapIterator}\n */\n ChildrenNode.prototype.getIterator = function (indexDefinition) {\n return this.getIteratorFrom(indexDefinition.minPost(), indexDefinition);\n };\n /**\n *\n * @param {!NamedNode} startPost\n * @param {!Index} indexDefinition\n * @return {!SortedMapIterator}\n */\n ChildrenNode.prototype.getIteratorFrom = function (startPost, indexDefinition) {\n var idx = this.resolveIndex_(indexDefinition);\n if (idx) {\n return idx.getIteratorFrom(startPost, function (key) { return key; });\n }\n else {\n var iterator = this.children_.getIteratorFrom(startPost.name, Node_1.NamedNode.Wrap);\n var next = iterator.peek();\n while (next != null && indexDefinition.compare(next, startPost) < 0) {\n iterator.getNext();\n next = iterator.peek();\n }\n return iterator;\n }\n };\n /**\n * @param {!Index} indexDefinition\n * @return {!SortedMapIterator}\n */\n ChildrenNode.prototype.getReverseIterator = function (indexDefinition) {\n return this.getReverseIteratorFrom(indexDefinition.maxPost(), indexDefinition);\n };\n /**\n * @param {!NamedNode} endPost\n * @param {!Index} indexDefinition\n * @return {!SortedMapIterator}\n */\n ChildrenNode.prototype.getReverseIteratorFrom = function (endPost, indexDefinition) {\n var idx = this.resolveIndex_(indexDefinition);\n if (idx) {\n return idx.getReverseIteratorFrom(endPost, function (key) {\n return key;\n });\n }\n else {\n var iterator = this.children_.getReverseIteratorFrom(endPost.name, Node_1.NamedNode.Wrap);\n var next = iterator.peek();\n while (next != null && indexDefinition.compare(next, endPost) > 0) {\n iterator.getNext();\n next = iterator.peek();\n }\n return iterator;\n }\n };\n /**\n * @inheritDoc\n */\n ChildrenNode.prototype.compareTo = function (other) {\n if (this.isEmpty()) {\n if (other.isEmpty()) {\n return 0;\n }\n else {\n return -1;\n }\n }\n else if (other.isLeafNode() || other.isEmpty()) {\n return 1;\n }\n else if (other === exports.MAX_NODE) {\n return -1;\n }\n else {\n // Must be another node with children.\n return 0;\n }\n };\n /**\n * @inheritDoc\n */\n ChildrenNode.prototype.withIndex = function (indexDefinition) {\n if (indexDefinition === KeyIndex_1.KEY_INDEX ||\n this.indexMap_.hasIndex(indexDefinition)) {\n return this;\n }\n else {\n var newIndexMap = this.indexMap_.addIndex(indexDefinition, this.children_);\n return new ChildrenNode(this.children_, this.priorityNode_, newIndexMap);\n }\n };\n /**\n * @inheritDoc\n */\n ChildrenNode.prototype.isIndexed = function (index) {\n return index === KeyIndex_1.KEY_INDEX || this.indexMap_.hasIndex(index);\n };\n /**\n * @inheritDoc\n */\n ChildrenNode.prototype.equals = function (other) {\n if (other === this) {\n return true;\n }\n else if (other.isLeafNode()) {\n return false;\n }\n else {\n var otherChildrenNode = other;\n if (!this.getPriority().equals(otherChildrenNode.getPriority())) {\n return false;\n }\n else if (this.children_.count() === otherChildrenNode.children_.count()) {\n var thisIter = this.getIterator(PriorityIndex_1.PRIORITY_INDEX);\n var otherIter = otherChildrenNode.getIterator(PriorityIndex_1.PRIORITY_INDEX);\n var thisCurrent = thisIter.getNext();\n var otherCurrent = otherIter.getNext();\n while (thisCurrent && otherCurrent) {\n if (thisCurrent.name !== otherCurrent.name ||\n !thisCurrent.node.equals(otherCurrent.node)) {\n return false;\n }\n thisCurrent = thisIter.getNext();\n otherCurrent = otherIter.getNext();\n }\n return thisCurrent === null && otherCurrent === null;\n }\n else {\n return false;\n }\n }\n };\n /**\n * Returns a SortedMap ordered by index, or null if the default (by-key) ordering can be used\n * instead.\n *\n * @private\n * @param {!Index} indexDefinition\n * @return {?SortedMap.}\n */\n ChildrenNode.prototype.resolveIndex_ = function (indexDefinition) {\n if (indexDefinition === KeyIndex_1.KEY_INDEX) {\n return null;\n }\n else {\n return this.indexMap_.get(indexDefinition.toString());\n }\n };\n /**\n * @private\n * @type {RegExp}\n */\n ChildrenNode.INTEGER_REGEXP_ = /^(0|[1-9]\\d*)$/;\n return ChildrenNode;\n}());\nexports.ChildrenNode = ChildrenNode;\n/**\n * @constructor\n * @extends {ChildrenNode}\n * @private\n */\nvar MaxNode = /** @class */ (function (_super) {\n __extends(MaxNode, _super);\n function MaxNode() {\n return _super.call(this, new SortedMap_1.SortedMap(comparators_1.NAME_COMPARATOR), ChildrenNode.EMPTY_NODE, IndexMap_1.IndexMap.Default) || this;\n }\n MaxNode.prototype.compareTo = function (other) {\n if (other === this) {\n return 0;\n }\n else {\n return 1;\n }\n };\n MaxNode.prototype.equals = function (other) {\n // Not that we every compare it, but MAX_NODE is only ever equal to itself\n return other === this;\n };\n MaxNode.prototype.getPriority = function () {\n return this;\n };\n MaxNode.prototype.getImmediateChild = function (childName) {\n return ChildrenNode.EMPTY_NODE;\n };\n MaxNode.prototype.isEmpty = function () {\n return false;\n };\n return MaxNode;\n}(ChildrenNode));\nexports.MaxNode = MaxNode;\n/**\n * Marker that will sort higher than any other snapshot.\n * @type {!MAX_NODE}\n * @const\n */\nexports.MAX_NODE = new MaxNode();\nObject.defineProperties(Node_1.NamedNode, {\n MIN: {\n value: new Node_1.NamedNode(util_2.MIN_NAME, ChildrenNode.EMPTY_NODE)\n },\n MAX: {\n value: new Node_1.NamedNode(util_2.MAX_NAME, exports.MAX_NODE)\n }\n});\n/**\n * Reference Extensions\n */\nKeyIndex_1.KeyIndex.__EMPTY_NODE = ChildrenNode.EMPTY_NODE;\nLeafNode_1.LeafNode.__childrenNodeConstructor = ChildrenNode;\nsnap_1.setMaxNode(exports.MAX_NODE);\nPriorityIndex_1.setMaxNode(exports.MAX_NODE);\n\n//# sourceMappingURL=ChildrenNode.js.map\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n *\n * @param {!string} name\n * @param {!Node} node\n * @constructor\n * @struct\n */\nvar NamedNode = /** @class */ (function () {\n function NamedNode(name, node) {\n this.name = name;\n this.node = node;\n }\n /**\n *\n * @param {!string} name\n * @param {!Node} node\n * @return {NamedNode}\n */\n NamedNode.Wrap = function (name, node) {\n return new NamedNode(name, node);\n };\n return NamedNode;\n}());\nexports.NamedNode = NamedNode;\n\n//# sourceMappingURL=Node.js.map\n","import * as firebase from 'firebase';\nrequire(\"firebase/firestore\");\nrequire(\"firebase/auth\");\nwindow.firebase = firebase;\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nrequire('@firebase/polyfill');\nmodule.exports = require('@firebase/app').default;\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport './src/polyfills/promise';\nimport './src/shims/find';\nimport './src/shims/findIndex';\n\n//# sourceMappingURL=index.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __global = (function () {\n if (typeof global !== 'undefined') {\n return global;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n throw new Error('unable to locate global object');\n})();\n// Polyfill Promise\nif (typeof Promise === 'undefined') {\n // HACK: TS throws an error if I attempt to use 'dot-notation'\n __global['Promise'] = Promise = require('promise-polyfill');\n}\n\n//# sourceMappingURL=promise.js.map\n","(function (root) {\n\n // Store setTimeout reference so promise-polyfill will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var setTimeoutFunc = setTimeout;\n\n function noop() {}\n \n // Polyfill for Function.prototype.bind\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n\n function Promise(fn) {\n if (!(this instanceof Promise)) throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n\n doResolve(fn, this);\n }\n\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n\n function resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n\n /**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done) return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n }\n\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n };\n\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new (this.constructor)(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n\n Promise.all = function (arr) {\n return new Promise(function (resolve, reject) {\n if (!arr || typeof arr.length === 'undefined') throw new TypeError('Promise.all accepts an array');\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n\n // Use polyfill for setImmediate for performance gains\n Promise._immediateFn = (typeof setImmediate === 'function' && function (fn) { setImmediate(fn); }) ||\n function (fn) {\n setTimeoutFunc(fn, 0);\n };\n\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n };\n\n /**\n * Set the immediate function to execute callbacks\n * @param fn {function} Function to execute\n * @deprecated\n */\n Promise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n };\n\n /**\n * Change the function to execute on unhandled rejection\n * @param {function} fn Function to execute on unhandled rejection\n * @deprecated\n */\n Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n };\n \n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Promise;\n } else if (!root.Promise) {\n root.Promise = Promise;\n }\n\n})(this);\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * This is the Array.prototype.find polyfill from MDN\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * https://tc39.github.io/ecma262/#sec-array.prototype.find\n */\nif (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, 'find', {\n value: function (predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n var o = Object(this);\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n var thisArg = arguments[1];\n // 5. Let k be 0.\n var k = 0;\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n // d. If testResult is true, return kValue.\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return kValue;\n }\n // e. Increase k by 1.\n k++;\n }\n // 7. Return undefined.\n return undefined;\n }\n });\n}\n\n//# sourceMappingURL=find.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * This is the Array.prototype.findIndex polyfill from MDN\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex\n * https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n */\nif (!Array.prototype.findIndex) {\n Object.defineProperty(Array.prototype, 'findIndex', {\n value: function (predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n var o = Object(this);\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n var thisArg = arguments[1];\n // 5. Let k be 0.\n var k = 0;\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n // d. If testResult is true, return k.\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return k;\n }\n // e. Increase k by 1.\n k++;\n }\n // 7. Return -1.\n return -1;\n }\n });\n}\n\n//# sourceMappingURL=findIndex.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Do a deep-copy of basic JavaScript Objects or Arrays.\n */\nfunction deepCopy(value) {\n return deepExtend(undefined, value);\n}\nexports.deepCopy = deepCopy;\n/**\n * Copy properties from source to target (recursively allows extension\n * of Objects and Arrays). Scalar values in the target are over-written.\n * If target is undefined, an object of the appropriate type will be created\n * (and returned).\n *\n * We recursively copy all child properties of plain Objects in the source- so\n * that namespace- like dictionaries are merged.\n *\n * Note that the target can be a function, in which case the properties in\n * the source Object are copied onto it as static properties of the Function.\n */\nfunction deepExtend(target, source) {\n if (!(source instanceof Object)) {\n return source;\n }\n switch (source.constructor) {\n case Date:\n // Treat Dates like scalars; if the target date object had any child\n // properties - they will be lost!\n var dateValue = source;\n return new Date(dateValue.getTime());\n case Object:\n if (target === undefined) {\n target = {};\n }\n break;\n case Array:\n // Always copy the array source and overwrite the target.\n target = [];\n break;\n default:\n // Not a plain Object - treat it as a scalar.\n return source;\n }\n for (var prop in source) {\n if (!source.hasOwnProperty(prop)) {\n continue;\n }\n target[prop] = deepExtend(target[prop], source[prop]);\n }\n return target;\n}\nexports.deepExtend = deepExtend;\n// TODO: Really needed (for JSCompiler type checking)?\nfunction patchProperty(obj, prop, value) {\n obj[prop] = value;\n}\nexports.patchProperty = patchProperty;\n\n//# sourceMappingURL=deepCopy.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n }\n /**\n * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\n * @param {((?function(?(Error)): (?|undefined))| (?function(?(Error),?=): (?|undefined)))=} callback\n * @return {!function(?(Error), ?=)}\n */\n Deferred.prototype.wrapCallback = function (callback) {\n var _this = this;\n return function (error, value) {\n if (error) {\n _this.reject(error);\n }\n else {\n _this.resolve(value);\n }\n if (typeof callback === 'function') {\n // Attaching noop handler just in case developer wasn't expecting\n // promises\n _this.promise.catch(function () { });\n // Some of our callbacks don't expect a value and our own tests\n // assert that the parameter length is 1\n if (callback.length === 1) {\n callback(error);\n }\n else {\n callback(error, value);\n }\n }\n };\n };\n return Deferred;\n}());\nexports.Deferred = Deferred;\n\n//# sourceMappingURL=deferred.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar constants_1 = require(\"./constants\");\n/**\n * Returns navigator.userAgent string or '' if it's not defined.\n * @return {string} user agent string\n */\nexports.getUA = function () {\n if (typeof navigator !== 'undefined' &&\n typeof navigator['userAgent'] === 'string') {\n return navigator['userAgent'];\n }\n else {\n return '';\n }\n};\n/**\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\n *\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap in the Ripple emulator) nor\n * Cordova `onDeviceReady`, which would normally wait for a callback.\n *\n * @return {boolean} isMobileCordova\n */\nexports.isMobileCordova = function () {\n return (typeof window !== 'undefined' &&\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(exports.getUA()));\n};\n/**\n * Detect React Native.\n *\n * @return {boolean} True if ReactNative environment is detected.\n */\nexports.isReactNative = function () {\n return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\n};\n/**\n * Detect Node.js.\n *\n * @return {boolean} True if Node.js environment is detected.\n */\nexports.isNodeSdk = function () {\n return constants_1.CONSTANTS.NODE_CLIENT === true || constants_1.CONSTANTS.NODE_ADMIN === true;\n};\n\n//# sourceMappingURL=environment.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ERROR_NAME = 'FirebaseError';\nvar captureStackTrace = Error\n .captureStackTrace;\n// Export for faking in tests\nfunction patchCapture(captureFake) {\n var result = captureStackTrace;\n captureStackTrace = captureFake;\n return result;\n}\nexports.patchCapture = patchCapture;\nvar FirebaseError = /** @class */ (function () {\n function FirebaseError(code, message) {\n this.code = code;\n this.message = message;\n var stack;\n // We want the stack value, if implemented by Error\n if (captureStackTrace) {\n // Patches this.stack, omitted calls above ErrorFactory#create\n captureStackTrace(this, ErrorFactory.prototype.create);\n }\n else {\n var err_1 = Error.apply(this, arguments);\n this.name = ERROR_NAME;\n // Make non-enumerable getter for the property.\n Object.defineProperty(this, 'stack', {\n get: function () {\n return err_1.stack;\n }\n });\n }\n }\n return FirebaseError;\n}());\nexports.FirebaseError = FirebaseError;\n// Back-door inheritance\nFirebaseError.prototype = Object.create(Error.prototype);\nFirebaseError.prototype.constructor = FirebaseError;\nFirebaseError.prototype.name = ERROR_NAME;\nvar ErrorFactory = /** @class */ (function () {\n function ErrorFactory(service, serviceName, errors) {\n this.service = service;\n this.serviceName = serviceName;\n this.errors = errors;\n // Matches {$name}, by default.\n this.pattern = /\\{\\$([^}]+)}/g;\n // empty\n }\n ErrorFactory.prototype.create = function (code, data) {\n if (data === undefined) {\n data = {};\n }\n var template = this.errors[code];\n var fullCode = this.service + '/' + code;\n var message;\n if (template === undefined) {\n message = 'Error';\n }\n else {\n message = template.replace(this.pattern, function (match, key) {\n var value = data[key];\n return value !== undefined ? value.toString() : '<' + key + '?>';\n });\n }\n // Service: Error message (service/code).\n message = this.serviceName + ': ' + message + ' (' + fullCode + ').';\n var err = new FirebaseError(fullCode, message);\n // Populate the Error object with message parts for programmatic\n // accesses (e.g., e.file).\n for (var prop in data) {\n if (!data.hasOwnProperty(prop) || prop.slice(-1) === '_') {\n continue;\n }\n err[prop] = data[prop];\n }\n return err;\n };\n return ErrorFactory;\n}());\nexports.ErrorFactory = ErrorFactory;\n\n//# sourceMappingURL=errors.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar crypt_1 = require(\"./crypt\");\nvar json_1 = require(\"./json\");\n/**\n * Decodes a Firebase auth. token into constituent parts.\n *\n * Notes:\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n *\n * @param {?string} token\n * @return {{header: *, claims: *, data: *, signature: string}}\n */\nexports.decode = function (token) {\n var header = {}, claims = {}, data = {}, signature = '';\n try {\n var parts = token.split('.');\n header = json_1.jsonEval(crypt_1.base64Decode(parts[0]) || '');\n claims = json_1.jsonEval(crypt_1.base64Decode(parts[1]) || '');\n signature = parts[2];\n data = claims['d'] || {};\n delete claims['d'];\n }\n catch (e) { }\n return {\n header: header,\n claims: claims,\n data: data,\n signature: signature\n };\n};\n/**\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n *\n * @param {?string} token\n * @return {boolean}\n */\nexports.isValidTimestamp = function (token) {\n var claims = exports.decode(token).claims, now = Math.floor(new Date().getTime() / 1000), validSince, validUntil;\n if (typeof claims === 'object') {\n if (claims.hasOwnProperty('nbf')) {\n validSince = claims['nbf'];\n }\n else if (claims.hasOwnProperty('iat')) {\n validSince = claims['iat'];\n }\n if (claims.hasOwnProperty('exp')) {\n validUntil = claims['exp'];\n }\n else {\n // token will expire after 24h by default\n validUntil = validSince + 86400;\n }\n }\n return (now && validSince && validUntil && now >= validSince && now <= validUntil);\n};\n/**\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\n *\n * Notes:\n * - May return null if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n *\n * @param {?string} token\n * @return {?number}\n */\nexports.issuedAtTime = function (token) {\n var claims = exports.decode(token).claims;\n if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\n return claims['iat'];\n }\n return null;\n};\n/**\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time and non-empty\n * signature.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n *\n * @param {?string} token\n * @return {boolean}\n */\nexports.isValidFormat = function (token) {\n var decoded = exports.decode(token), claims = decoded.claims;\n return (!!decoded.signature &&\n !!claims &&\n typeof claims === 'object' &&\n claims.hasOwnProperty('iat'));\n};\n/**\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n *\n * @param {?string} token\n * @return {boolean}\n */\nexports.isAdmin = function (token) {\n var claims = exports.decode(token).claims;\n return typeof claims === 'object' && claims['admin'] === true;\n};\n\n//# sourceMappingURL=jwt.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar obj_1 = require(\"./obj\");\n/**\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a params\n * object (e.g. {arg: 'val', arg2: 'val2'})\n * Note: You must prepend it with ? when adding it to a URL.\n *\n * @param {!Object} querystringParams\n * @return {string}\n */\nexports.querystring = function (querystringParams) {\n var params = [];\n obj_1.forEach(querystringParams, function (key, value) {\n if (Array.isArray(value)) {\n value.forEach(function (arrayVal) {\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\n });\n }\n else {\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n }\n });\n return params.length ? '&' + params.join('&') : '';\n};\n/**\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object (e.g. {arg: 'val', arg2: 'val2'})\n *\n * @param {string} querystring\n * @return {!Object}\n */\nexports.querystringDecode = function (querystring) {\n var obj = {};\n var tokens = querystring.replace(/^\\?/, '').split('&');\n tokens.forEach(function (token) {\n if (token) {\n var key = token.split('=');\n obj[key[0]] = key[1];\n }\n });\n return obj;\n};\n\n//# sourceMappingURL=query.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar hash_1 = require(\"./hash\");\n/**\n * @fileoverview SHA-1 cryptographic hash.\n * Variable names follow the notation in FIPS PUB 180-3:\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\n *\n * Usage:\n * var sha1 = new sha1();\n * sha1.update(bytes);\n * var hash = sha1.digest();\n *\n * Performance:\n * Chrome 23: ~400 Mbit/s\n * Firefox 16: ~250 Mbit/s\n *\n */\n/**\n * SHA-1 cryptographic hash constructor.\n *\n * The properties declared here are discussed in the above algorithm document.\n * @constructor\n * @extends {Hash}\n * @final\n * @struct\n */\nvar Sha1 = /** @class */ (function (_super) {\n __extends(Sha1, _super);\n function Sha1() {\n var _this = _super.call(this) || this;\n /**\n * Holds the previous values of accumulated variables a-e in the compress_\n * function.\n * @type {!Array}\n * @private\n */\n _this.chain_ = [];\n /**\n * A buffer holding the partially computed hash result.\n * @type {!Array}\n * @private\n */\n _this.buf_ = [];\n /**\n * An array of 80 bytes, each a part of the message to be hashed. Referred to\n * as the message schedule in the docs.\n * @type {!Array}\n * @private\n */\n _this.W_ = [];\n /**\n * Contains data needed to pad messages less than 64 bytes.\n * @type {!Array}\n * @private\n */\n _this.pad_ = [];\n /**\n * @private {number}\n */\n _this.inbuf_ = 0;\n /**\n * @private {number}\n */\n _this.total_ = 0;\n _this.blockSize = 512 / 8;\n _this.pad_[0] = 128;\n for (var i = 1; i < _this.blockSize; ++i) {\n _this.pad_[i] = 0;\n }\n _this.reset();\n return _this;\n }\n Sha1.prototype.reset = function () {\n this.chain_[0] = 0x67452301;\n this.chain_[1] = 0xefcdab89;\n this.chain_[2] = 0x98badcfe;\n this.chain_[3] = 0x10325476;\n this.chain_[4] = 0xc3d2e1f0;\n this.inbuf_ = 0;\n this.total_ = 0;\n };\n /**\n * Internal compress helper function.\n * @param {!Array|!Uint8Array|string} buf Block to compress.\n * @param {number=} opt_offset Offset of the block in the buffer.\n * @private\n */\n Sha1.prototype.compress_ = function (buf, opt_offset) {\n if (!opt_offset) {\n opt_offset = 0;\n }\n var W = this.W_;\n // get 16 big endian words\n if (typeof buf === 'string') {\n for (var i = 0; i < 16; i++) {\n // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\n // have a bug that turns the post-increment ++ operator into pre-increment\n // during JIT compilation. We have code that depends heavily on SHA-1 for\n // correctness and which is affected by this bug, so I've removed all uses\n // of post-increment ++ in which the result value is used. We can revert\n // this change once the Safari bug\n // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\n // most clients have been updated.\n W[i] =\n (buf.charCodeAt(opt_offset) << 24) |\n (buf.charCodeAt(opt_offset + 1) << 16) |\n (buf.charCodeAt(opt_offset + 2) << 8) |\n buf.charCodeAt(opt_offset + 3);\n opt_offset += 4;\n }\n }\n else {\n for (var i = 0; i < 16; i++) {\n W[i] =\n (buf[opt_offset] << 24) |\n (buf[opt_offset + 1] << 16) |\n (buf[opt_offset + 2] << 8) |\n buf[opt_offset + 3];\n opt_offset += 4;\n }\n }\n // expand to 80 words\n for (var i = 16; i < 80; i++) {\n var t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\n }\n var a = this.chain_[0];\n var b = this.chain_[1];\n var c = this.chain_[2];\n var d = this.chain_[3];\n var e = this.chain_[4];\n var f, k;\n // TODO(user): Try to unroll this loop to speed up the computation.\n for (var i = 0; i < 80; i++) {\n if (i < 40) {\n if (i < 20) {\n f = d ^ (b & (c ^ d));\n k = 0x5a827999;\n }\n else {\n f = b ^ c ^ d;\n k = 0x6ed9eba1;\n }\n }\n else {\n if (i < 60) {\n f = (b & c) | (d & (b | c));\n k = 0x8f1bbcdc;\n }\n else {\n f = b ^ c ^ d;\n k = 0xca62c1d6;\n }\n }\n var t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\n e = d;\n d = c;\n c = ((b << 30) | (b >>> 2)) & 0xffffffff;\n b = a;\n a = t;\n }\n this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\n this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\n this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\n this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\n this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\n };\n Sha1.prototype.update = function (bytes, opt_length) {\n // TODO(johnlenz): tighten the function signature and remove this check\n if (bytes == null) {\n return;\n }\n if (opt_length === undefined) {\n opt_length = bytes.length;\n }\n var lengthMinusBlock = opt_length - this.blockSize;\n var n = 0;\n // Using local instead of member variables gives ~5% speedup on Firefox 16.\n var buf = this.buf_;\n var inbuf = this.inbuf_;\n // The outer while loop should execute at most twice.\n while (n < opt_length) {\n // When we have no data in the block to top up, we can directly process the\n // input buffer (assuming it contains sufficient data). This gives ~25%\n // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\n // the data is provided in large chunks (or in multiples of 64 bytes).\n if (inbuf == 0) {\n while (n <= lengthMinusBlock) {\n this.compress_(bytes, n);\n n += this.blockSize;\n }\n }\n if (typeof bytes === 'string') {\n while (n < opt_length) {\n buf[inbuf] = bytes.charCodeAt(n);\n ++inbuf;\n ++n;\n if (inbuf == this.blockSize) {\n this.compress_(buf);\n inbuf = 0;\n // Jump to the outer loop so we use the full-block optimization.\n break;\n }\n }\n }\n else {\n while (n < opt_length) {\n buf[inbuf] = bytes[n];\n ++inbuf;\n ++n;\n if (inbuf == this.blockSize) {\n this.compress_(buf);\n inbuf = 0;\n // Jump to the outer loop so we use the full-block optimization.\n break;\n }\n }\n }\n }\n this.inbuf_ = inbuf;\n this.total_ += opt_length;\n };\n /** @override */\n Sha1.prototype.digest = function () {\n var digest = [];\n var totalBits = this.total_ * 8;\n // Add pad 0x80 0x00*.\n if (this.inbuf_ < 56) {\n this.update(this.pad_, 56 - this.inbuf_);\n }\n else {\n this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\n }\n // Add # bits.\n for (var i = this.blockSize - 1; i >= 56; i--) {\n this.buf_[i] = totalBits & 255;\n totalBits /= 256; // Don't use bit-shifting here!\n }\n this.compress_(this.buf_);\n var n = 0;\n for (var i = 0; i < 5; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n digest[n] = (this.chain_[i] >> j) & 255;\n ++n;\n }\n }\n return digest;\n };\n return Sha1;\n}(hash_1.Hash));\nexports.Sha1 = Sha1;\n\n//# sourceMappingURL=sha1.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Copyright 2011 The Closure Library Authors. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS-IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * @fileoverview Abstract cryptographic hash interface.\n *\n * See Sha1 and Md5 for sample implementations.\n *\n */\n/**\n * Create a cryptographic hash instance.\n *\n * @constructor\n * @struct\n */\nvar Hash = /** @class */ (function () {\n function Hash() {\n /**\n * The block size for the hasher.\n * @type {number}\n */\n this.blockSize = -1;\n }\n return Hash;\n}());\nexports.Hash = Hash;\n\n//# sourceMappingURL=hash.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Helper to make a Subscribe function (just like Promise helps make a\n * Thenable).\n *\n * @param executor Function which can make calls to a single Observer\n * as a proxy.\n * @param onNoObservers Callback when count of Observers goes to zero.\n */\nfunction createSubscribe(executor, onNoObservers) {\n var proxy = new ObserverProxy(executor, onNoObservers);\n return proxy.subscribe.bind(proxy);\n}\nexports.createSubscribe = createSubscribe;\n/**\n * Implement fan-out for any number of Observers attached via a subscribe\n * function.\n */\nvar ObserverProxy = /** @class */ (function () {\n /**\n * @param executor Function which can make calls to a single Observer\n * as a proxy.\n * @param onNoObservers Callback when count of Observers goes to zero.\n */\n function ObserverProxy(executor, onNoObservers) {\n var _this = this;\n this.observers = [];\n this.unsubscribes = [];\n this.observerCount = 0;\n // Micro-task scheduling by calling task.then().\n this.task = Promise.resolve();\n this.finalized = false;\n this.onNoObservers = onNoObservers;\n // Call the executor asynchronously so subscribers that are called\n // synchronously after the creation of the subscribe function\n // can still receive the very first value generated in the executor.\n this.task\n .then(function () {\n executor(_this);\n })\n .catch(function (e) {\n _this.error(e);\n });\n }\n ObserverProxy.prototype.next = function (value) {\n this.forEachObserver(function (observer) {\n observer.next(value);\n });\n };\n ObserverProxy.prototype.error = function (error) {\n this.forEachObserver(function (observer) {\n observer.error(error);\n });\n this.close(error);\n };\n ObserverProxy.prototype.complete = function () {\n this.forEachObserver(function (observer) {\n observer.complete();\n });\n this.close();\n };\n /**\n * Subscribe function that can be used to add an Observer to the fan-out list.\n *\n * - We require that no event is sent to a subscriber sychronously to their\n * call to subscribe().\n */\n ObserverProxy.prototype.subscribe = function (nextOrObserver, error, complete) {\n var _this = this;\n var observer;\n if (nextOrObserver === undefined &&\n error === undefined &&\n complete === undefined) {\n throw new Error('Missing Observer.');\n }\n // Assemble an Observer object when passed as callback functions.\n if (implementsAnyMethods(nextOrObserver, ['next', 'error', 'complete'])) {\n observer = nextOrObserver;\n }\n else {\n observer = {\n next: nextOrObserver,\n error: error,\n complete: complete\n };\n }\n if (observer.next === undefined) {\n observer.next = noop;\n }\n if (observer.error === undefined) {\n observer.error = noop;\n }\n if (observer.complete === undefined) {\n observer.complete = noop;\n }\n var unsub = this.unsubscribeOne.bind(this, this.observers.length);\n // Attempt to subscribe to a terminated Observable - we\n // just respond to the Observer with the final error or complete\n // event.\n if (this.finalized) {\n this.task.then(function () {\n try {\n if (_this.finalError) {\n observer.error(_this.finalError);\n }\n else {\n observer.complete();\n }\n }\n catch (e) {\n // nothing\n }\n return;\n });\n }\n this.observers.push(observer);\n return unsub;\n };\n // Unsubscribe is synchronous - we guarantee that no events are sent to\n // any unsubscribed Observer.\n ObserverProxy.prototype.unsubscribeOne = function (i) {\n if (this.observers === undefined || this.observers[i] === undefined) {\n return;\n }\n delete this.observers[i];\n this.observerCount -= 1;\n if (this.observerCount === 0 && this.onNoObservers !== undefined) {\n this.onNoObservers(this);\n }\n };\n ObserverProxy.prototype.forEachObserver = function (fn) {\n if (this.finalized) {\n // Already closed by previous event....just eat the additional values.\n return;\n }\n // Since sendOne calls asynchronously - there is no chance that\n // this.observers will become undefined.\n for (var i = 0; i < this.observers.length; i++) {\n this.sendOne(i, fn);\n }\n };\n // Call the Observer via one of it's callback function. We are careful to\n // confirm that the observe has not been unsubscribed since this asynchronous\n // function had been queued.\n ObserverProxy.prototype.sendOne = function (i, fn) {\n var _this = this;\n // Execute the callback asynchronously\n this.task.then(function () {\n if (_this.observers !== undefined && _this.observers[i] !== undefined) {\n try {\n fn(_this.observers[i]);\n }\n catch (e) {\n // Ignore exceptions raised in Observers or missing methods of an\n // Observer.\n // Log error to console. b/31404806\n if (typeof console !== 'undefined' && console.error) {\n console.error(e);\n }\n }\n }\n });\n };\n ObserverProxy.prototype.close = function (err) {\n var _this = this;\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n if (err !== undefined) {\n this.finalError = err;\n }\n // Proxy is no longer needed - garbage collect references\n this.task.then(function () {\n _this.observers = undefined;\n _this.onNoObservers = undefined;\n });\n };\n return ObserverProxy;\n}());\n/** Turn synchronous function into one called asynchronously. */\nfunction async(fn, onError) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n Promise.resolve(true)\n .then(function () {\n fn.apply(void 0, args);\n })\n .catch(function (error) {\n if (onError) {\n onError(error);\n }\n });\n };\n}\nexports.async = async;\n/**\n * Return true if the object passed in implements any of the named methods.\n */\nfunction implementsAnyMethods(obj, methods) {\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n for (var _i = 0, methods_1 = methods; _i < methods_1.length; _i++) {\n var method = methods_1[_i];\n if (method in obj && typeof obj[method] === 'function') {\n return true;\n }\n }\n return false;\n}\nfunction noop() {\n // do nothing\n}\n\n//# sourceMappingURL=subscribe.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Check to make sure the appropriate number of arguments are provided for a public function.\n * Throws an error if it fails.\n *\n * @param {!string} fnName The function name\n * @param {!number} minCount The minimum number of arguments to allow for the function call\n * @param {!number} maxCount The maximum number of argument to allow for the function call\n * @param {!number} argCount The actual number of arguments provided.\n */\nexports.validateArgCount = function (fnName, minCount, maxCount, argCount) {\n var argError;\n if (argCount < minCount) {\n argError = 'at least ' + minCount;\n }\n else if (argCount > maxCount) {\n argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\n }\n if (argError) {\n var error = fnName +\n ' failed: Was called with ' +\n argCount +\n (argCount === 1 ? ' argument.' : ' arguments.') +\n ' Expects ' +\n argError +\n '.';\n throw new Error(error);\n }\n};\n/**\n * Generates a string to prefix an error message about failed argument validation\n *\n * @param {!string} fnName The function name\n * @param {!number} argumentNumber The index of the argument\n * @param {boolean} optional Whether or not the argument is optional\n * @return {!string} The prefix to add to the error thrown for validation.\n */\nfunction errorPrefix(fnName, argumentNumber, optional) {\n var argName = '';\n switch (argumentNumber) {\n case 1:\n argName = optional ? 'first' : 'First';\n break;\n case 2:\n argName = optional ? 'second' : 'Second';\n break;\n case 3:\n argName = optional ? 'third' : 'Third';\n break;\n case 4:\n argName = optional ? 'fourth' : 'Fourth';\n break;\n default:\n throw new Error('errorPrefix called with argumentNumber > 4. Need to update it?');\n }\n var error = fnName + ' failed: ';\n error += argName + ' argument ';\n return error;\n}\nexports.errorPrefix = errorPrefix;\n/**\n * @param {!string} fnName\n * @param {!number} argumentNumber\n * @param {!string} namespace\n * @param {boolean} optional\n */\nfunction validateNamespace(fnName, argumentNumber, namespace, optional) {\n if (optional && !namespace)\n return;\n if (typeof namespace !== 'string') {\n //TODO: I should do more validation here. We only allow certain chars in namespaces.\n throw new Error(errorPrefix(fnName, argumentNumber, optional) +\n 'must be a valid firebase namespace.');\n }\n}\nexports.validateNamespace = validateNamespace;\nfunction validateCallback(fnName, argumentNumber, callback, optional) {\n if (optional && !callback)\n return;\n if (typeof callback !== 'function')\n throw new Error(errorPrefix(fnName, argumentNumber, optional) +\n 'must be a valid function.');\n}\nexports.validateCallback = validateCallback;\nfunction validateContextObject(fnName, argumentNumber, context, optional) {\n if (optional && !context)\n return;\n if (typeof context !== 'object' || context === null)\n throw new Error(errorPrefix(fnName, argumentNumber, optional) +\n 'must be a valid context object.');\n}\nexports.validateContextObject = validateContextObject;\n\n//# sourceMappingURL=validation.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar assert_1 = require(\"./assert\");\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\n// so it's been modified.\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\n// use 2 characters in Javascript. All 4-byte UTF-8 characters begin with a first\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\n// pair).\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\n/**\n * @param {string} str\n * @return {Array}\n */\nexports.stringToByteArray = function (str) {\n var out = [], p = 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n // Is this the lead surrogate in a surrogate pair?\n if (c >= 0xd800 && c <= 0xdbff) {\n var high = c - 0xd800; // the high 10 bits.\n i++;\n assert_1.assert(i < str.length, 'Surrogate pair missing trail surrogate.');\n var low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\n c = 0x10000 + (high << 10) + low;\n }\n if (c < 128) {\n out[p++] = c;\n }\n else if (c < 2048) {\n out[p++] = (c >> 6) | 192;\n out[p++] = (c & 63) | 128;\n }\n else if (c < 65536) {\n out[p++] = (c >> 12) | 224;\n out[p++] = ((c >> 6) & 63) | 128;\n out[p++] = (c & 63) | 128;\n }\n else {\n out[p++] = (c >> 18) | 240;\n out[p++] = ((c >> 12) & 63) | 128;\n out[p++] = ((c >> 6) & 63) | 128;\n out[p++] = (c & 63) | 128;\n }\n }\n return out;\n};\n/**\n * Calculate length without actually converting; useful for doing cheaper validation.\n * @param {string} str\n * @return {number}\n */\nexports.stringLength = function (str) {\n var p = 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c < 128) {\n p++;\n }\n else if (c < 2048) {\n p += 2;\n }\n else if (c >= 0xd800 && c <= 0xdbff) {\n // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\n p += 4;\n i++; // skip trail surrogate.\n }\n else {\n p += 3;\n }\n }\n return p;\n};\n\n//# sourceMappingURL=utf8.js.map\n","(function() {\n var firebase = require('@firebase/app').default;\n var h,aa=aa||{},k=this;function m(a){return\"string\"==typeof a}function ba(a){return\"boolean\"==typeof a}function ca(){}\nfunction da(a){var b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b}function ea(a){return null===a}function fa(a){return\"array\"==da(a)}function ha(a){var b=da(a);return\"array\"==b||\"object\"==b&&\"number\"==typeof a.length}function p(a){return\"function\"==da(a)}function q(a){var b=typeof a;return\"object\"==b&&null!=a||\"function\"==b}var ia=\"closure_uid_\"+(1E9*Math.random()>>>0),ja=0;function ka(a,b,c){return a.call.apply(a.bind,arguments)}\nfunction la(a,b,c){if(!a)throw Error();if(2\")&&(a=a.replace(ua,\">\"));-1!=a.indexOf('\"')&&(a=a.replace(va,\""\"));-1!=a.indexOf(\"'\")&&(a=a.replace(wa,\"'\"));-1!=a.indexOf(\"\\x00\")&&(a=a.replace(xa,\"�\"));return a}var sa=/&/g,ta=//g,va=/\"/g,wa=/'/g,xa=/\\x00/g,ra=/[\\x00&<>\"']/;function v(a,b){return-1!=a.indexOf(b)}function ya(a,b){return ab?1:0};function za(a,b){b.unshift(a);u.call(this,oa.apply(null,b));b.shift()}t(za,u);za.prototype.name=\"AssertionError\";function Aa(a,b){throw new za(\"Failure\"+(a?\": \"+a:\"\"),Array.prototype.slice.call(arguments,1));};var Ba=Array.prototype.indexOf?function(a,b,c){return Array.prototype.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(m(a))return m(b)&&1==b.length?a.indexOf(b,c):-1;for(;cb?null:m(a)?a.charAt(b):a[b]}function Ha(a,b){return 0<=Ba(a,b)}function Ia(a,b){b=Ba(a,b);var c;(c=0<=b)&&Array.prototype.splice.call(a,b,1);return c}function Ja(a,b){var c=0;Ca(a,function(d,e){b.call(void 0,d,e,a)&&1==Array.prototype.splice.call(a,e,1).length&&c++})}function Ka(a){return Array.prototype.concat.apply([],arguments)}\nfunction La(a){var b=a.length;if(0parseFloat(gb)){fb=String(ib);break a}}fb=gb}var Za={};\nfunction jb(a){return Ya(a,function(){for(var b=0,c=pa(String(fb)).split(\".\"),d=pa(String(a)).split(\".\"),e=Math.max(c.length,d.length),f=0;0==b&&f\");vc(\"\");vc(\"
\");function wc(a){var b=document;return m(a)?b.getElementById(a):a}function xc(a,b){Pa(b,function(b,d){b&&b.la&&(b=b.ja());\"style\"==d?a.style.cssText=b:\"class\"==d?a.className=b:\"for\"==d?a.htmlFor=b:yc.hasOwnProperty(d)?a.setAttribute(yc[d],b):0==d.lastIndexOf(\"aria-\",0)||0==d.lastIndexOf(\"data-\",0)?a.setAttribute(d,b):a[d]=b})}\nvar yc={cellpadding:\"cellPadding\",cellspacing:\"cellSpacing\",colspan:\"colSpan\",frameborder:\"frameBorder\",height:\"height\",maxlength:\"maxLength\",nonce:\"nonce\",role:\"role\",rowspan:\"rowSpan\",type:\"type\",usemap:\"useMap\",valign:\"vAlign\",width:\"width\"};\nfunction zc(a,b,c){var d=arguments,e=document,f=String(d[0]),g=d[1];if(!$b&&g&&(g.name||g.type)){f=[\"<\",f];g.name&&f.push(' name=\"',qa(g.name),'\"');if(g.type){f.push(' type=\"',qa(g.type),'\"');var l={};Wa(l,g);delete l.type;g=l}f.push(\">\");f=f.join(\"\")}f=e.createElement(f);g&&(m(g)?f.className=g:fa(g)?f.className=g.join(\" \"):xc(f,g));2=a.keyCode)a.keyCode=-1}catch(b){}};Qc.prototype.g=function(){return this.a};var Sc=\"closure_listenable_\"+(1E6*Math.random()|0),Tc=0;function Uc(a,b,c,d,e){this.listener=a;this.a=null;this.src=b;this.type=c;this.capture=!!d;this.La=e;this.key=++Tc;this.ma=this.Ha=!1}function Vc(a){a.ma=!0;a.listener=null;a.a=null;a.src=null;a.La=null};function Wc(a){this.src=a;this.a={};this.b=0}function Xc(a,b,c,d,e,f){var g=b.toString();b=a.a[g];b||(b=a.a[g]=[],a.b++);var l=Yc(b,c,e,f);-1d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(g){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.b;e;e=e.parentNode)d.push(e);a=a.type;for(e=d.length-1;0<=e;e--){b.b=d[e];var f=nd(d[e],a,!0,b);c=c&&f}for(e=0;e>>0);function ed(a){if(p(a))return a;a[pd]||(a[pd]=function(b){return a.handleEvent(b)});return a[pd]};function F(){Ic.call(this);this.u=new Wc(this);this.Ib=this;this.Ra=null}t(F,Ic);F.prototype[Sc]=!0;F.prototype.removeEventListener=function(a,b,c,d){E(this,a,b,c,d)};\nfunction G(a,b){var c,d=a.Ra;if(d)for(c=[];d;d=d.Ra)c.push(d);a=a.Ib;d=b.type||b;if(m(b))b=new C(b,a);else if(b instanceof C)b.target=b.target||a;else{var e=b;b=new C(d,a);Wa(b,e)}e=!0;if(c)for(var f=c.length-1;0<=f;f--){var g=b.b=c[f];e=qd(g,d,!0,b)&&e}g=b.b=a;e=qd(g,d,!0,b)&&e;e=qd(g,d,!1,b)&&e;if(c)for(f=0;f=Ad(this).value)for(p(b)&&(b=b()),a=new td(a,String(b),this.f),c&&(a.a=c),c=\"log:\"+a.b,(a=k.console)&&a.timeStamp&&a.timeStamp(c),(a=k.msWriteProfilerMark)&&a(c),c=this;c;)c=c.a};var Bd={},Cd=null;function Dd(a){Cd||(Cd=new vd(\"\"),Bd[\"\"]=Cd,Cd.c=yd);var b;if(!(b=Bd[a])){b=new vd(a);var c=a.lastIndexOf(\".\"),d=a.substr(c+1);c=Dd(a.substr(0,c));c.b||(c.b={});c.b[d]=b;b.a=c;Bd[a]=b}return b};function Ed(a,b){this.b={};this.a=[];this.c=0;var c=arguments.length;if(1>4);64!=g&&(b(f<<4&240|g>>2),64!=l&&b(g<<6&192|l))}}\nfunction Nd(){if(!Jd){Jd={};Kd={};for(var a=0;65>a;a++)Jd[a]=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".charAt(a),Kd[Jd[a]]=a,62<=a&&(Kd[\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.\".charAt(a)]=a)}};/*\n Portions of this code are from MochiKit, received by\n The Closure Authors under the MIT license. All other code is Copyright\n 2005-2009 The Closure Authors. All Rights Reserved.\n*/\nfunction Od(a,b){this.g=[];this.v=a;this.o=b||null;this.f=this.a=!1;this.c=void 0;this.u=this.w=this.i=!1;this.h=0;this.b=null;this.l=0}Od.prototype.cancel=function(a){if(this.a)this.c instanceof Od&&this.c.cancel();else{if(this.b){var b=this.b;delete this.b;a?b.cancel(a):(b.l--,0>=b.l&&b.cancel())}this.v?this.v.call(this.o,this):this.u=!0;this.a||(a=new Pd,Qd(this),Rd(this,!1,a))}};Od.prototype.m=function(a,b){this.i=!1;Rd(this,a,b)};function Rd(a,b,c){a.a=!0;a.c=c;a.f=!b;Sd(a)}\nfunction Qd(a){if(a.a){if(!a.u)throw new Td;a.u=!1}}Od.prototype.A=function(a){Qd(this);Rd(this,!0,a)};function Ud(a,b){Vd(a,null,b,void 0)}function Vd(a,b,c,d){a.g.push([b,c,d]);a.a&&Sd(a)}Od.prototype.then=function(a,b,c){var d,e,f=new z(function(a,b){d=a;e=b});Vd(this,d,function(a){a instanceof Pd?f.cancel():e(a)});return f.then(a,b,c)};mb(Od);function Wd(a){return Ea(a.g,function(a){return p(a[1])})}\nfunction Sd(a){if(a.h&&a.a&&Wd(a)){var b=a.h,c=Xd[b];c&&(k.clearTimeout(c.a),delete Xd[b]);a.h=0}a.b&&(a.b.l--,delete a.b);b=a.c;for(var d=c=!1;a.g.length&&!a.i;){var e=a.g.shift(),f=e[0],g=e[1];e=e[2];if(f=a.f?g:f)try{var l=f.call(e||a.o,b);void 0!==l&&(a.f=a.f&&(l==b||l instanceof Error),a.c=b=l);if(nb(b)||\"function\"===typeof k.Promise&&b instanceof k.Promise)d=!0,a.i=!0}catch(n){b=n,a.f=!0,Wd(a)||(c=!0)}}a.c=b;d&&(l=r(a.m,a,!0),d=r(a.m,a,!1),b instanceof Od?(Vd(b,l,d),b.w=!0):b.then(l,d));c&&(b=\nnew Yd(b),Xd[b.a]=b,a.h=b.a)}function Td(){u.call(this)}t(Td,u);Td.prototype.message=\"Deferred has already fired\";Td.prototype.name=\"AlreadyCalledError\";function Pd(){u.call(this)}t(Pd,u);Pd.prototype.message=\"Deferred was canceled\";Pd.prototype.name=\"CanceledError\";function Yd(a){this.a=k.setTimeout(r(this.c,this),0);this.b=a}Yd.prototype.c=function(){delete Xd[this.a];throw this.b;};var Xd={};function Zd(){this.b=-1};function $d(a,b){this.b=-1;this.b=ae;this.f=k.Uint8Array?new Uint8Array(this.b):Array(this.b);this.g=this.c=0;this.a=[];this.i=a;this.h=b;this.l=k.Int32Array?new Int32Array(64):Array(64);be||(k.Int32Array?be=new Int32Array(ce):be=ce);this.reset()}var be;t($d,Zd);for(var ae=64,de=ae-1,ee=[],fe=0;feb;b++){e=c[b-15]|0;d=c[b-2]|0;var f=(c[b-16]|0)+((e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3)|0,g=(c[b-7]|0)+((d>>>17|d<<15)^(d>>>19|d<<13)^d>>>10)|0;c[b]=f+g|0}d=a.a[0]|0;e=a.a[1]|0;var l=a.a[2]|0,n=a.a[3]|0,D=a.a[4]|0,vb=a.a[5]|0,tc=a.a[6]|0;f=a.a[7]|0;for(b=0;64>b;b++){var Hd=((d>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10))+(d&e^d&l^e&l)|0;g=D&vb^~D&tc;f=f+((D>>>6|D<<26)^(D>>>11|D<<21)^(D>>>\n25|D<<7))|0;g=g+(be[b]|0)|0;g=f+(g+(c[b]|0)|0)|0;f=tc;tc=vb;vb=D;D=n+g|0;n=l;l=e;e=d;d=g+Hd|0}a.a[0]=a.a[0]+d|0;a.a[1]=a.a[1]+e|0;a.a[2]=a.a[2]+l|0;a.a[3]=a.a[3]+n|0;a.a[4]=a.a[4]+D|0;a.a[5]=a.a[5]+vb|0;a.a[6]=a.a[6]+tc|0;a.a[7]=a.a[7]+f|0}\nfunction ie(a,b,c){void 0===c&&(c=b.length);var d=0,e=a.c;if(m(b))for(;d=f&&f==(f|0)))throw Error(\"message must be a byte array\");a.f[e++]=f;e==a.b&&(he(a),e=0)}else throw Error(\"message must be string or array\");a.c=e;a.g+=c}\nvar ce=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,\n4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function je(){$d.call(this,8,ke)}t(je,$d);var ke=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];function le(a){if(a.P&&\"function\"==typeof a.P)return a.P();if(m(a))return a.split(\"\");if(ha(a)){for(var b=[],c=a.length,d=0;db)throw Error(\"Bad port number \"+b);a.i=b}else a.i=null}function ue(a,b,c){b instanceof te?(a.a=b,Be(a.a,a.f)):(c||(b=we(b,Ce)),a.a=new te(b,0,a.f))}function I(a,b,c){a.a.set(b,c)}function De(a,b){return a.a.get(b)}function Ee(a){return a instanceof qe?new qe(a):new qe(a,void 0)}function Fe(a,b){var c=new qe(null,void 0);re(c,\"https\");a&&(c.b=a);b&&(c.g=b);return c}\nfunction ve(a,b){return a?b?decodeURI(a.replace(/%25/g,\"%2525\")):decodeURIComponent(a):\"\"}function we(a,b,c){return m(a)?(a=encodeURI(a).replace(b,Ge),c&&(a=a.replace(/%25([0-9a-fA-F]{2})/g,\"%$1\")),a):null}function Ge(a){a=a.charCodeAt(0);return\"%\"+(a>>4&15).toString(16)+(a&15).toString(16)}var xe=/[#\\/\\?@]/g,ze=/[\\#\\?:]/g,ye=/[\\#\\?]/g,Ce=/[\\#\\?@]/g,Ae=/#/g;function te(a,b,c){this.b=this.a=null;this.c=a||null;this.f=!!c}\nfunction He(a){a.a||(a.a=new Ed,a.b=0,a.c&&pe(a.c,function(b,c){Ie(a,decodeURIComponent(b.replace(/\\+/g,\" \")),c)}))}function Je(a){var b=me(a);if(\"undefined\"==typeof b)throw Error(\"Keys are undefined\");var c=new te(null,0,void 0);a=le(a);for(var d=0;d2*a.c&&Fd(a)))}h=te.prototype;h.clear=function(){this.a=this.c=null;this.b=0};function Ne(a,b){He(a);b=Le(a,b);return Gd(a.a.b,b)}h.forEach=function(a,b){He(this);this.a.forEach(function(c,d){w(c,function(c){a.call(b,c,d,this)},this)},this)};h.S=function(){He(this);for(var a=this.a.P(),b=this.a.S(),c=[],d=0;da?!1:!y||!kb||9',a=vc(a),g.document.write(uc(a)),g.document.close())):g=a.open(nc(b),c,g);if(g)try{g.focus()}catch(l){}return g}\nfunction Gf(a){return new z(function(b){function c(){sd(2E3).then(function(){if(!a||a.closed)b();else return c()})}return c()})}var Hf=/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;function If(){var a=null;return(new z(function(b){\"complete\"==k.document.readyState?b():(a=function(){b()},dd(window,\"load\",a))})).s(function(b){E(window,\"load\",a);throw b;})}\nfunction Jf(){return Kf(void 0)?If().then(function(){return new z(function(a,b){var c=k.document,d=setTimeout(function(){b(Error(\"Cordova framework is not ready.\"))},1E3);c.addEventListener(\"deviceready\",function(){clearTimeout(d);a()},!1)})}):B(Error(\"Cordova must run in an Android or iOS file scheme.\"))}function Kf(a){a=a||J();return!(\"file:\"!==Lf()||!a.toLowerCase().match(/iphone|ipad|ipod|android/))}function Mf(){var a=k.window;try{return!(!a||a==a.top)}catch(b){return!1}}\nfunction K(){return firebase.INTERNAL.hasOwnProperty(\"reactNative\")?\"ReactNative\":firebase.INTERNAL.hasOwnProperty(\"node\")?\"Node\":\"Browser\"}function Nf(){var a=K();return\"ReactNative\"===a||\"Node\"===a}var Ff=\"Firefox\",Bf=\"Chrome\";\nfunction Af(a){var b=a.toLowerCase();if(v(b,\"opera/\")||v(b,\"opr/\")||v(b,\"opios/\"))return\"Opera\";if(v(b,\"iemobile\"))return\"IEMobile\";if(v(b,\"msie\")||v(b,\"trident/\"))return\"IE\";if(v(b,\"edge/\"))return\"Edge\";if(v(b,\"firefox/\"))return Ff;if(v(b,\"silk/\"))return\"Silk\";if(v(b,\"blackberry\"))return\"Blackberry\";if(v(b,\"webos\"))return\"Webos\";if(!v(b,\"safari/\")||v(b,\"chrome/\")||v(b,\"crios/\")||v(b,\"android\"))if(!v(b,\"chrome/\")&&!v(b,\"crios/\")||v(b,\"edge/\")){if(v(b,\"android\"))return\"Android\";if((a=a.match(/([a-zA-Z\\d\\.]+)\\/[a-zA-Z\\d\\.]*$/))&&\n2==a.length)return a[1]}else return Bf;else return\"Safari\";return\"Other\"}var Of={Gc:\"FirebaseCore-web\",Ic:\"FirebaseUI-web\"};function Pf(a,b){b=b||[];var c=[],d={},e;for(e in Of)d[Of[e]]=!0;for(e=0;eb)throw Error(\"Short delay should be less than long delay!\");this.c=a;this.b=b;a=c||J();d=d||K();this.a=Cf(a)||\"ReactNative\"===d}\nag.prototype.get=function(){return this.a?this.b:this.c};function bg(){var a=k.document;return a&&\"undefined\"!==typeof a.visibilityState?\"visible\"==a.visibilityState:!0}function cg(){var a=k.document,b=null;return bg()||!a?A():(new z(function(c){b=function(){bg()&&(a.removeEventListener(\"visibilitychange\",b,!1),c())};a.addEventListener(\"visibilitychange\",b,!1)})).s(function(c){a.removeEventListener(\"visibilitychange\",b,!1);throw c;})}\nfunction dg(a){try{var b=new Date(parseInt(a,10));if(!isNaN(b.getTime())&&!/[^0-9]/.test(a))return b.toUTCString()}catch(c){}return null};var eg={};var fg;try{var gg={};Object.defineProperty(gg,\"abcd\",{configurable:!0,enumerable:!0,value:1});Object.defineProperty(gg,\"abcd\",{configurable:!0,enumerable:!0,value:2});fg=2==gg.abcd}catch(a){fg=!1}function M(a,b,c){fg?Object.defineProperty(a,b,{configurable:!0,enumerable:!0,value:c}):a[b]=c}function hg(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&M(a,c,b[c])}function ig(a){var b={};hg(b,a);return b}function jg(a){var b={},c;for(c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}\nfunction kg(a,b){if(!b||!b.length)return!0;if(!a)return!1;for(var c=0;c Auth section -> Sign in method tab.\",a):\"http\"==d||\"https\"==d?c=oa(\"This domain (%s) is not authorized to run this operation. Add it to the OAuth redirect domains list in the Firebase console -> Auth section -> Sign in method tab.\",a):b=\"operation-not-supported-in-this-environment\";\nN.call(this,b,c)}t(Bh,N);function Ch(a,b,c){N.call(this,a,c);a=b||{};a.sb&&M(this,\"email\",a.sb);a.Y&&M(this,\"phoneNumber\",a.Y);a.credential&&M(this,\"credential\",a.credential)}t(Ch,N);Ch.prototype.B=function(){var a={code:this.code,message:this.message};this.email&&(a.email=this.email);this.phoneNumber&&(a.phoneNumber=this.phoneNumber);var b=this.credential&&this.credential.B();b&&Wa(a,b);return a};Ch.prototype.toJSON=function(){return this.B()};\nfunction Dh(a){if(a.code){var b=a.code||\"\";0==b.indexOf(ug)&&(b=b.substring(ug.length));var c={credential:vh(a)};if(a.email)c.sb=a.email;else if(a.phoneNumber)c.Y=a.phoneNumber;else return new N(b,a.message||void 0);return new Ch(b,c,a.message)}return null};function Eh(a){this.f=a}t(Eh,Oe);Eh.prototype.a=function(){return new this.f};Eh.prototype.b=function(){return{}};\nfunction Fh(a,b,c){var d=\"Node\"==K();d=k.XMLHttpRequest||d&&firebase.INTERNAL.node&&firebase.INTERNAL.node.XMLHttpRequest;if(!d)throw new N(\"internal-error\",\"The XMLHttpRequest compatibility library was not found.\");this.b=a;a=b||{};this.i=a.secureTokenEndpoint||\"https://securetoken.googleapis.com/v1/token\";this.l=a.secureTokenTimeout||Gh;this.c=Ua(a.secureTokenHeaders||Hh);this.g=a.firebaseEndpoint||\"https://www.googleapis.com/identitytoolkit/v3/relyingparty/\";this.h=a.firebaseTimeout||Ih;this.a=\nUa(a.firebaseHeaders||Jh);c&&(this.a[\"X-Client-Version\"]=c,this.c[\"X-Client-Version\"]=c);this.f=new sf;this.o=new Eh(d)}var Kh,O=\"idToken\",Gh=new ag(3E4,6E4),Hh={\"Content-Type\":\"application/x-www-form-urlencoded\"},Ih=new ag(3E4,6E4),Jh={\"Content-Type\":\"application/json\"};function Lh(a,b){b?a.a[\"X-Firebase-Locale\"]=b:delete a.a[\"X-Firebase-Locale\"]}function Mh(a,b){b?(a.a[\"X-Client-Version\"]=b,a.c[\"X-Client-Version\"]=b):(delete a.a[\"X-Client-Version\"],delete a.c[\"X-Client-Version\"])}\nfunction Nh(a,b,c,d,e,f,g){$f()?(zf()?a=r(a.m,a):(Kh||(Kh=new z(function(a,b){Oh(a,b)})),a=r(a.u,a)),a(b,c,d,e,f,g)):c&&c(null)}\nFh.prototype.m=function(a,b,c,d,e,f){var g=\"Node\"==K(),l=Nf()?g?new Te(this.o):new Te:new Te(this.f);if(f){l.f=Math.max(0,f);var n=setTimeout(function(){G(l,\"timeout\")},f)}fd(l,\"complete\",function(){n&&clearTimeout(n);var a=null;try{a=JSON.parse(jf(this))||null}catch(vb){a=null}b&&b(a)});ld(l,\"ready\",function(){n&&clearTimeout(n);Lc(this)});ld(l,\"timeout\",function(){n&&clearTimeout(n);Lc(this);b&&b(null)});Ze(l,a,c,d,e)};\nvar Ph=dc(\"https://apis.google.com/js/client.js?onload=%{onload}\"),Qh=\"__fcb\"+Math.floor(1E6*Math.random()).toString();function Oh(a,b){if(((window.gapi||{}).client||{}).request)a();else{k[Qh]=function(){((window.gapi||{}).client||{}).request?a():b(Error(\"CORS_UNSUPPORTED\"))};var c=hc(Ph,{onload:Qh});Ud(lf(c),function(){b(Error(\"CORS_UNSUPPORTED\"))})}}\nFh.prototype.u=function(a,b,c,d,e){var f=this;Kh.then(function(){window.gapi.client.setApiKey(f.b);var g=window.gapi.auth.getToken();window.gapi.auth.setToken(null);window.gapi.client.request({path:a,method:c,body:d,headers:e,authType:\"none\",callback:function(a){window.gapi.auth.setToken(g);b&&b(a)}})}).s(function(a){b&&b({error:{message:a&&a.message||\"CORS_UNSUPPORTED\"}})})};\nfunction Rh(a,b){return new z(function(c,d){\"refresh_token\"==b.grant_type&&b.refresh_token||\"authorization_code\"==b.grant_type&&b.code?Nh(a,a.i+\"?key=\"+encodeURIComponent(a.b),function(a){a?a.error?d(Sh(a)):a.access_token&&a.refresh_token?c(a):d(new N(\"internal-error\")):d(new N(\"network-request-failed\"))},\"POST\",Je(b).toString(),a.c,a.l.get()):d(new N(\"internal-error\"))})}\nfunction Th(a,b,c,d,e,f){var g=Ee(a.g+b);I(g,\"key\",a.b);f&&I(g,\"cb\",na().toString());var l=\"GET\"==c;if(l)for(var n in d)d.hasOwnProperty(n)&&I(g,n,d[n]);return new z(function(b,f){Nh(a,g.toString(),function(a){a?a.error?f(Sh(a,e||{})):b(a):f(new N(\"network-request-failed\"))},c,l?void 0:Cc(Wf(d)),a.a,a.h.get())})}function Uh(a){if(!kf.test(a.email))throw new N(\"invalid-email\");}function Vh(a){\"email\"in a&&Uh(a)}\nfunction Wh(a,b){return Q(a,Xh,{identifier:b,continueUri:Tf()?wf():\"http://localhost\"}).then(function(a){return a.allProviders||[]})}function Yh(a){return Q(a,Zh,{}).then(function(a){return a.authorizedDomains||[]})}function $h(a){if(!a[O])throw new N(\"internal-error\");}\nfunction ai(a){if(a.phoneNumber||a.temporaryProof){if(!a.phoneNumber||!a.temporaryProof)throw new N(\"internal-error\");}else{if(!a.sessionInfo)throw new N(\"missing-verification-id\");if(!a.code)throw new N(\"missing-verification-code\");}}Fh.prototype.gb=function(){return Q(this,bi,{})};Fh.prototype.kb=function(a,b){return Q(this,ci,{idToken:a,email:b})};Fh.prototype.lb=function(a,b){return Q(this,mh,{idToken:a,password:b})};var di={displayName:\"DISPLAY_NAME\",photoUrl:\"PHOTO_URL\"};h=Fh.prototype;\nh.mb=function(a,b){var c={idToken:a},d=[];Pa(di,function(a,f){var e=b[f];null===e?d.push(a):f in b&&(c[f]=e)});d.length&&(c.deleteAttribute=d);return Q(this,ci,c)};h.cb=function(a,b){a={requestType:\"PASSWORD_RESET\",email:a};Wa(a,b);return Q(this,ei,a)};h.bb=function(a,b){a={requestType:\"VERIFY_EMAIL\",idToken:a};Wa(a,b);return Q(this,fi,a)};function th(a,b){return Q(a,gi,b)}h.Qa=function(a){return Q(this,hi,a)};function ii(a,b,c){return Q(a,ji,{idToken:b,deleteProvider:c})}\nfunction ki(a){if(!a.requestUri||!a.sessionId&&!a.postBody)throw new N(\"internal-error\");}function li(a){var b=null;a.needConfirmation?(a.code=\"account-exists-with-different-credential\",b=Dh(a)):\"FEDERATED_USER_ID_ALREADY_LINKED\"==a.errorMessage?(a.code=\"credential-already-in-use\",b=Dh(a)):\"EMAIL_EXISTS\"==a.errorMessage?(a.code=\"email-already-in-use\",b=Dh(a)):a.errorMessage&&(b=mi(a.errorMessage));if(b)throw b;if(!a[O])throw new N(\"internal-error\");}\nfunction Yg(a,b){b.returnIdpCredential=!0;return Q(a,ni,b)}function $g(a,b){b.returnIdpCredential=!0;return Q(a,oi,b)}function ah(a,b){b.returnIdpCredential=!0;b.autoCreate=!1;return Q(a,pi,b)}function qi(a){if(!a.oobCode)throw new N(\"invalid-action-code\");}h.Ta=function(a,b){return Q(this,ri,{oobCode:a,newPassword:b})};h.Ia=function(a){return Q(this,si,{oobCode:a})};h.Sa=function(a){return Q(this,ti,{oobCode:a})};\nvar ti={endpoint:\"setAccountInfo\",D:qi,ga:\"email\"},si={endpoint:\"resetPassword\",D:qi,O:function(a){if(!a.email||!a.requestType)throw new N(\"internal-error\");}},ui={endpoint:\"signupNewUser\",D:function(a){Uh(a);if(!a.password)throw new N(\"weak-password\");},O:$h,T:!0},Xh={endpoint:\"createAuthUri\"},vi={endpoint:\"deleteAccount\",ea:[\"idToken\"]},ji={endpoint:\"setAccountInfo\",ea:[\"idToken\",\"deleteProvider\"],D:function(a){if(!fa(a.deleteProvider))throw new N(\"internal-error\");}},wi={endpoint:\"getAccountInfo\"},\nfi={endpoint:\"getOobConfirmationCode\",ea:[\"idToken\",\"requestType\"],D:function(a){if(\"VERIFY_EMAIL\"!=a.requestType)throw new N(\"internal-error\");},ga:\"email\"},ei={endpoint:\"getOobConfirmationCode\",ea:[\"requestType\"],D:function(a){if(\"PASSWORD_RESET\"!=a.requestType)throw new N(\"internal-error\");Uh(a)},ga:\"email\"},Zh={nb:!0,endpoint:\"getProjectConfig\",zb:\"GET\"},xi={nb:!0,endpoint:\"getRecaptchaParam\",zb:\"GET\",O:function(a){if(!a.recaptchaSiteKey)throw new N(\"internal-error\");}},ri={endpoint:\"resetPassword\",\nD:qi,ga:\"email\"},gi={endpoint:\"sendVerificationCode\",ea:[\"phoneNumber\",\"recaptchaToken\"],ga:\"sessionInfo\"},ci={endpoint:\"setAccountInfo\",ea:[\"idToken\"],D:Vh,T:!0},mh={endpoint:\"setAccountInfo\",ea:[\"idToken\"],D:function(a){Vh(a);if(!a.password)throw new N(\"weak-password\");},O:$h,T:!0},bi={endpoint:\"signupNewUser\",O:$h,T:!0},ni={endpoint:\"verifyAssertion\",D:ki,O:li,T:!0},pi={endpoint:\"verifyAssertion\",D:ki,O:function(a){if(a.errorMessage&&\"USER_NOT_FOUND\"==a.errorMessage)throw new N(\"user-not-found\");\nif(a.errorMessage)throw mi(a.errorMessage);if(!a[O])throw new N(\"internal-error\");},T:!0},oi={endpoint:\"verifyAssertion\",D:function(a){ki(a);if(!a.idToken)throw new N(\"internal-error\");},O:li,T:!0},yi={endpoint:\"verifyCustomToken\",D:function(a){if(!a.token)throw new N(\"invalid-custom-token\");},O:$h,T:!0},lh={endpoint:\"verifyPassword\",D:function(a){Uh(a);if(!a.password)throw new N(\"wrong-password\");},O:$h,T:!0},hi={endpoint:\"verifyPhoneNumber\",D:ai,O:$h},qh={endpoint:\"verifyPhoneNumber\",D:function(a){if(!a.idToken)throw new N(\"internal-error\");\nai(a)},O:function(a){if(a.temporaryProof)throw a.code=\"credential-already-in-use\",Dh(a);$h(a)}},rh={Pb:{USER_NOT_FOUND:\"user-not-found\"},endpoint:\"verifyPhoneNumber\",D:ai,O:$h};\nfunction Q(a,b,c){if(!kg(c,b.ea))return B(new N(\"internal-error\"));var d=b.zb||\"POST\",e;return A(c).then(b.D).then(function(){b.T&&(c.returnSecureToken=!0);return Th(a,b.endpoint,d,c,b.Pb,b.nb||!1)}).then(function(a){return e=a}).then(b.O).then(function(){if(!b.ga)return e;if(!(b.ga in e))throw new N(\"internal-error\");return e[b.ga]})}function mi(a){return Sh({error:{errors:[{message:a}],code:400,message:a}})}\nfunction Sh(a,b){var c=(a.error&&a.error.errors&&a.error.errors[0]||{}).reason||\"\";var d={keyInvalid:\"invalid-api-key\",ipRefererBlocked:\"app-not-authorized\"};if(c=d[c]?new N(d[c]):null)return c;c=a.error&&a.error.message||\"\";d={INVALID_CUSTOM_TOKEN:\"invalid-custom-token\",CREDENTIAL_MISMATCH:\"custom-token-mismatch\",MISSING_CUSTOM_TOKEN:\"internal-error\",INVALID_IDENTIFIER:\"invalid-email\",MISSING_CONTINUE_URI:\"internal-error\",INVALID_EMAIL:\"invalid-email\",INVALID_PASSWORD:\"wrong-password\",USER_DISABLED:\"user-disabled\",\nMISSING_PASSWORD:\"internal-error\",EMAIL_EXISTS:\"email-already-in-use\",PASSWORD_LOGIN_DISABLED:\"operation-not-allowed\",INVALID_IDP_RESPONSE:\"invalid-credential\",FEDERATED_USER_ID_ALREADY_LINKED:\"credential-already-in-use\",INVALID_MESSAGE_PAYLOAD:\"invalid-message-payload\",INVALID_RECIPIENT_EMAIL:\"invalid-recipient-email\",INVALID_SENDER:\"invalid-sender\",EMAIL_NOT_FOUND:\"user-not-found\",EXPIRED_OOB_CODE:\"expired-action-code\",INVALID_OOB_CODE:\"invalid-action-code\",MISSING_OOB_CODE:\"internal-error\",CREDENTIAL_TOO_OLD_LOGIN_AGAIN:\"requires-recent-login\",\nINVALID_ID_TOKEN:\"invalid-user-token\",TOKEN_EXPIRED:\"user-token-expired\",USER_NOT_FOUND:\"user-token-expired\",CORS_UNSUPPORTED:\"cors-unsupported\",DYNAMIC_LINK_NOT_ACTIVATED:\"dynamic-link-not-activated\",INVALID_APP_ID:\"invalid-app-id\",TOO_MANY_ATTEMPTS_TRY_LATER:\"too-many-requests\",WEAK_PASSWORD:\"weak-password\",OPERATION_NOT_ALLOWED:\"operation-not-allowed\",USER_CANCELLED:\"user-cancelled\",CAPTCHA_CHECK_FAILED:\"captcha-check-failed\",INVALID_APP_CREDENTIAL:\"invalid-app-credential\",INVALID_CODE:\"invalid-verification-code\",\nINVALID_PHONE_NUMBER:\"invalid-phone-number\",INVALID_SESSION_INFO:\"invalid-verification-id\",INVALID_TEMPORARY_PROOF:\"invalid-credential\",MISSING_APP_CREDENTIAL:\"missing-app-credential\",MISSING_CODE:\"missing-verification-code\",MISSING_PHONE_NUMBER:\"missing-phone-number\",MISSING_SESSION_INFO:\"missing-verification-id\",QUOTA_EXCEEDED:\"quota-exceeded\",SESSION_EXPIRED:\"code-expired\",INVALID_CONTINUE_URI:\"invalid-continue-uri\",MISSING_ANDROID_PACKAGE_NAME:\"missing-android-pkg-name\",MISSING_IOS_BUNDLE_ID:\"missing-ios-bundle-id\",\nUNAUTHORIZED_DOMAIN:\"unauthorized-continue-uri\",INVALID_OAUTH_CLIENT_ID:\"invalid-oauth-client-id\",INVALID_CERT_HASH:\"invalid-cert-hash\"};Wa(d,b||{});b=(b=c.match(/^[^\\s]+\\s*:\\s*(.*)$/))&&1b.c?ie(b,ge,56-b.c):ie(b,ge,b.b-(b.c-56));for(var d=63;56<=d;d--)b.f[d]=c&255,c/=256;he(b);for(d=c=0;d>e&255;return Id(a)}\nh.Ca=function(a,b){b(new N(\"operation-not-supported-in-this-environment\"));return A()};h.vb=function(){return B(new N(\"operation-not-supported-in-this-environment\"))};h.Hb=function(){return!1};h.Db=function(){return!0};h.yb=function(){return!0};\nh.Aa=function(a,b,c){if(this.c)return B(new N(\"redirect-operation-pending\"));var d=this,e=k.document,f=null,g=null,l=null,n=null;return this.c=Qb(A().then(function(){wh(b);return Mj(d)}).then(function(){return Nj(d,a,b,c)}).then(function(){return(new z(function(a,b){g=function(){var b=L(\"cordova.plugins.browsertab.close\",k);a();\"function\"===typeof b&&b();d.a&&\"function\"===typeof d.a.close&&(d.a.close(),d.a=null);return!1};d.ua(g);l=function(){f||(f=sd(d.w).then(function(){b(new N(\"redirect-cancelled-by-user\"))}))};\nn=function(){bg()&&l()};e.addEventListener(\"resume\",l,!1);J().toLowerCase().match(/android/)||e.addEventListener(\"visibilitychange\",n,!1)})).s(function(a){return Oj(d).then(function(){throw a;})})}),function(){l&&e.removeEventListener(\"resume\",l,!1);n&&e.removeEventListener(\"visibilitychange\",n,!1);f&&f.cancel();g&&d.Ja(g);d.c=null})};\nfunction Nj(a,b,c,d){var e=Kj(),f=new xh(b,d,null,e,new N(\"no-auth-event\")),g=L(\"BuildInfo.packageName\",k);if(\"string\"!==typeof g)throw new N(\"invalid-cordova-configuration\");var l=L(\"BuildInfo.displayName\",k),n={};if(J().toLowerCase().match(/iphone|ipad|ipod/))n.ibi=g;else if(J().toLowerCase().match(/android/))n.apn=g;else return B(new N(\"operation-not-supported-in-this-environment\"));l&&(n.appDisplayName=l);e=Lj(e);n.sessionId=e;var D=Ui(a.u,a.i,a.l,b,c,null,d,a.m,n,a.o);return a.ba().then(function(){var b=\na.h;return a.A.a.set(Fj,f.B(),b)}).then(function(){var b=L(\"cordova.plugins.browsertab.isAvailable\",k);if(\"function\"!==typeof b)throw new N(\"invalid-cordova-configuration\");var c=null;b(function(b){if(b){c=L(\"cordova.plugins.browsertab.openUrl\",k);if(\"function\"!==typeof c)throw new N(\"invalid-cordova-configuration\");c(D)}else{c=L(\"cordova.InAppBrowser.open\",k);if(\"function\"!==typeof c)throw new N(\"invalid-cordova-configuration\");b=J();b=!(!b.match(/(iPad|iPhone|iPod).*OS 7_\\d/i)&&!b.match(/(iPad|iPhone|iPod).*OS 8_\\d/i));\na.a=c(D,b?\"_blank\":\"_system\",\"location=yes\")}})})}function Pj(a,b){for(var c=0;ca.f&&(a.a=a.f);return b}\nfunction sk(a,b){uk(a);a.b=sd(tk(a,b)).then(function(){return a.l?A():cg()}).then(function(){return a.h()}).then(function(){sk(a,!0)}).s(function(b){a.i(b)&&sk(a,!1)})}function uk(a){a.b&&(a.b.cancel(),a.b=null)};function vk(a){this.f=a;this.b=this.a=null;this.c=0}vk.prototype.B=function(){return{apiKey:this.f.b,refreshToken:this.a,accessToken:this.b,expirationTime:this.c}};function wk(a,b){var c=b[O],d=b.refreshToken;b=xk(b.expiresIn);a.b=c;a.c=b;a.a=d}function xk(a){return na()+1E3*parseInt(a,10)}\nfunction yk(a,b){return Rh(a.f,b).then(function(b){a.b=b.access_token;a.c=xk(b.expires_in);a.a=b.refresh_token;return{accessToken:a.b,expirationTime:a.c,refreshToken:a.a}}).s(function(b){\"auth/user-token-expired\"==b.code&&(a.a=null);throw b;})}vk.prototype.getToken=function(a){a=!!a;return this.b&&!this.a?B(new N(\"user-token-expired\")):a||!this.b||na()>this.c-3E4?this.a?yk(this,{grant_type:\"refresh_token\",refresh_token:this.a}):A(null):A({accessToken:this.b,expirationTime:this.c,refreshToken:this.a})};function zk(a,b){this.a=a||null;this.b=b||null;hg(this,{lastSignInTime:dg(b||null),creationTime:dg(a||null)})}function Ak(a){return new zk(a.a,a.b)}zk.prototype.B=function(){return{lastLoginAt:this.b,createdAt:this.a}};function Bk(a,b,c,d,e,f){hg(this,{uid:a,displayName:d||null,photoURL:e||null,email:c||null,phoneNumber:f||null,providerId:b})}function Ck(a,b){C.call(this,a);for(var c in b)this[c]=b[c]}t(Ck,C);\nfunction Dk(a,b,c){this.A=[];this.G=a.apiKey;this.o=a.appName;this.w=a.authDomain||null;a=firebase.SDK_VERSION?Pf(firebase.SDK_VERSION):null;this.c=new Fh(this.G,Ai(Bi),a);this.h=new vk(this.c);Ek(this,b[O]);wk(this.h,b);M(this,\"refreshToken\",this.h.a);Fk(this,c||{});F.call(this);this.I=!1;this.w&&Sf()&&(this.a=ik(this.w,this.G,this.o));this.N=[];this.i=null;this.l=Gk(this);this.U=r(this.Ga,this);var d=this;this.ha=null;this.ra=function(a){d.na(a.h)};this.W=null;this.R=[];this.qa=function(a){Hk(d,\na.f)};this.V=null}t(Dk,F);Dk.prototype.na=function(a){this.ha=a;Lh(this.c,a)};Dk.prototype.$=function(){return this.ha};function Ik(a,b){a.W&&E(a.W,\"languageCodeChanged\",a.ra);(a.W=b)&&cd(b,\"languageCodeChanged\",a.ra)}function Hk(a,b){a.R=b;Mh(a.c,firebase.SDK_VERSION?Pf(firebase.SDK_VERSION,a.R):null)}Dk.prototype.Ka=function(){return La(this.R)};function Jk(a,b){a.V&&E(a.V,\"frameworkChanged\",a.qa);(a.V=b)&&cd(b,\"frameworkChanged\",a.qa)}Dk.prototype.Ga=function(){this.l.b&&(uk(this.l),this.l.start())};\nfunction Kk(a){try{return firebase.app(a.o).auth()}catch(b){throw new N(\"internal-error\",\"No firebase.auth.Auth instance is available for the Firebase App '\"+a.o+\"'!\");}}function Gk(a){return new rk(function(){return a.F(!0)},function(a){return a&&\"auth/network-request-failed\"==a.code?!0:!1},function(){var b=a.h.c-na()-3E5;return 0this.o&&(this.o=0);0==this.o&&U(this)&&Mk(U(this));this.removeAuthTokenListener(a)};\nh.addAuthTokenListener=function(a){var b=this;this.m.push(a);T(this,this.i.then(function(){b.l||Ha(b.m,a)&&a(Kl(b))}))};h.removeAuthTokenListener=function(a){Ja(this.m,function(b){return b==a})};function Jl(a,b){a.I.push(b);T(a,a.i.then(function(){!a.l&&Ha(a.I,b)&&a.R!==a.getUid()&&(a.R=a.getUid(),b(Kl(a)))}))}h.delete=function(){this.l=!0;for(var a=0;ae||e>=Ml.length)throw new N(\"internal-error\",\n\"Argument validator received an unsupported number of arguments.\");c=Ml[e];d=(d?\"\":c+\" argument \")+(b.name?'\"'+b.name+'\" ':\"\")+\"must be \"+b.K+\".\";break a}d=null}}if(d)throw new N(\"argument-error\",a+\" failed: \"+d);}var Ml=\"First Second Third Fourth Fifth Sixth Seventh Eighth Ninth\".split(\" \");function V(a,b){return{name:a||\"\",K:\"a valid string\",optional:!!b,M:m}}function Nl(){return{name:\"opt_forceRefresh\",K:\"a boolean\",optional:!0,M:ba}}\nfunction W(a,b){return{name:a||\"\",K:\"a valid object\",optional:!!b,M:q}}function Ol(a,b){return{name:a||\"\",K:\"a function\",optional:!!b,M:p}}function Pl(a,b){return{name:a||\"\",K:\"null\",optional:!!b,M:ea}}function Ql(){return{name:\"\",K:\"an HTML element\",optional:!1,M:function(a){return!!(a&&a instanceof Element)}}}function Rl(){return{name:\"auth\",K:\"an instance of Firebase Auth\",optional:!0,M:function(a){return!!(a&&a instanceof wl)}}}\nfunction Sl(){return{name:\"app\",K:\"an instance of Firebase App\",optional:!0,M:function(a){return!!(a&&a instanceof firebase.app.App)}}}function Tl(a){return{name:a?a+\"Credential\":\"credential\",K:a?\"a valid \"+a+\" credential\":\"a valid credential\",optional:!1,M:function(b){if(!b)return!1;var c=!a||b.providerId===a;return!(!b.wa||!c)}}}\nfunction Ul(){return{name:\"authProvider\",K:\"a valid Auth provider\",optional:!1,M:function(a){return!!(a&&a.providerId&&a.hasOwnProperty&&a.hasOwnProperty(\"isOAuthProvider\"))}}}function Vl(){return{name:\"applicationVerifier\",K:\"an implementation of firebase.auth.ApplicationVerifier\",optional:!1,M:function(a){return!!(a&&m(a.type)&&p(a.verify))}}}function X(a,b,c,d){return{name:c||\"\",K:a.K+\" or \"+b.K,optional:!!d,M:function(c){return a.M(c)||b.M(c)}}};function Wl(a,b,c,d,e,f){M(this,\"type\",\"recaptcha\");this.b=this.c=null;this.m=!1;this.l=b;this.a=c||{theme:\"light\",type:\"image\"};this.g=[];if(this.a[Xl])throw new N(\"argument-error\",\"sitekey should not be provided for reCAPTCHA as one is automatically provisioned for the current project.\");this.h=\"invisible\"===this.a[Yl];if(!wc(b)||!this.h&&wc(b).hasChildNodes())throw new N(\"argument-error\",\"reCAPTCHA container is either not found or already contains inner elements!\");this.u=new Fh(a,f||null,e||null);\nthis.o=d||function(){return null};var g=this;this.i=[];var l=this.a[Zl];this.a[Zl]=function(a){$l(g,a);if(\"function\"===typeof l)l(a);else if(\"string\"===typeof l){var b=L(l,k);\"function\"===typeof b&&b(a)}};var n=this.a[am];this.a[am]=function(){$l(g,null);if(\"function\"===typeof n)n();else if(\"string\"===typeof n){var a=L(n,k);\"function\"===typeof a&&a()}}}var Zl=\"callback\",am=\"expired-callback\",Xl=\"sitekey\",Yl=\"size\";function $l(a,b){for(var c=0;c= 0; i--) {\n timeStampChars[i] = PUSH_CHARS.charAt(now % 64);\n // NOTE: Can't use << here because javascript will convert to int and lose\n // the upper bits.\n now = Math.floor(now / 64);\n }\n util_1.assert(now === 0, 'Cannot push at time == 0');\n var id = timeStampChars.join('');\n if (!duplicateTime) {\n for (i = 0; i < 12; i++) {\n lastRandChars[i] = Math.floor(Math.random() * 64);\n }\n }\n else {\n // If the timestamp hasn't changed since last push, use the same random\n // number, except incremented by 1.\n for (i = 11; i >= 0 && lastRandChars[i] === 63; i--) {\n lastRandChars[i] = 0;\n }\n lastRandChars[i]++;\n }\n for (i = 0; i < 12; i++) {\n id += PUSH_CHARS.charAt(lastRandChars[i]);\n }\n util_1.assert(id.length === 20, 'nextPushId: Length should be 20.');\n return id;\n };\n})();\n\n//# sourceMappingURL=NextPushId.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar DataSnapshot_1 = require(\"../../api/DataSnapshot\");\nvar Event_1 = require(\"./Event\");\nvar util_1 = require(\"@firebase/util\");\nvar util_2 = require(\"@firebase/util\");\n/**\n * Represents registration for 'value' events.\n */\nvar ValueEventRegistration = /** @class */ (function () {\n /**\n * @param {?function(!DataSnapshot)} callback_\n * @param {?function(Error)} cancelCallback_\n * @param {?Object} context_\n */\n function ValueEventRegistration(callback_, cancelCallback_, context_) {\n this.callback_ = callback_;\n this.cancelCallback_ = cancelCallback_;\n this.context_ = context_;\n }\n /**\n * @inheritDoc\n */\n ValueEventRegistration.prototype.respondsTo = function (eventType) {\n return eventType === 'value';\n };\n /**\n * @inheritDoc\n */\n ValueEventRegistration.prototype.createEvent = function (change, query) {\n var index = query.getQueryParams().getIndex();\n return new Event_1.DataEvent('value', this, new DataSnapshot_1.DataSnapshot(change.snapshotNode, query.getRef(), index));\n };\n /**\n * @inheritDoc\n */\n ValueEventRegistration.prototype.getEventRunner = function (eventData) {\n var ctx = this.context_;\n if (eventData.getEventType() === 'cancel') {\n util_2.assert(this.cancelCallback_, 'Raising a cancel event on a listener with no cancel callback');\n var cancelCB_1 = this.cancelCallback_;\n return function () {\n // We know that error exists, we checked above that this is a cancel event\n cancelCB_1.call(ctx, eventData.error);\n };\n }\n else {\n var cb_1 = this.callback_;\n return function () {\n cb_1.call(ctx, eventData.snapshot);\n };\n }\n };\n /**\n * @inheritDoc\n */\n ValueEventRegistration.prototype.createCancelEvent = function (error, path) {\n if (this.cancelCallback_) {\n return new Event_1.CancelEvent(this, error, path);\n }\n else {\n return null;\n }\n };\n /**\n * @inheritDoc\n */\n ValueEventRegistration.prototype.matches = function (other) {\n if (!(other instanceof ValueEventRegistration)) {\n return false;\n }\n else if (!other.callback_ || !this.callback_) {\n // If no callback specified, we consider it to match any callback.\n return true;\n }\n else {\n return (other.callback_ === this.callback_ && other.context_ === this.context_);\n }\n };\n /**\n * @inheritDoc\n */\n ValueEventRegistration.prototype.hasAnyCallback = function () {\n return this.callback_ !== null;\n };\n return ValueEventRegistration;\n}());\nexports.ValueEventRegistration = ValueEventRegistration;\n/**\n * Represents the registration of 1 or more child_xxx events.\n *\n * Currently, it is always exactly 1 child_xxx event, but the idea is we might let you\n * register a group of callbacks together in the future.\n *\n * @constructor\n * @implements {EventRegistration}\n */\nvar ChildEventRegistration = /** @class */ (function () {\n /**\n * @param {?Object.} callbacks_\n * @param {?function(Error)} cancelCallback_\n * @param {Object=} context_\n */\n function ChildEventRegistration(callbacks_, cancelCallback_, context_) {\n this.callbacks_ = callbacks_;\n this.cancelCallback_ = cancelCallback_;\n this.context_ = context_;\n }\n /**\n * @inheritDoc\n */\n ChildEventRegistration.prototype.respondsTo = function (eventType) {\n var eventToCheck = eventType === 'children_added' ? 'child_added' : eventType;\n eventToCheck =\n eventToCheck === 'children_removed' ? 'child_removed' : eventToCheck;\n return util_1.contains(this.callbacks_, eventToCheck);\n };\n /**\n * @inheritDoc\n */\n ChildEventRegistration.prototype.createCancelEvent = function (error, path) {\n if (this.cancelCallback_) {\n return new Event_1.CancelEvent(this, error, path);\n }\n else {\n return null;\n }\n };\n /**\n * @inheritDoc\n */\n ChildEventRegistration.prototype.createEvent = function (change, query) {\n util_2.assert(change.childName != null, 'Child events should have a childName.');\n var ref = query.getRef().child(/** @type {!string} */ (change.childName));\n var index = query.getQueryParams().getIndex();\n return new Event_1.DataEvent(change.type, this, new DataSnapshot_1.DataSnapshot(change.snapshotNode, ref, index), change.prevName);\n };\n /**\n * @inheritDoc\n */\n ChildEventRegistration.prototype.getEventRunner = function (eventData) {\n var ctx = this.context_;\n if (eventData.getEventType() === 'cancel') {\n util_2.assert(this.cancelCallback_, 'Raising a cancel event on a listener with no cancel callback');\n var cancelCB_2 = this.cancelCallback_;\n return function () {\n // We know that error exists, we checked above that this is a cancel event\n cancelCB_2.call(ctx, eventData.error);\n };\n }\n else {\n var cb_2 = this.callbacks_[eventData.eventType];\n return function () {\n cb_2.call(ctx, eventData.snapshot, eventData.prevName);\n };\n }\n };\n /**\n * @inheritDoc\n */\n ChildEventRegistration.prototype.matches = function (other) {\n if (other instanceof ChildEventRegistration) {\n if (!this.callbacks_ || !other.callbacks_) {\n return true;\n }\n else if (this.context_ === other.context_) {\n var otherCount = util_1.getCount(other.callbacks_);\n var thisCount = util_1.getCount(this.callbacks_);\n if (otherCount === thisCount) {\n // If count is 1, do an exact match on eventType, if either is defined but null, it's a match.\n // If event types don't match, not a match\n // If count is not 1, exact match across all\n if (otherCount === 1) {\n var otherKey /** @type {!string} */ = util_1.getAnyKey(other.callbacks_);\n var thisKey /** @type {!string} */ = util_1.getAnyKey(this.callbacks_);\n return (thisKey === otherKey &&\n (!other.callbacks_[otherKey] ||\n !this.callbacks_[thisKey] ||\n other.callbacks_[otherKey] === this.callbacks_[thisKey]));\n }\n else {\n // Exact match on each key.\n return util_1.every(this.callbacks_, function (eventType, cb) { return other.callbacks_[eventType] === cb; });\n }\n }\n }\n }\n return false;\n };\n /**\n * @inheritDoc\n */\n ChildEventRegistration.prototype.hasAnyCallback = function () {\n return this.callbacks_ !== null;\n };\n return ChildEventRegistration;\n}());\nexports.ChildEventRegistration = ChildEventRegistration;\n\n//# sourceMappingURL=EventRegistration.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\n/**\n * Encapsulates the data needed to raise an event\n * @implements {Event}\n */\nvar DataEvent = /** @class */ (function () {\n /**\n * @param {!string} eventType One of: value, child_added, child_changed, child_moved, child_removed\n * @param {!EventRegistration} eventRegistration The function to call to with the event data. User provided\n * @param {!DataSnapshot} snapshot The data backing the event\n * @param {?string=} prevName Optional, the name of the previous child for child_* events.\n */\n function DataEvent(eventType, eventRegistration, snapshot, prevName) {\n this.eventType = eventType;\n this.eventRegistration = eventRegistration;\n this.snapshot = snapshot;\n this.prevName = prevName;\n }\n /**\n * @inheritDoc\n */\n DataEvent.prototype.getPath = function () {\n var ref = this.snapshot.getRef();\n if (this.eventType === 'value') {\n return ref.path;\n }\n else {\n return ref.getParent().path;\n }\n };\n /**\n * @inheritDoc\n */\n DataEvent.prototype.getEventType = function () {\n return this.eventType;\n };\n /**\n * @inheritDoc\n */\n DataEvent.prototype.getEventRunner = function () {\n return this.eventRegistration.getEventRunner(this);\n };\n /**\n * @inheritDoc\n */\n DataEvent.prototype.toString = function () {\n return (this.getPath().toString() +\n ':' +\n this.eventType +\n ':' +\n util_1.stringify(this.snapshot.exportVal()));\n };\n return DataEvent;\n}());\nexports.DataEvent = DataEvent;\nvar CancelEvent = /** @class */ (function () {\n /**\n * @param {EventRegistration} eventRegistration\n * @param {Error} error\n * @param {!Path} path\n */\n function CancelEvent(eventRegistration, error, path) {\n this.eventRegistration = eventRegistration;\n this.error = error;\n this.path = path;\n }\n /**\n * @inheritDoc\n */\n CancelEvent.prototype.getPath = function () {\n return this.path;\n };\n /**\n * @inheritDoc\n */\n CancelEvent.prototype.getEventType = function () {\n return 'cancel';\n };\n /**\n * @inheritDoc\n */\n CancelEvent.prototype.getEventRunner = function () {\n return this.eventRegistration.getEventRunner(this);\n };\n /**\n * @inheritDoc\n */\n CancelEvent.prototype.toString = function () {\n return this.path.toString() + ':cancel';\n };\n return CancelEvent;\n}());\nexports.CancelEvent = CancelEvent;\n\n//# sourceMappingURL=Event.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar util_2 = require(\"./util/util\");\nvar AckUserWrite_1 = require(\"./operation/AckUserWrite\");\nvar ChildrenNode_1 = require(\"./snap/ChildrenNode\");\nvar util_3 = require(\"@firebase/util\");\nvar ImmutableTree_1 = require(\"./util/ImmutableTree\");\nvar ListenComplete_1 = require(\"./operation/ListenComplete\");\nvar Merge_1 = require(\"./operation/Merge\");\nvar Operation_1 = require(\"./operation/Operation\");\nvar Overwrite_1 = require(\"./operation/Overwrite\");\nvar Path_1 = require(\"./util/Path\");\nvar SyncPoint_1 = require(\"./SyncPoint\");\nvar WriteTree_1 = require(\"./WriteTree\");\n/**\n * SyncTree is the central class for managing event callback registration, data caching, views\n * (query processing), and event generation. There are typically two SyncTree instances for\n * each Repo, one for the normal Firebase data, and one for the .info data.\n *\n * It has a number of responsibilities, including:\n * - Tracking all user event callbacks (registered via addEventRegistration() and removeEventRegistration()).\n * - Applying and caching data changes for user set(), transaction(), and update() calls\n * (applyUserOverwrite(), applyUserMerge()).\n * - Applying and caching data changes for server data changes (applyServerOverwrite(),\n * applyServerMerge()).\n * - Generating user-facing events for server and user changes (all of the apply* methods\n * return the set of events that need to be raised as a result).\n * - Maintaining the appropriate set of server listens to ensure we are always subscribed\n * to the correct set of paths and queries to satisfy the current set of user event\n * callbacks (listens are started/stopped using the provided listenProvider).\n *\n * NOTE: Although SyncTree tracks event callbacks and calculates events to raise, the actual\n * events are returned to the caller rather than raised synchronously.\n *\n * @constructor\n */\nvar SyncTree = /** @class */ (function () {\n /**\n * @param {!ListenProvider} listenProvider_ Used by SyncTree to start / stop listening\n * to server data.\n */\n function SyncTree(listenProvider_) {\n this.listenProvider_ = listenProvider_;\n /**\n * Tree of SyncPoints. There's a SyncPoint at any location that has 1 or more views.\n * @type {!ImmutableTree.}\n * @private\n */\n this.syncPointTree_ = ImmutableTree_1.ImmutableTree.Empty;\n /**\n * A tree of all pending user writes (user-initiated set()'s, transaction()'s, update()'s, etc.).\n * @type {!WriteTree}\n * @private\n */\n this.pendingWriteTree_ = new WriteTree_1.WriteTree();\n this.tagToQueryMap_ = {};\n this.queryToTagMap_ = {};\n }\n /**\n * Apply the data changes for a user-generated set() or transaction() call.\n *\n * @param {!Path} path\n * @param {!Node} newData\n * @param {number} writeId\n * @param {boolean=} visible\n * @return {!Array.} Events to raise.\n */\n SyncTree.prototype.applyUserOverwrite = function (path, newData, writeId, visible) {\n // Record pending write.\n this.pendingWriteTree_.addOverwrite(path, newData, writeId, visible);\n if (!visible) {\n return [];\n }\n else {\n return this.applyOperationToSyncPoints_(new Overwrite_1.Overwrite(Operation_1.OperationSource.User, path, newData));\n }\n };\n /**\n * Apply the data from a user-generated update() call\n *\n * @param {!Path} path\n * @param {!Object.} changedChildren\n * @param {!number} writeId\n * @return {!Array.} Events to raise.\n */\n SyncTree.prototype.applyUserMerge = function (path, changedChildren, writeId) {\n // Record pending merge.\n this.pendingWriteTree_.addMerge(path, changedChildren, writeId);\n var changeTree = ImmutableTree_1.ImmutableTree.fromObject(changedChildren);\n return this.applyOperationToSyncPoints_(new Merge_1.Merge(Operation_1.OperationSource.User, path, changeTree));\n };\n /**\n * Acknowledge a pending user write that was previously registered with applyUserOverwrite() or applyUserMerge().\n *\n * @param {!number} writeId\n * @param {boolean=} revert True if the given write failed and needs to be reverted\n * @return {!Array.} Events to raise.\n */\n SyncTree.prototype.ackUserWrite = function (writeId, revert) {\n if (revert === void 0) { revert = false; }\n var write = this.pendingWriteTree_.getWrite(writeId);\n var needToReevaluate = this.pendingWriteTree_.removeWrite(writeId);\n if (!needToReevaluate) {\n return [];\n }\n else {\n var affectedTree_1 = ImmutableTree_1.ImmutableTree.Empty;\n if (write.snap != null) {\n // overwrite\n affectedTree_1 = affectedTree_1.set(Path_1.Path.Empty, true);\n }\n else {\n util_3.forEach(write.children, function (pathString, node) {\n affectedTree_1 = affectedTree_1.set(new Path_1.Path(pathString), node);\n });\n }\n return this.applyOperationToSyncPoints_(new AckUserWrite_1.AckUserWrite(write.path, affectedTree_1, revert));\n }\n };\n /**\n * Apply new server data for the specified path..\n *\n * @param {!Path} path\n * @param {!Node} newData\n * @return {!Array.} Events to raise.\n */\n SyncTree.prototype.applyServerOverwrite = function (path, newData) {\n return this.applyOperationToSyncPoints_(new Overwrite_1.Overwrite(Operation_1.OperationSource.Server, path, newData));\n };\n /**\n * Apply new server data to be merged in at the specified path.\n *\n * @param {!Path} path\n * @param {!Object.} changedChildren\n * @return {!Array.} Events to raise.\n */\n SyncTree.prototype.applyServerMerge = function (path, changedChildren) {\n var changeTree = ImmutableTree_1.ImmutableTree.fromObject(changedChildren);\n return this.applyOperationToSyncPoints_(new Merge_1.Merge(Operation_1.OperationSource.Server, path, changeTree));\n };\n /**\n * Apply a listen complete for a query\n *\n * @param {!Path} path\n * @return {!Array.} Events to raise.\n */\n SyncTree.prototype.applyListenComplete = function (path) {\n return this.applyOperationToSyncPoints_(new ListenComplete_1.ListenComplete(Operation_1.OperationSource.Server, path));\n };\n /**\n * Apply new server data for the specified tagged query.\n *\n * @param {!Path} path\n * @param {!Node} snap\n * @param {!number} tag\n * @return {!Array.} Events to raise.\n */\n SyncTree.prototype.applyTaggedQueryOverwrite = function (path, snap, tag) {\n var queryKey = this.queryKeyForTag_(tag);\n if (queryKey != null) {\n var r = SyncTree.parseQueryKey_(queryKey);\n var queryPath = r.path, queryId = r.queryId;\n var relativePath = Path_1.Path.relativePath(queryPath, path);\n var op = new Overwrite_1.Overwrite(Operation_1.OperationSource.forServerTaggedQuery(queryId), relativePath, snap);\n return this.applyTaggedOperation_(queryPath, op);\n }\n else {\n // Query must have been removed already\n return [];\n }\n };\n /**\n * Apply server data to be merged in for the specified tagged query.\n *\n * @param {!Path} path\n * @param {!Object.} changedChildren\n * @param {!number} tag\n * @return {!Array.} Events to raise.\n */\n SyncTree.prototype.applyTaggedQueryMerge = function (path, changedChildren, tag) {\n var queryKey = this.queryKeyForTag_(tag);\n if (queryKey) {\n var r = SyncTree.parseQueryKey_(queryKey);\n var queryPath = r.path, queryId = r.queryId;\n var relativePath = Path_1.Path.relativePath(queryPath, path);\n var changeTree = ImmutableTree_1.ImmutableTree.fromObject(changedChildren);\n var op = new Merge_1.Merge(Operation_1.OperationSource.forServerTaggedQuery(queryId), relativePath, changeTree);\n return this.applyTaggedOperation_(queryPath, op);\n }\n else {\n // We've already removed the query. No big deal, ignore the update\n return [];\n }\n };\n /**\n * Apply a listen complete for a tagged query\n *\n * @param {!Path} path\n * @param {!number} tag\n * @return {!Array.} Events to raise.\n */\n SyncTree.prototype.applyTaggedListenComplete = function (path, tag) {\n var queryKey = this.queryKeyForTag_(tag);\n if (queryKey) {\n var r = SyncTree.parseQueryKey_(queryKey);\n var queryPath = r.path, queryId = r.queryId;\n var relativePath = Path_1.Path.relativePath(queryPath, path);\n var op = new ListenComplete_1.ListenComplete(Operation_1.OperationSource.forServerTaggedQuery(queryId), relativePath);\n return this.applyTaggedOperation_(queryPath, op);\n }\n else {\n // We've already removed the query. No big deal, ignore the update\n return [];\n }\n };\n /**\n * Add an event callback for the specified query.\n *\n * @param {!Query} query\n * @param {!EventRegistration} eventRegistration\n * @return {!Array.} Events to raise.\n */\n SyncTree.prototype.addEventRegistration = function (query, eventRegistration) {\n var path = query.path;\n var serverCache = null;\n var foundAncestorDefaultView = false;\n // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\n // Consider optimizing this once there's a better understanding of what actual behavior will be.\n this.syncPointTree_.foreachOnPath(path, function (pathToSyncPoint, sp) {\n var relativePath = Path_1.Path.relativePath(pathToSyncPoint, path);\n serverCache = serverCache || sp.getCompleteServerCache(relativePath);\n foundAncestorDefaultView =\n foundAncestorDefaultView || sp.hasCompleteView();\n });\n var syncPoint = this.syncPointTree_.get(path);\n if (!syncPoint) {\n syncPoint = new SyncPoint_1.SyncPoint();\n this.syncPointTree_ = this.syncPointTree_.set(path, syncPoint);\n }\n else {\n foundAncestorDefaultView =\n foundAncestorDefaultView || syncPoint.hasCompleteView();\n serverCache = serverCache || syncPoint.getCompleteServerCache(Path_1.Path.Empty);\n }\n var serverCacheComplete;\n if (serverCache != null) {\n serverCacheComplete = true;\n }\n else {\n serverCacheComplete = false;\n serverCache = ChildrenNode_1.ChildrenNode.EMPTY_NODE;\n var subtree = this.syncPointTree_.subtree(path);\n subtree.foreachChild(function (childName, childSyncPoint) {\n var completeCache = childSyncPoint.getCompleteServerCache(Path_1.Path.Empty);\n if (completeCache) {\n serverCache = serverCache.updateImmediateChild(childName, completeCache);\n }\n });\n }\n var viewAlreadyExists = syncPoint.viewExistsForQuery(query);\n if (!viewAlreadyExists && !query.getQueryParams().loadsAllData()) {\n // We need to track a tag for this query\n var queryKey = SyncTree.makeQueryKey_(query);\n util_1.assert(!(queryKey in this.queryToTagMap_), 'View does not exist, but we have a tag');\n var tag = SyncTree.getNextQueryTag_();\n this.queryToTagMap_[queryKey] = tag;\n // Coerce to string to avoid sparse arrays.\n this.tagToQueryMap_['_' + tag] = queryKey;\n }\n var writesCache = this.pendingWriteTree_.childWrites(path);\n var events = syncPoint.addEventRegistration(query, eventRegistration, writesCache, serverCache, serverCacheComplete);\n if (!viewAlreadyExists && !foundAncestorDefaultView) {\n var view /** @type !View */ = syncPoint.viewForQuery(query);\n events = events.concat(this.setupListener_(query, view));\n }\n return events;\n };\n /**\n * Remove event callback(s).\n *\n * If query is the default query, we'll check all queries for the specified eventRegistration.\n * If eventRegistration is null, we'll remove all callbacks for the specified query/queries.\n *\n * @param {!Query} query\n * @param {?EventRegistration} eventRegistration If null, all callbacks are removed.\n * @param {Error=} cancelError If a cancelError is provided, appropriate cancel events will be returned.\n * @return {!Array.} Cancel events, if cancelError was provided.\n */\n SyncTree.prototype.removeEventRegistration = function (query, eventRegistration, cancelError) {\n var _this = this;\n // Find the syncPoint first. Then deal with whether or not it has matching listeners\n var path = query.path;\n var maybeSyncPoint = this.syncPointTree_.get(path);\n var cancelEvents = [];\n // A removal on a default query affects all queries at that location. A removal on an indexed query, even one without\n // other query constraints, does *not* affect all queries at that location. So this check must be for 'default', and\n // not loadsAllData().\n if (maybeSyncPoint &&\n (query.queryIdentifier() === 'default' ||\n maybeSyncPoint.viewExistsForQuery(query))) {\n /**\n * @type {{removed: !Array., events: !Array.}}\n */\n var removedAndEvents = maybeSyncPoint.removeEventRegistration(query, eventRegistration, cancelError);\n if (maybeSyncPoint.isEmpty()) {\n this.syncPointTree_ = this.syncPointTree_.remove(path);\n }\n var removed = removedAndEvents.removed;\n cancelEvents = removedAndEvents.events;\n // We may have just removed one of many listeners and can short-circuit this whole process\n // We may also not have removed a default listener, in which case all of the descendant listeners should already be\n // properly set up.\n //\n // Since indexed queries can shadow if they don't have other query constraints, check for loadsAllData(), instead of\n // queryId === 'default'\n var removingDefault = -1 !==\n removed.findIndex(function (query) {\n return query.getQueryParams().loadsAllData();\n });\n var covered = this.syncPointTree_.findOnPath(path, function (relativePath, parentSyncPoint) {\n return parentSyncPoint.hasCompleteView();\n });\n if (removingDefault && !covered) {\n var subtree = this.syncPointTree_.subtree(path);\n // There are potentially child listeners. Determine what if any listens we need to send before executing the\n // removal\n if (!subtree.isEmpty()) {\n // We need to fold over our subtree and collect the listeners to send\n var newViews = this.collectDistinctViewsForSubTree_(subtree);\n // Ok, we've collected all the listens we need. Set them up.\n for (var i = 0; i < newViews.length; ++i) {\n var view = newViews[i], newQuery = view.getQuery();\n var listener = this.createListenerForView_(view);\n this.listenProvider_.startListening(SyncTree.queryForListening_(newQuery), this.tagForQuery_(newQuery), listener.hashFn, listener.onComplete);\n }\n }\n else {\n // There's nothing below us, so nothing we need to start listening on\n }\n }\n // If we removed anything and we're not covered by a higher up listen, we need to stop listening on this query\n // The above block has us covered in terms of making sure we're set up on listens lower in the tree.\n // Also, note that if we have a cancelError, it's already been removed at the provider level.\n if (!covered && removed.length > 0 && !cancelError) {\n // If we removed a default, then we weren't listening on any of the other queries here. Just cancel the one\n // default. Otherwise, we need to iterate through and cancel each individual query\n if (removingDefault) {\n // We don't tag default listeners\n var defaultTag = null;\n this.listenProvider_.stopListening(SyncTree.queryForListening_(query), defaultTag);\n }\n else {\n removed.forEach(function (queryToRemove) {\n var tagToRemove = _this.queryToTagMap_[SyncTree.makeQueryKey_(queryToRemove)];\n _this.listenProvider_.stopListening(SyncTree.queryForListening_(queryToRemove), tagToRemove);\n });\n }\n }\n // Now, clear all of the tags we're tracking for the removed listens\n this.removeTags_(removed);\n }\n else {\n // No-op, this listener must've been already removed\n }\n return cancelEvents;\n };\n /**\n * Returns a complete cache, if we have one, of the data at a particular path. The location must have a listener above\n * it, but as this is only used by transaction code, that should always be the case anyways.\n *\n * Note: this method will *include* hidden writes from transaction with applyLocally set to false.\n * @param {!Path} path The path to the data we want\n * @param {Array.=} writeIdsToExclude A specific set to be excluded\n * @return {?Node}\n */\n SyncTree.prototype.calcCompleteEventCache = function (path, writeIdsToExclude) {\n var includeHiddenSets = true;\n var writeTree = this.pendingWriteTree_;\n var serverCache = this.syncPointTree_.findOnPath(path, function (pathSoFar, syncPoint) {\n var relativePath = Path_1.Path.relativePath(pathSoFar, path);\n var serverCache = syncPoint.getCompleteServerCache(relativePath);\n if (serverCache) {\n return serverCache;\n }\n });\n return writeTree.calcCompleteEventCache(path, serverCache, writeIdsToExclude, includeHiddenSets);\n };\n /**\n * This collapses multiple unfiltered views into a single view, since we only need a single\n * listener for them.\n *\n * @param {!ImmutableTree.} subtree\n * @return {!Array.}\n * @private\n */\n SyncTree.prototype.collectDistinctViewsForSubTree_ = function (subtree) {\n return subtree.fold(function (relativePath, maybeChildSyncPoint, childMap) {\n if (maybeChildSyncPoint && maybeChildSyncPoint.hasCompleteView()) {\n var completeView = maybeChildSyncPoint.getCompleteView();\n return [completeView];\n }\n else {\n // No complete view here, flatten any deeper listens into an array\n var views_1 = [];\n if (maybeChildSyncPoint) {\n views_1 = maybeChildSyncPoint.getQueryViews();\n }\n util_3.forEach(childMap, function (key, childViews) {\n views_1 = views_1.concat(childViews);\n });\n return views_1;\n }\n });\n };\n /**\n * @param {!Array.} queries\n * @private\n */\n SyncTree.prototype.removeTags_ = function (queries) {\n for (var j = 0; j < queries.length; ++j) {\n var removedQuery = queries[j];\n if (!removedQuery.getQueryParams().loadsAllData()) {\n // We should have a tag for this\n var removedQueryKey = SyncTree.makeQueryKey_(removedQuery);\n var removedQueryTag = this.queryToTagMap_[removedQueryKey];\n delete this.queryToTagMap_[removedQueryKey];\n delete this.tagToQueryMap_['_' + removedQueryTag];\n }\n }\n };\n /**\n * Normalizes a query to a query we send the server for listening\n * @param {!Query} query\n * @return {!Query} The normalized query\n * @private\n */\n SyncTree.queryForListening_ = function (query) {\n if (query.getQueryParams().loadsAllData() &&\n !query.getQueryParams().isDefault()) {\n // We treat queries that load all data as default queries\n // Cast is necessary because ref() technically returns Firebase which is actually fb.api.Firebase which inherits\n // from Query\n return /** @type {!Query} */ query.getRef();\n }\n else {\n return query;\n }\n };\n /**\n * For a given new listen, manage the de-duplication of outstanding subscriptions.\n *\n * @param {!Query} query\n * @param {!View} view\n * @return {!Array.} This method can return events to support synchronous data sources\n * @private\n */\n SyncTree.prototype.setupListener_ = function (query, view) {\n var path = query.path;\n var tag = this.tagForQuery_(query);\n var listener = this.createListenerForView_(view);\n var events = this.listenProvider_.startListening(SyncTree.queryForListening_(query), tag, listener.hashFn, listener.onComplete);\n var subtree = this.syncPointTree_.subtree(path);\n // The root of this subtree has our query. We're here because we definitely need to send a listen for that, but we\n // may need to shadow other listens as well.\n if (tag) {\n util_1.assert(!subtree.value.hasCompleteView(), \"If we're adding a query, it shouldn't be shadowed\");\n }\n else {\n // Shadow everything at or below this location, this is a default listener.\n var queriesToStop = subtree.fold(function (relativePath, maybeChildSyncPoint, childMap) {\n if (!relativePath.isEmpty() &&\n maybeChildSyncPoint &&\n maybeChildSyncPoint.hasCompleteView()) {\n return [maybeChildSyncPoint.getCompleteView().getQuery()];\n }\n else {\n // No default listener here, flatten any deeper queries into an array\n var queries_1 = [];\n if (maybeChildSyncPoint) {\n queries_1 = queries_1.concat(maybeChildSyncPoint.getQueryViews().map(function (view) { return view.getQuery(); }));\n }\n util_3.forEach(childMap, function (key, childQueries) {\n queries_1 = queries_1.concat(childQueries);\n });\n return queries_1;\n }\n });\n for (var i = 0; i < queriesToStop.length; ++i) {\n var queryToStop = queriesToStop[i];\n this.listenProvider_.stopListening(SyncTree.queryForListening_(queryToStop), this.tagForQuery_(queryToStop));\n }\n }\n return events;\n };\n /**\n *\n * @param {!View} view\n * @return {{hashFn: function(), onComplete: function(!string, *)}}\n * @private\n */\n SyncTree.prototype.createListenerForView_ = function (view) {\n var _this = this;\n var query = view.getQuery();\n var tag = this.tagForQuery_(query);\n return {\n hashFn: function () {\n var cache = view.getServerCache() || ChildrenNode_1.ChildrenNode.EMPTY_NODE;\n return cache.hash();\n },\n onComplete: function (status) {\n if (status === 'ok') {\n if (tag) {\n return _this.applyTaggedListenComplete(query.path, tag);\n }\n else {\n return _this.applyListenComplete(query.path);\n }\n }\n else {\n // If a listen failed, kill all of the listeners here, not just the one that triggered the error.\n // Note that this may need to be scoped to just this listener if we change permissions on filtered children\n var error = util_2.errorForServerCode(status, query);\n return _this.removeEventRegistration(query, \n /*eventRegistration*/ null, error);\n }\n }\n };\n };\n /**\n * Given a query, computes a \"queryKey\" suitable for use in our queryToTagMap_.\n * @private\n * @param {!Query} query\n * @return {string}\n */\n SyncTree.makeQueryKey_ = function (query) {\n return query.path.toString() + '$' + query.queryIdentifier();\n };\n /**\n * Given a queryKey (created by makeQueryKey), parse it back into a path and queryId.\n * @private\n * @param {!string} queryKey\n * @return {{queryId: !string, path: !Path}}\n */\n SyncTree.parseQueryKey_ = function (queryKey) {\n var splitIndex = queryKey.indexOf('$');\n util_1.assert(splitIndex !== -1 && splitIndex < queryKey.length - 1, 'Bad queryKey.');\n return {\n queryId: queryKey.substr(splitIndex + 1),\n path: new Path_1.Path(queryKey.substr(0, splitIndex))\n };\n };\n /**\n * Return the query associated with the given tag, if we have one\n * @param {!number} tag\n * @return {?string}\n * @private\n */\n SyncTree.prototype.queryKeyForTag_ = function (tag) {\n return this.tagToQueryMap_['_' + tag];\n };\n /**\n * Return the tag associated with the given query.\n * @param {!Query} query\n * @return {?number}\n * @private\n */\n SyncTree.prototype.tagForQuery_ = function (query) {\n var queryKey = SyncTree.makeQueryKey_(query);\n return util_3.safeGet(this.queryToTagMap_, queryKey);\n };\n /**\n * Static accessor for query tags.\n * @return {number}\n * @private\n */\n SyncTree.getNextQueryTag_ = function () {\n return SyncTree.nextQueryTag_++;\n };\n /**\n * A helper method to apply tagged operations\n *\n * @param {!Path} queryPath\n * @param {!Operation} operation\n * @return {!Array.}\n * @private\n */\n SyncTree.prototype.applyTaggedOperation_ = function (queryPath, operation) {\n var syncPoint = this.syncPointTree_.get(queryPath);\n util_1.assert(syncPoint, \"Missing sync point for query tag that we're tracking\");\n var writesCache = this.pendingWriteTree_.childWrites(queryPath);\n return syncPoint.applyOperation(operation, writesCache, \n /*serverCache=*/ null);\n };\n /**\n * A helper method that visits all descendant and ancestor SyncPoints, applying the operation.\n *\n * NOTES:\n * - Descendant SyncPoints will be visited first (since we raise events depth-first).\n \n * - We call applyOperation() on each SyncPoint passing three things:\n * 1. A version of the Operation that has been made relative to the SyncPoint location.\n * 2. A WriteTreeRef of any writes we have cached at the SyncPoint location.\n * 3. A snapshot Node with cached server data, if we have it.\n \n * - We concatenate all of the events returned by each SyncPoint and return the result.\n *\n * @param {!Operation} operation\n * @return {!Array.}\n * @private\n */\n SyncTree.prototype.applyOperationToSyncPoints_ = function (operation) {\n return this.applyOperationHelper_(operation, this.syncPointTree_, \n /*serverCache=*/ null, this.pendingWriteTree_.childWrites(Path_1.Path.Empty));\n };\n /**\n * Recursive helper for applyOperationToSyncPoints_\n *\n * @private\n * @param {!Operation} operation\n * @param {ImmutableTree.} syncPointTree\n * @param {?Node} serverCache\n * @param {!WriteTreeRef} writesCache\n * @return {!Array.}\n */\n SyncTree.prototype.applyOperationHelper_ = function (operation, syncPointTree, serverCache, writesCache) {\n if (operation.path.isEmpty()) {\n return this.applyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache);\n }\n else {\n var syncPoint = syncPointTree.get(Path_1.Path.Empty);\n // If we don't have cached server data, see if we can get it from this SyncPoint.\n if (serverCache == null && syncPoint != null) {\n serverCache = syncPoint.getCompleteServerCache(Path_1.Path.Empty);\n }\n var events = [];\n var childName = operation.path.getFront();\n var childOperation = operation.operationForChild(childName);\n var childTree = syncPointTree.children.get(childName);\n if (childTree && childOperation) {\n var childServerCache = serverCache\n ? serverCache.getImmediateChild(childName)\n : null;\n var childWritesCache = writesCache.child(childName);\n events = events.concat(this.applyOperationHelper_(childOperation, childTree, childServerCache, childWritesCache));\n }\n if (syncPoint) {\n events = events.concat(syncPoint.applyOperation(operation, writesCache, serverCache));\n }\n return events;\n }\n };\n /**\n * Recursive helper for applyOperationToSyncPoints_\n *\n * @private\n * @param {!Operation} operation\n * @param {ImmutableTree.} syncPointTree\n * @param {?Node} serverCache\n * @param {!WriteTreeRef} writesCache\n * @return {!Array.}\n */\n SyncTree.prototype.applyOperationDescendantsHelper_ = function (operation, syncPointTree, serverCache, writesCache) {\n var _this = this;\n var syncPoint = syncPointTree.get(Path_1.Path.Empty);\n // If we don't have cached server data, see if we can get it from this SyncPoint.\n if (serverCache == null && syncPoint != null) {\n serverCache = syncPoint.getCompleteServerCache(Path_1.Path.Empty);\n }\n var events = [];\n syncPointTree.children.inorderTraversal(function (childName, childTree) {\n var childServerCache = serverCache\n ? serverCache.getImmediateChild(childName)\n : null;\n var childWritesCache = writesCache.child(childName);\n var childOperation = operation.operationForChild(childName);\n if (childOperation) {\n events = events.concat(_this.applyOperationDescendantsHelper_(childOperation, childTree, childServerCache, childWritesCache));\n }\n });\n if (syncPoint) {\n events = events.concat(syncPoint.applyOperation(operation, writesCache, serverCache));\n }\n return events;\n };\n /**\n * Static tracker for next query tag.\n * @type {number}\n * @private\n */\n SyncTree.nextQueryTag_ = 1;\n return SyncTree;\n}());\nexports.SyncTree = SyncTree;\n\n//# sourceMappingURL=SyncTree.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar Path_1 = require(\"../util/Path\");\nvar Operation_1 = require(\"./Operation\");\nvar AckUserWrite = /** @class */ (function () {\n /**\n *\n * @param {!Path} path\n * @param {!ImmutableTree} affectedTree A tree containing true for each affected path. Affected paths can't overlap.\n * @param {!boolean} revert\n */\n function AckUserWrite(\n /**@inheritDoc */ path, \n /**@inheritDoc */ affectedTree, \n /**@inheritDoc */ revert) {\n this.path = path;\n this.affectedTree = affectedTree;\n this.revert = revert;\n /** @inheritDoc */\n this.type = Operation_1.OperationType.ACK_USER_WRITE;\n /** @inheritDoc */\n this.source = Operation_1.OperationSource.User;\n }\n /**\n * @inheritDoc\n */\n AckUserWrite.prototype.operationForChild = function (childName) {\n if (!this.path.isEmpty()) {\n util_1.assert(this.path.getFront() === childName, 'operationForChild called for unrelated child.');\n return new AckUserWrite(this.path.popFront(), this.affectedTree, this.revert);\n }\n else if (this.affectedTree.value != null) {\n util_1.assert(this.affectedTree.children.isEmpty(), 'affectedTree should not have overlapping affected paths.');\n // All child locations are affected as well; just return same operation.\n return this;\n }\n else {\n var childTree = this.affectedTree.subtree(new Path_1.Path(childName));\n return new AckUserWrite(Path_1.Path.Empty, childTree, this.revert);\n }\n };\n return AckUserWrite;\n}());\nexports.AckUserWrite = AckUserWrite;\n\n//# sourceMappingURL=AckUserWrite.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Path_1 = require(\"../util/Path\");\nvar Operation_1 = require(\"./Operation\");\n/**\n * @param {!OperationSource} source\n * @param {!Path} path\n * @constructor\n * @implements {Operation}\n */\nvar ListenComplete = /** @class */ (function () {\n function ListenComplete(source, path) {\n this.source = source;\n this.path = path;\n /** @inheritDoc */\n this.type = Operation_1.OperationType.LISTEN_COMPLETE;\n }\n ListenComplete.prototype.operationForChild = function (childName) {\n if (this.path.isEmpty()) {\n return new ListenComplete(this.source, Path_1.Path.Empty);\n }\n else {\n return new ListenComplete(this.source, this.path.popFront());\n }\n };\n return ListenComplete;\n}());\nexports.ListenComplete = ListenComplete;\n\n//# sourceMappingURL=ListenComplete.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Operation_1 = require(\"./Operation\");\nvar Overwrite_1 = require(\"./Overwrite\");\nvar Path_1 = require(\"../util/Path\");\nvar util_1 = require(\"@firebase/util\");\n/**\n * @param {!OperationSource} source\n * @param {!Path} path\n * @param {!ImmutableTree.} children\n * @constructor\n * @implements {Operation}\n */\nvar Merge = /** @class */ (function () {\n function Merge(\n /**@inheritDoc */ source, \n /**@inheritDoc */ path, \n /**@inheritDoc */ children) {\n this.source = source;\n this.path = path;\n this.children = children;\n /** @inheritDoc */\n this.type = Operation_1.OperationType.MERGE;\n }\n /**\n * @inheritDoc\n */\n Merge.prototype.operationForChild = function (childName) {\n if (this.path.isEmpty()) {\n var childTree = this.children.subtree(new Path_1.Path(childName));\n if (childTree.isEmpty()) {\n // This child is unaffected\n return null;\n }\n else if (childTree.value) {\n // We have a snapshot for the child in question. This becomes an overwrite of the child.\n return new Overwrite_1.Overwrite(this.source, Path_1.Path.Empty, childTree.value);\n }\n else {\n // This is a merge at a deeper level\n return new Merge(this.source, Path_1.Path.Empty, childTree);\n }\n }\n else {\n util_1.assert(this.path.getFront() === childName, \"Can't get a merge for a child not on the path of the operation\");\n return new Merge(this.source, this.path.popFront(), this.children);\n }\n };\n /**\n * @inheritDoc\n */\n Merge.prototype.toString = function () {\n return ('Operation(' +\n this.path +\n ': ' +\n this.source.toString() +\n ' merge: ' +\n this.children.toString() +\n ')');\n };\n return Merge;\n}());\nexports.Merge = Merge;\n\n//# sourceMappingURL=Merge.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar IndexedFilter_1 = require(\"./filter/IndexedFilter\");\nvar ViewProcessor_1 = require(\"./ViewProcessor\");\nvar ChildrenNode_1 = require(\"../snap/ChildrenNode\");\nvar CacheNode_1 = require(\"./CacheNode\");\nvar ViewCache_1 = require(\"./ViewCache\");\nvar EventGenerator_1 = require(\"./EventGenerator\");\nvar util_1 = require(\"@firebase/util\");\nvar Operation_1 = require(\"../operation/Operation\");\nvar Change_1 = require(\"./Change\");\nvar PriorityIndex_1 = require(\"../snap/indexes/PriorityIndex\");\n/**\n * A view represents a specific location and query that has 1 or more event registrations.\n *\n * It does several things:\n * - Maintains the list of event registrations for this location/query.\n * - Maintains a cache of the data visible for this location/query.\n * - Applies new operations (via applyOperation), updates the cache, and based on the event\n * registrations returns the set of events to be raised.\n * @constructor\n */\nvar View = /** @class */ (function () {\n /**\n *\n * @param {!Query} query_\n * @param {!ViewCache} initialViewCache\n */\n function View(query_, initialViewCache) {\n this.query_ = query_;\n this.eventRegistrations_ = [];\n var params = this.query_.getQueryParams();\n var indexFilter = new IndexedFilter_1.IndexedFilter(params.getIndex());\n var filter = params.getNodeFilter();\n /**\n * @type {ViewProcessor}\n * @private\n */\n this.processor_ = new ViewProcessor_1.ViewProcessor(filter);\n var initialServerCache = initialViewCache.getServerCache();\n var initialEventCache = initialViewCache.getEventCache();\n // Don't filter server node with other filter than index, wait for tagged listen\n var serverSnap = indexFilter.updateFullNode(ChildrenNode_1.ChildrenNode.EMPTY_NODE, initialServerCache.getNode(), null);\n var eventSnap = filter.updateFullNode(ChildrenNode_1.ChildrenNode.EMPTY_NODE, initialEventCache.getNode(), null);\n var newServerCache = new CacheNode_1.CacheNode(serverSnap, initialServerCache.isFullyInitialized(), indexFilter.filtersNodes());\n var newEventCache = new CacheNode_1.CacheNode(eventSnap, initialEventCache.isFullyInitialized(), filter.filtersNodes());\n /**\n * @type {!ViewCache}\n * @private\n */\n this.viewCache_ = new ViewCache_1.ViewCache(newEventCache, newServerCache);\n /**\n * @type {!EventGenerator}\n * @private\n */\n this.eventGenerator_ = new EventGenerator_1.EventGenerator(this.query_);\n }\n /**\n * @return {!Query}\n */\n View.prototype.getQuery = function () {\n return this.query_;\n };\n /**\n * @return {?Node}\n */\n View.prototype.getServerCache = function () {\n return this.viewCache_.getServerCache().getNode();\n };\n /**\n * @param {!Path} path\n * @return {?Node}\n */\n View.prototype.getCompleteServerCache = function (path) {\n var cache = this.viewCache_.getCompleteServerSnap();\n if (cache) {\n // If this isn't a \"loadsAllData\" view, then cache isn't actually a complete cache and\n // we need to see if it contains the child we're interested in.\n if (this.query_.getQueryParams().loadsAllData() ||\n (!path.isEmpty() && !cache.getImmediateChild(path.getFront()).isEmpty())) {\n return cache.getChild(path);\n }\n }\n return null;\n };\n /**\n * @return {boolean}\n */\n View.prototype.isEmpty = function () {\n return this.eventRegistrations_.length === 0;\n };\n /**\n * @param {!EventRegistration} eventRegistration\n */\n View.prototype.addEventRegistration = function (eventRegistration) {\n this.eventRegistrations_.push(eventRegistration);\n };\n /**\n * @param {?EventRegistration} eventRegistration If null, remove all callbacks.\n * @param {Error=} cancelError If a cancelError is provided, appropriate cancel events will be returned.\n * @return {!Array.} Cancel events, if cancelError was provided.\n */\n View.prototype.removeEventRegistration = function (eventRegistration, cancelError) {\n var cancelEvents = [];\n if (cancelError) {\n util_1.assert(eventRegistration == null, 'A cancel should cancel all event registrations.');\n var path_1 = this.query_.path;\n this.eventRegistrations_.forEach(function (registration) {\n cancelError /** @type {!Error} */ = cancelError;\n var maybeEvent = registration.createCancelEvent(cancelError, path_1);\n if (maybeEvent) {\n cancelEvents.push(maybeEvent);\n }\n });\n }\n if (eventRegistration) {\n var remaining = [];\n for (var i = 0; i < this.eventRegistrations_.length; ++i) {\n var existing = this.eventRegistrations_[i];\n if (!existing.matches(eventRegistration)) {\n remaining.push(existing);\n }\n else if (eventRegistration.hasAnyCallback()) {\n // We're removing just this one\n remaining = remaining.concat(this.eventRegistrations_.slice(i + 1));\n break;\n }\n }\n this.eventRegistrations_ = remaining;\n }\n else {\n this.eventRegistrations_ = [];\n }\n return cancelEvents;\n };\n /**\n * Applies the given Operation, updates our cache, and returns the appropriate events.\n *\n * @param {!Operation} operation\n * @param {!WriteTreeRef} writesCache\n * @param {?Node} completeServerCache\n * @return {!Array.}\n */\n View.prototype.applyOperation = function (operation, writesCache, completeServerCache) {\n if (operation.type === Operation_1.OperationType.MERGE &&\n operation.source.queryId !== null) {\n util_1.assert(this.viewCache_.getCompleteServerSnap(), 'We should always have a full cache before handling merges');\n util_1.assert(this.viewCache_.getCompleteEventSnap(), 'Missing event cache, even though we have a server cache');\n }\n var oldViewCache = this.viewCache_;\n var result = this.processor_.applyOperation(oldViewCache, operation, writesCache, completeServerCache);\n this.processor_.assertIndexed(result.viewCache);\n util_1.assert(result.viewCache.getServerCache().isFullyInitialized() ||\n !oldViewCache.getServerCache().isFullyInitialized(), 'Once a server snap is complete, it should never go back');\n this.viewCache_ = result.viewCache;\n return this.generateEventsForChanges_(result.changes, result.viewCache.getEventCache().getNode(), null);\n };\n /**\n * @param {!EventRegistration} registration\n * @return {!Array.}\n */\n View.prototype.getInitialEvents = function (registration) {\n var eventSnap = this.viewCache_.getEventCache();\n var initialChanges = [];\n if (!eventSnap.getNode().isLeafNode()) {\n var eventNode = eventSnap.getNode();\n eventNode.forEachChild(PriorityIndex_1.PRIORITY_INDEX, function (key, childNode) {\n initialChanges.push(Change_1.Change.childAddedChange(key, childNode));\n });\n }\n if (eventSnap.isFullyInitialized()) {\n initialChanges.push(Change_1.Change.valueChange(eventSnap.getNode()));\n }\n return this.generateEventsForChanges_(initialChanges, eventSnap.getNode(), registration);\n };\n /**\n * @private\n * @param {!Array.} changes\n * @param {!Node} eventCache\n * @param {EventRegistration=} eventRegistration\n * @return {!Array.}\n */\n View.prototype.generateEventsForChanges_ = function (changes, eventCache, eventRegistration) {\n var registrations = eventRegistration\n ? [eventRegistration]\n : this.eventRegistrations_;\n return this.eventGenerator_.generateEventsForChanges(changes, eventCache, registrations);\n };\n return View;\n}());\nexports.View = View;\n\n//# sourceMappingURL=View.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Operation_1 = require(\"../operation/Operation\");\nvar util_1 = require(\"@firebase/util\");\nvar ChildChangeAccumulator_1 = require(\"./ChildChangeAccumulator\");\nvar Change_1 = require(\"./Change\");\nvar ChildrenNode_1 = require(\"../snap/ChildrenNode\");\nvar KeyIndex_1 = require(\"../snap/indexes/KeyIndex\");\nvar ImmutableTree_1 = require(\"../util/ImmutableTree\");\nvar Path_1 = require(\"../util/Path\");\nvar CompleteChildSource_1 = require(\"./CompleteChildSource\");\n/**\n * @constructor\n * @struct\n */\nvar ProcessorResult = /** @class */ (function () {\n /**\n * @param {!ViewCache} viewCache\n * @param {!Array.} changes\n */\n function ProcessorResult(viewCache, changes) {\n this.viewCache = viewCache;\n this.changes = changes;\n }\n return ProcessorResult;\n}());\nexports.ProcessorResult = ProcessorResult;\n/**\n * @constructor\n */\nvar ViewProcessor = /** @class */ (function () {\n /**\n * @param {!NodeFilter} filter_\n */\n function ViewProcessor(filter_) {\n this.filter_ = filter_;\n }\n /**\n * @param {!ViewCache} viewCache\n */\n ViewProcessor.prototype.assertIndexed = function (viewCache) {\n util_1.assert(viewCache\n .getEventCache()\n .getNode()\n .isIndexed(this.filter_.getIndex()), 'Event snap not indexed');\n util_1.assert(viewCache\n .getServerCache()\n .getNode()\n .isIndexed(this.filter_.getIndex()), 'Server snap not indexed');\n };\n /**\n * @param {!ViewCache} oldViewCache\n * @param {!Operation} operation\n * @param {!WriteTreeRef} writesCache\n * @param {?Node} completeCache\n * @return {!ProcessorResult}\n */\n ViewProcessor.prototype.applyOperation = function (oldViewCache, operation, writesCache, completeCache) {\n var accumulator = new ChildChangeAccumulator_1.ChildChangeAccumulator();\n var newViewCache, filterServerNode;\n if (operation.type === Operation_1.OperationType.OVERWRITE) {\n var overwrite = operation;\n if (overwrite.source.fromUser) {\n newViewCache = this.applyUserOverwrite_(oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, accumulator);\n }\n else {\n util_1.assert(overwrite.source.fromServer, 'Unknown source.');\n // We filter the node if it's a tagged update or the node has been previously filtered and the\n // update is not at the root in which case it is ok (and necessary) to mark the node unfiltered\n // again\n filterServerNode =\n overwrite.source.tagged ||\n (oldViewCache.getServerCache().isFiltered() &&\n !overwrite.path.isEmpty());\n newViewCache = this.applyServerOverwrite_(oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, filterServerNode, accumulator);\n }\n }\n else if (operation.type === Operation_1.OperationType.MERGE) {\n var merge = operation;\n if (merge.source.fromUser) {\n newViewCache = this.applyUserMerge_(oldViewCache, merge.path, merge.children, writesCache, completeCache, accumulator);\n }\n else {\n util_1.assert(merge.source.fromServer, 'Unknown source.');\n // We filter the node if it's a tagged update or the node has been previously filtered\n filterServerNode =\n merge.source.tagged || oldViewCache.getServerCache().isFiltered();\n newViewCache = this.applyServerMerge_(oldViewCache, merge.path, merge.children, writesCache, completeCache, filterServerNode, accumulator);\n }\n }\n else if (operation.type === Operation_1.OperationType.ACK_USER_WRITE) {\n var ackUserWrite = operation;\n if (!ackUserWrite.revert) {\n newViewCache = this.ackUserWrite_(oldViewCache, ackUserWrite.path, ackUserWrite.affectedTree, writesCache, completeCache, accumulator);\n }\n else {\n newViewCache = this.revertUserWrite_(oldViewCache, ackUserWrite.path, writesCache, completeCache, accumulator);\n }\n }\n else if (operation.type === Operation_1.OperationType.LISTEN_COMPLETE) {\n newViewCache = this.listenComplete_(oldViewCache, operation.path, writesCache, accumulator);\n }\n else {\n throw util_1.assertionError('Unknown operation type: ' + operation.type);\n }\n var changes = accumulator.getChanges();\n ViewProcessor.maybeAddValueEvent_(oldViewCache, newViewCache, changes);\n return new ProcessorResult(newViewCache, changes);\n };\n /**\n * @param {!ViewCache} oldViewCache\n * @param {!ViewCache} newViewCache\n * @param {!Array.} accumulator\n * @private\n */\n ViewProcessor.maybeAddValueEvent_ = function (oldViewCache, newViewCache, accumulator) {\n var eventSnap = newViewCache.getEventCache();\n if (eventSnap.isFullyInitialized()) {\n var isLeafOrEmpty = eventSnap.getNode().isLeafNode() || eventSnap.getNode().isEmpty();\n var oldCompleteSnap = oldViewCache.getCompleteEventSnap();\n if (accumulator.length > 0 ||\n !oldViewCache.getEventCache().isFullyInitialized() ||\n (isLeafOrEmpty &&\n !eventSnap\n .getNode()\n .equals(/** @type {!Node} */ (oldCompleteSnap))) ||\n !eventSnap\n .getNode()\n .getPriority()\n .equals(oldCompleteSnap.getPriority())) {\n accumulator.push(Change_1.Change.valueChange(\n /** @type {!Node} */ newViewCache.getCompleteEventSnap()));\n }\n }\n };\n /**\n * @param {!ViewCache} viewCache\n * @param {!Path} changePath\n * @param {!WriteTreeRef} writesCache\n * @param {!CompleteChildSource} source\n * @param {!ChildChangeAccumulator} accumulator\n * @return {!ViewCache}\n * @private\n */\n ViewProcessor.prototype.generateEventCacheAfterServerEvent_ = function (viewCache, changePath, writesCache, source, accumulator) {\n var oldEventSnap = viewCache.getEventCache();\n if (writesCache.shadowingWrite(changePath) != null) {\n // we have a shadowing write, ignore changes\n return viewCache;\n }\n else {\n var newEventCache = void 0, serverNode = void 0;\n if (changePath.isEmpty()) {\n // TODO: figure out how this plays with \"sliding ack windows\"\n util_1.assert(viewCache.getServerCache().isFullyInitialized(), 'If change path is empty, we must have complete server data');\n if (viewCache.getServerCache().isFiltered()) {\n // We need to special case this, because we need to only apply writes to complete children, or\n // we might end up raising events for incomplete children. If the server data is filtered deep\n // writes cannot be guaranteed to be complete\n var serverCache = viewCache.getCompleteServerSnap();\n var completeChildren = serverCache instanceof ChildrenNode_1.ChildrenNode\n ? serverCache\n : ChildrenNode_1.ChildrenNode.EMPTY_NODE;\n var completeEventChildren = writesCache.calcCompleteEventChildren(completeChildren);\n newEventCache = this.filter_.updateFullNode(viewCache.getEventCache().getNode(), completeEventChildren, accumulator);\n }\n else {\n var completeNode = writesCache.calcCompleteEventCache(viewCache.getCompleteServerSnap());\n newEventCache = this.filter_.updateFullNode(viewCache.getEventCache().getNode(), completeNode, accumulator);\n }\n }\n else {\n var childKey = changePath.getFront();\n if (childKey == '.priority') {\n util_1.assert(changePath.getLength() == 1, \"Can't have a priority with additional path components\");\n var oldEventNode = oldEventSnap.getNode();\n serverNode = viewCache.getServerCache().getNode();\n // we might have overwrites for this priority\n var updatedPriority = writesCache.calcEventCacheAfterServerOverwrite(changePath, oldEventNode, serverNode);\n if (updatedPriority != null) {\n newEventCache = this.filter_.updatePriority(oldEventNode, updatedPriority);\n }\n else {\n // priority didn't change, keep old node\n newEventCache = oldEventSnap.getNode();\n }\n }\n else {\n var childChangePath = changePath.popFront();\n // update child\n var newEventChild = void 0;\n if (oldEventSnap.isCompleteForChild(childKey)) {\n serverNode = viewCache.getServerCache().getNode();\n var eventChildUpdate = writesCache.calcEventCacheAfterServerOverwrite(changePath, oldEventSnap.getNode(), serverNode);\n if (eventChildUpdate != null) {\n newEventChild = oldEventSnap\n .getNode()\n .getImmediateChild(childKey)\n .updateChild(childChangePath, eventChildUpdate);\n }\n else {\n // Nothing changed, just keep the old child\n newEventChild = oldEventSnap\n .getNode()\n .getImmediateChild(childKey);\n }\n }\n else {\n newEventChild = writesCache.calcCompleteChild(childKey, viewCache.getServerCache());\n }\n if (newEventChild != null) {\n newEventCache = this.filter_.updateChild(oldEventSnap.getNode(), childKey, newEventChild, childChangePath, source, accumulator);\n }\n else {\n // no complete child available or no change\n newEventCache = oldEventSnap.getNode();\n }\n }\n }\n return viewCache.updateEventSnap(newEventCache, oldEventSnap.isFullyInitialized() || changePath.isEmpty(), this.filter_.filtersNodes());\n }\n };\n /**\n * @param {!ViewCache} oldViewCache\n * @param {!Path} changePath\n * @param {!Node} changedSnap\n * @param {!WriteTreeRef} writesCache\n * @param {?Node} completeCache\n * @param {boolean} filterServerNode\n * @param {!ChildChangeAccumulator} accumulator\n * @return {!ViewCache}\n * @private\n */\n ViewProcessor.prototype.applyServerOverwrite_ = function (oldViewCache, changePath, changedSnap, writesCache, completeCache, filterServerNode, accumulator) {\n var oldServerSnap = oldViewCache.getServerCache();\n var newServerCache;\n var serverFilter = filterServerNode\n ? this.filter_\n : this.filter_.getIndexedFilter();\n if (changePath.isEmpty()) {\n newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), changedSnap, null);\n }\n else if (serverFilter.filtersNodes() && !oldServerSnap.isFiltered()) {\n // we want to filter the server node, but we didn't filter the server node yet, so simulate a full update\n var newServerNode = oldServerSnap\n .getNode()\n .updateChild(changePath, changedSnap);\n newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), newServerNode, null);\n }\n else {\n var childKey = changePath.getFront();\n if (!oldServerSnap.isCompleteForPath(changePath) &&\n changePath.getLength() > 1) {\n // We don't update incomplete nodes with updates intended for other listeners\n return oldViewCache;\n }\n var childChangePath = changePath.popFront();\n var childNode = oldServerSnap.getNode().getImmediateChild(childKey);\n var newChildNode = childNode.updateChild(childChangePath, changedSnap);\n if (childKey == '.priority') {\n newServerCache = serverFilter.updatePriority(oldServerSnap.getNode(), newChildNode);\n }\n else {\n newServerCache = serverFilter.updateChild(oldServerSnap.getNode(), childKey, newChildNode, childChangePath, CompleteChildSource_1.NO_COMPLETE_CHILD_SOURCE, null);\n }\n }\n var newViewCache = oldViewCache.updateServerSnap(newServerCache, oldServerSnap.isFullyInitialized() || changePath.isEmpty(), serverFilter.filtersNodes());\n var source = new CompleteChildSource_1.WriteTreeCompleteChildSource(writesCache, newViewCache, completeCache);\n return this.generateEventCacheAfterServerEvent_(newViewCache, changePath, writesCache, source, accumulator);\n };\n /**\n * @param {!ViewCache} oldViewCache\n * @param {!Path} changePath\n * @param {!Node} changedSnap\n * @param {!WriteTreeRef} writesCache\n * @param {?Node} completeCache\n * @param {!ChildChangeAccumulator} accumulator\n * @return {!ViewCache}\n * @private\n */\n ViewProcessor.prototype.applyUserOverwrite_ = function (oldViewCache, changePath, changedSnap, writesCache, completeCache, accumulator) {\n var oldEventSnap = oldViewCache.getEventCache();\n var newViewCache, newEventCache;\n var source = new CompleteChildSource_1.WriteTreeCompleteChildSource(writesCache, oldViewCache, completeCache);\n if (changePath.isEmpty()) {\n newEventCache = this.filter_.updateFullNode(oldViewCache.getEventCache().getNode(), changedSnap, accumulator);\n newViewCache = oldViewCache.updateEventSnap(newEventCache, true, this.filter_.filtersNodes());\n }\n else {\n var childKey = changePath.getFront();\n if (childKey === '.priority') {\n newEventCache = this.filter_.updatePriority(oldViewCache.getEventCache().getNode(), changedSnap);\n newViewCache = oldViewCache.updateEventSnap(newEventCache, oldEventSnap.isFullyInitialized(), oldEventSnap.isFiltered());\n }\n else {\n var childChangePath = changePath.popFront();\n var oldChild = oldEventSnap.getNode().getImmediateChild(childKey);\n var newChild = void 0;\n if (childChangePath.isEmpty()) {\n // Child overwrite, we can replace the child\n newChild = changedSnap;\n }\n else {\n var childNode = source.getCompleteChild(childKey);\n if (childNode != null) {\n if (childChangePath.getBack() === '.priority' &&\n childNode.getChild(childChangePath.parent()).isEmpty()) {\n // This is a priority update on an empty node. If this node exists on the server, the\n // server will send down the priority in the update, so ignore for now\n newChild = childNode;\n }\n else {\n newChild = childNode.updateChild(childChangePath, changedSnap);\n }\n }\n else {\n // There is no complete child node available\n newChild = ChildrenNode_1.ChildrenNode.EMPTY_NODE;\n }\n }\n if (!oldChild.equals(newChild)) {\n var newEventSnap = this.filter_.updateChild(oldEventSnap.getNode(), childKey, newChild, childChangePath, source, accumulator);\n newViewCache = oldViewCache.updateEventSnap(newEventSnap, oldEventSnap.isFullyInitialized(), this.filter_.filtersNodes());\n }\n else {\n newViewCache = oldViewCache;\n }\n }\n }\n return newViewCache;\n };\n /**\n * @param {!ViewCache} viewCache\n * @param {string} childKey\n * @return {boolean}\n * @private\n */\n ViewProcessor.cacheHasChild_ = function (viewCache, childKey) {\n return viewCache.getEventCache().isCompleteForChild(childKey);\n };\n /**\n * @param {!ViewCache} viewCache\n * @param {!Path} path\n * @param {ImmutableTree.} changedChildren\n * @param {!WriteTreeRef} writesCache\n * @param {?Node} serverCache\n * @param {!ChildChangeAccumulator} accumulator\n * @return {!ViewCache}\n * @private\n */\n ViewProcessor.prototype.applyUserMerge_ = function (viewCache, path, changedChildren, writesCache, serverCache, accumulator) {\n var _this = this;\n // HACK: In the case of a limit query, there may be some changes that bump things out of the\n // window leaving room for new items. It's important we process these changes first, so we\n // iterate the changes twice, first processing any that affect items currently in view.\n // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\n // and event snap. I'm not sure if this will result in edge cases when a child is in one but\n // not the other.\n var curViewCache = viewCache;\n changedChildren.foreach(function (relativePath, childNode) {\n var writePath = path.child(relativePath);\n if (ViewProcessor.cacheHasChild_(viewCache, writePath.getFront())) {\n curViewCache = _this.applyUserOverwrite_(curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\n }\n });\n changedChildren.foreach(function (relativePath, childNode) {\n var writePath = path.child(relativePath);\n if (!ViewProcessor.cacheHasChild_(viewCache, writePath.getFront())) {\n curViewCache = _this.applyUserOverwrite_(curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\n }\n });\n return curViewCache;\n };\n /**\n * @param {!Node} node\n * @param {ImmutableTree.} merge\n * @return {!Node}\n * @private\n */\n ViewProcessor.prototype.applyMerge_ = function (node, merge) {\n merge.foreach(function (relativePath, childNode) {\n node = node.updateChild(relativePath, childNode);\n });\n return node;\n };\n /**\n * @param {!ViewCache} viewCache\n * @param {!Path} path\n * @param {!ImmutableTree.} changedChildren\n * @param {!WriteTreeRef} writesCache\n * @param {?Node} serverCache\n * @param {boolean} filterServerNode\n * @param {!ChildChangeAccumulator} accumulator\n * @return {!ViewCache}\n * @private\n */\n ViewProcessor.prototype.applyServerMerge_ = function (viewCache, path, changedChildren, writesCache, serverCache, filterServerNode, accumulator) {\n var _this = this;\n // If we don't have a cache yet, this merge was intended for a previously listen in the same location. Ignore it and\n // wait for the complete data update coming soon.\n if (viewCache\n .getServerCache()\n .getNode()\n .isEmpty() &&\n !viewCache.getServerCache().isFullyInitialized()) {\n return viewCache;\n }\n // HACK: In the case of a limit query, there may be some changes that bump things out of the\n // window leaving room for new items. It's important we process these changes first, so we\n // iterate the changes twice, first processing any that affect items currently in view.\n // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\n // and event snap. I'm not sure if this will result in edge cases when a child is in one but\n // not the other.\n var curViewCache = viewCache;\n var viewMergeTree;\n if (path.isEmpty()) {\n viewMergeTree = changedChildren;\n }\n else {\n viewMergeTree = ImmutableTree_1.ImmutableTree.Empty.setTree(path, changedChildren);\n }\n var serverNode = viewCache.getServerCache().getNode();\n viewMergeTree.children.inorderTraversal(function (childKey, childTree) {\n if (serverNode.hasChild(childKey)) {\n var serverChild = viewCache\n .getServerCache()\n .getNode()\n .getImmediateChild(childKey);\n var newChild = _this.applyMerge_(serverChild, childTree);\n curViewCache = _this.applyServerOverwrite_(curViewCache, new Path_1.Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\n }\n });\n viewMergeTree.children.inorderTraversal(function (childKey, childMergeTree) {\n var isUnknownDeepMerge = !viewCache.getServerCache().isCompleteForChild(childKey) &&\n childMergeTree.value == null;\n if (!serverNode.hasChild(childKey) && !isUnknownDeepMerge) {\n var serverChild = viewCache\n .getServerCache()\n .getNode()\n .getImmediateChild(childKey);\n var newChild = _this.applyMerge_(serverChild, childMergeTree);\n curViewCache = _this.applyServerOverwrite_(curViewCache, new Path_1.Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\n }\n });\n return curViewCache;\n };\n /**\n * @param {!ViewCache} viewCache\n * @param {!Path} ackPath\n * @param {!ImmutableTree} affectedTree\n * @param {!WriteTreeRef} writesCache\n * @param {?Node} completeCache\n * @param {!ChildChangeAccumulator} accumulator\n * @return {!ViewCache}\n * @private\n */\n ViewProcessor.prototype.ackUserWrite_ = function (viewCache, ackPath, affectedTree, writesCache, completeCache, accumulator) {\n if (writesCache.shadowingWrite(ackPath) != null) {\n return viewCache;\n }\n // Only filter server node if it is currently filtered\n var filterServerNode = viewCache.getServerCache().isFiltered();\n // Essentially we'll just get our existing server cache for the affected paths and re-apply it as a server update\n // now that it won't be shadowed.\n var serverCache = viewCache.getServerCache();\n if (affectedTree.value != null) {\n // This is an overwrite.\n if ((ackPath.isEmpty() && serverCache.isFullyInitialized()) ||\n serverCache.isCompleteForPath(ackPath)) {\n return this.applyServerOverwrite_(viewCache, ackPath, serverCache.getNode().getChild(ackPath), writesCache, completeCache, filterServerNode, accumulator);\n }\n else if (ackPath.isEmpty()) {\n // This is a goofy edge case where we are acking data at this location but don't have full data. We\n // should just re-apply whatever we have in our cache as a merge.\n var changedChildren_1 = ImmutableTree_1.ImmutableTree.Empty;\n serverCache.getNode().forEachChild(KeyIndex_1.KEY_INDEX, function (name, node) {\n changedChildren_1 = changedChildren_1.set(new Path_1.Path(name), node);\n });\n return this.applyServerMerge_(viewCache, ackPath, changedChildren_1, writesCache, completeCache, filterServerNode, accumulator);\n }\n else {\n return viewCache;\n }\n }\n else {\n // This is a merge.\n var changedChildren_2 = ImmutableTree_1.ImmutableTree.Empty;\n affectedTree.foreach(function (mergePath, value) {\n var serverCachePath = ackPath.child(mergePath);\n if (serverCache.isCompleteForPath(serverCachePath)) {\n changedChildren_2 = changedChildren_2.set(mergePath, serverCache.getNode().getChild(serverCachePath));\n }\n });\n return this.applyServerMerge_(viewCache, ackPath, changedChildren_2, writesCache, completeCache, filterServerNode, accumulator);\n }\n };\n /**\n * @param {!ViewCache} viewCache\n * @param {!Path} path\n * @param {!WriteTreeRef} writesCache\n * @param {!ChildChangeAccumulator} accumulator\n * @return {!ViewCache}\n * @private\n */\n ViewProcessor.prototype.listenComplete_ = function (viewCache, path, writesCache, accumulator) {\n var oldServerNode = viewCache.getServerCache();\n var newViewCache = viewCache.updateServerSnap(oldServerNode.getNode(), oldServerNode.isFullyInitialized() || path.isEmpty(), oldServerNode.isFiltered());\n return this.generateEventCacheAfterServerEvent_(newViewCache, path, writesCache, CompleteChildSource_1.NO_COMPLETE_CHILD_SOURCE, accumulator);\n };\n /**\n * @param {!ViewCache} viewCache\n * @param {!Path} path\n * @param {!WriteTreeRef} writesCache\n * @param {?Node} completeServerCache\n * @param {!ChildChangeAccumulator} accumulator\n * @return {!ViewCache}\n * @private\n */\n ViewProcessor.prototype.revertUserWrite_ = function (viewCache, path, writesCache, completeServerCache, accumulator) {\n var complete;\n if (writesCache.shadowingWrite(path) != null) {\n return viewCache;\n }\n else {\n var source = new CompleteChildSource_1.WriteTreeCompleteChildSource(writesCache, viewCache, completeServerCache);\n var oldEventCache = viewCache.getEventCache().getNode();\n var newEventCache = void 0;\n if (path.isEmpty() || path.getFront() === '.priority') {\n var newNode = void 0;\n if (viewCache.getServerCache().isFullyInitialized()) {\n newNode = writesCache.calcCompleteEventCache(viewCache.getCompleteServerSnap());\n }\n else {\n var serverChildren = viewCache.getServerCache().getNode();\n util_1.assert(serverChildren instanceof ChildrenNode_1.ChildrenNode, 'serverChildren would be complete if leaf node');\n newNode = writesCache.calcCompleteEventChildren(serverChildren);\n }\n newNode = newNode;\n newEventCache = this.filter_.updateFullNode(oldEventCache, newNode, accumulator);\n }\n else {\n var childKey = path.getFront();\n var newChild = writesCache.calcCompleteChild(childKey, viewCache.getServerCache());\n if (newChild == null &&\n viewCache.getServerCache().isCompleteForChild(childKey)) {\n newChild = oldEventCache.getImmediateChild(childKey);\n }\n if (newChild != null) {\n newEventCache = this.filter_.updateChild(oldEventCache, childKey, newChild, path.popFront(), source, accumulator);\n }\n else if (viewCache\n .getEventCache()\n .getNode()\n .hasChild(childKey)) {\n // No complete child available, delete the existing one, if any\n newEventCache = this.filter_.updateChild(oldEventCache, childKey, ChildrenNode_1.ChildrenNode.EMPTY_NODE, path.popFront(), source, accumulator);\n }\n else {\n newEventCache = oldEventCache;\n }\n if (newEventCache.isEmpty() &&\n viewCache.getServerCache().isFullyInitialized()) {\n // We might have reverted all child writes. Maybe the old event was a leaf node\n complete = writesCache.calcCompleteEventCache(viewCache.getCompleteServerSnap());\n if (complete.isLeafNode()) {\n newEventCache = this.filter_.updateFullNode(newEventCache, complete, accumulator);\n }\n }\n }\n complete =\n viewCache.getServerCache().isFullyInitialized() ||\n writesCache.shadowingWrite(Path_1.Path.Empty) != null;\n return viewCache.updateEventSnap(newEventCache, complete, this.filter_.filtersNodes());\n }\n };\n return ViewProcessor;\n}());\nexports.ViewProcessor = ViewProcessor;\n\n//# sourceMappingURL=ViewProcessor.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar Change_1 = require(\"./Change\");\nvar util_2 = require(\"@firebase/util\");\n/**\n * @constructor\n */\nvar ChildChangeAccumulator = /** @class */ (function () {\n function ChildChangeAccumulator() {\n this.changeMap_ = {};\n }\n /**\n * @param {!Change} change\n */\n ChildChangeAccumulator.prototype.trackChildChange = function (change) {\n var type = change.type;\n var childKey /** @type {!string} */ = change.childName;\n util_2.assert(type == Change_1.Change.CHILD_ADDED ||\n type == Change_1.Change.CHILD_CHANGED ||\n type == Change_1.Change.CHILD_REMOVED, 'Only child changes supported for tracking');\n util_2.assert(childKey !== '.priority', 'Only non-priority child changes can be tracked.');\n var oldChange = util_1.safeGet(this.changeMap_, childKey);\n if (oldChange) {\n var oldType = oldChange.type;\n if (type == Change_1.Change.CHILD_ADDED && oldType == Change_1.Change.CHILD_REMOVED) {\n this.changeMap_[childKey] = Change_1.Change.childChangedChange(childKey, change.snapshotNode, oldChange.snapshotNode);\n }\n else if (type == Change_1.Change.CHILD_REMOVED &&\n oldType == Change_1.Change.CHILD_ADDED) {\n delete this.changeMap_[childKey];\n }\n else if (type == Change_1.Change.CHILD_REMOVED &&\n oldType == Change_1.Change.CHILD_CHANGED) {\n this.changeMap_[childKey] = Change_1.Change.childRemovedChange(childKey, oldChange.oldSnap);\n }\n else if (type == Change_1.Change.CHILD_CHANGED &&\n oldType == Change_1.Change.CHILD_ADDED) {\n this.changeMap_[childKey] = Change_1.Change.childAddedChange(childKey, change.snapshotNode);\n }\n else if (type == Change_1.Change.CHILD_CHANGED &&\n oldType == Change_1.Change.CHILD_CHANGED) {\n this.changeMap_[childKey] = Change_1.Change.childChangedChange(childKey, change.snapshotNode, oldChange.oldSnap);\n }\n else {\n throw util_2.assertionError('Illegal combination of changes: ' +\n change +\n ' occurred after ' +\n oldChange);\n }\n }\n else {\n this.changeMap_[childKey] = change;\n }\n };\n /**\n * @return {!Array.}\n */\n ChildChangeAccumulator.prototype.getChanges = function () {\n return util_1.getValues(this.changeMap_);\n };\n return ChildChangeAccumulator;\n}());\nexports.ChildChangeAccumulator = ChildChangeAccumulator;\n\n//# sourceMappingURL=ChildChangeAccumulator.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar CacheNode_1 = require(\"./CacheNode\");\n/**\n * An implementation of CompleteChildSource that never returns any additional children\n *\n * @private\n * @constructor\n * @implements CompleteChildSource\n */\nvar NoCompleteChildSource_ = /** @class */ (function () {\n function NoCompleteChildSource_() {\n }\n /**\n * @inheritDoc\n */\n NoCompleteChildSource_.prototype.getCompleteChild = function (childKey) {\n return null;\n };\n /**\n * @inheritDoc\n */\n NoCompleteChildSource_.prototype.getChildAfterChild = function (index, child, reverse) {\n return null;\n };\n return NoCompleteChildSource_;\n}());\nexports.NoCompleteChildSource_ = NoCompleteChildSource_;\n/**\n * Singleton instance.\n * @const\n * @type {!CompleteChildSource}\n */\nexports.NO_COMPLETE_CHILD_SOURCE = new NoCompleteChildSource_();\n/**\n * An implementation of CompleteChildSource that uses a WriteTree in addition to any other server data or\n * old event caches available to calculate complete children.\n *\n *\n * @implements CompleteChildSource\n */\nvar WriteTreeCompleteChildSource = /** @class */ (function () {\n /**\n * @param {!WriteTreeRef} writes_\n * @param {!ViewCache} viewCache_\n * @param {?Node} optCompleteServerCache_\n */\n function WriteTreeCompleteChildSource(writes_, viewCache_, optCompleteServerCache_) {\n if (optCompleteServerCache_ === void 0) { optCompleteServerCache_ = null; }\n this.writes_ = writes_;\n this.viewCache_ = viewCache_;\n this.optCompleteServerCache_ = optCompleteServerCache_;\n }\n /**\n * @inheritDoc\n */\n WriteTreeCompleteChildSource.prototype.getCompleteChild = function (childKey) {\n var node = this.viewCache_.getEventCache();\n if (node.isCompleteForChild(childKey)) {\n return node.getNode().getImmediateChild(childKey);\n }\n else {\n var serverNode = this.optCompleteServerCache_ != null\n ? new CacheNode_1.CacheNode(this.optCompleteServerCache_, true, false)\n : this.viewCache_.getServerCache();\n return this.writes_.calcCompleteChild(childKey, serverNode);\n }\n };\n /**\n * @inheritDoc\n */\n WriteTreeCompleteChildSource.prototype.getChildAfterChild = function (index, child, reverse) {\n var completeServerData = this.optCompleteServerCache_ != null\n ? this.optCompleteServerCache_\n : this.viewCache_.getCompleteServerSnap();\n var nodes = this.writes_.calcIndexedSlice(completeServerData, child, 1, reverse, index);\n if (nodes.length === 0) {\n return null;\n }\n else {\n return nodes[0];\n }\n };\n return WriteTreeCompleteChildSource;\n}());\nexports.WriteTreeCompleteChildSource = WriteTreeCompleteChildSource;\n\n//# sourceMappingURL=CompleteChildSource.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Node_1 = require(\"../snap/Node\");\nvar Change_1 = require(\"./Change\");\nvar util_1 = require(\"@firebase/util\");\n/**\n * An EventGenerator is used to convert \"raw\" changes (Change) as computed by the\n * CacheDiffer into actual events (Event) that can be raised. See generateEventsForChanges()\n * for details.\n *\n * @constructor\n */\nvar EventGenerator = /** @class */ (function () {\n /**\n *\n * @param {!Query} query_\n */\n function EventGenerator(query_) {\n this.query_ = query_;\n /**\n * @private\n * @type {!Index}\n */\n this.index_ = this.query_.getQueryParams().getIndex();\n }\n /**\n * Given a set of raw changes (no moved events and prevName not specified yet), and a set of\n * EventRegistrations that should be notified of these changes, generate the actual events to be raised.\n *\n * Notes:\n * - child_moved events will be synthesized at this time for any child_changed events that affect\n * our index.\n * - prevName will be calculated based on the index ordering.\n *\n * @param {!Array.} changes\n * @param {!Node} eventCache\n * @param {!Array.} eventRegistrations\n * @return {!Array.}\n */\n EventGenerator.prototype.generateEventsForChanges = function (changes, eventCache, eventRegistrations) {\n var _this = this;\n var events = [];\n var moves = [];\n changes.forEach(function (change) {\n if (change.type === Change_1.Change.CHILD_CHANGED &&\n _this.index_.indexedValueChanged(change.oldSnap, change.snapshotNode)) {\n moves.push(Change_1.Change.childMovedChange(change.childName, change.snapshotNode));\n }\n });\n this.generateEventsForType_(events, Change_1.Change.CHILD_REMOVED, changes, eventRegistrations, eventCache);\n this.generateEventsForType_(events, Change_1.Change.CHILD_ADDED, changes, eventRegistrations, eventCache);\n this.generateEventsForType_(events, Change_1.Change.CHILD_MOVED, moves, eventRegistrations, eventCache);\n this.generateEventsForType_(events, Change_1.Change.CHILD_CHANGED, changes, eventRegistrations, eventCache);\n this.generateEventsForType_(events, Change_1.Change.VALUE, changes, eventRegistrations, eventCache);\n return events;\n };\n /**\n * Given changes of a single change type, generate the corresponding events.\n *\n * @param {!Array.} events\n * @param {!string} eventType\n * @param {!Array.} changes\n * @param {!Array.} registrations\n * @param {!Node} eventCache\n * @private\n */\n EventGenerator.prototype.generateEventsForType_ = function (events, eventType, changes, registrations, eventCache) {\n var _this = this;\n var filteredChanges = changes.filter(function (change) { return change.type === eventType; });\n filteredChanges.sort(this.compareChanges_.bind(this));\n filteredChanges.forEach(function (change) {\n var materializedChange = _this.materializeSingleChange_(change, eventCache);\n registrations.forEach(function (registration) {\n if (registration.respondsTo(change.type)) {\n events.push(registration.createEvent(materializedChange, _this.query_));\n }\n });\n });\n };\n /**\n * @param {!Change} change\n * @param {!Node} eventCache\n * @return {!Change}\n * @private\n */\n EventGenerator.prototype.materializeSingleChange_ = function (change, eventCache) {\n if (change.type === 'value' || change.type === 'child_removed') {\n return change;\n }\n else {\n change.prevName = eventCache.getPredecessorChildName(\n /** @type {!string} */\n change.childName, change.snapshotNode, this.index_);\n return change;\n }\n };\n /**\n * @param {!Change} a\n * @param {!Change} b\n * @return {number}\n * @private\n */\n EventGenerator.prototype.compareChanges_ = function (a, b) {\n if (a.childName == null || b.childName == null) {\n throw util_1.assertionError('Should only compare child_ events.');\n }\n var aWrapped = new Node_1.NamedNode(a.childName, a.snapshotNode);\n var bWrapped = new Node_1.NamedNode(b.childName, b.snapshotNode);\n return this.index_.compare(aWrapped, bWrapped);\n };\n return EventGenerator;\n}());\nexports.EventGenerator = EventGenerator;\n\n//# sourceMappingURL=EventGenerator.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar util_2 = require(\"@firebase/util\");\nvar Path_1 = require(\"./util/Path\");\nvar CompoundWrite_1 = require(\"./CompoundWrite\");\nvar PriorityIndex_1 = require(\"./snap/indexes/PriorityIndex\");\nvar ChildrenNode_1 = require(\"./snap/ChildrenNode\");\n/**\n * WriteTree tracks all pending user-initiated writes and has methods to calculate the result of merging them\n * with underlying server data (to create \"event cache\" data). Pending writes are added with addOverwrite()\n * and addMerge(), and removed with removeWrite().\n *\n * @constructor\n */\nvar WriteTree = /** @class */ (function () {\n function WriteTree() {\n /**\n * A tree tracking the result of applying all visible writes. This does not include transactions with\n * applyLocally=false or writes that are completely shadowed by other writes.\n *\n * @type {!CompoundWrite}\n * @private\n */\n this.visibleWrites_ = CompoundWrite_1.CompoundWrite.Empty;\n /**\n * A list of all pending writes, regardless of visibility and shadowed-ness. Used to calculate arbitrary\n * sets of the changed data, such as hidden writes (from transactions) or changes with certain writes excluded (also\n * used by transactions).\n *\n * @type {!Array.}\n * @private\n */\n this.allWrites_ = [];\n this.lastWriteId_ = -1;\n }\n /**\n * Create a new WriteTreeRef for the given path. For use with a new sync point at the given path.\n *\n * @param {!Path} path\n * @return {!WriteTreeRef}\n */\n WriteTree.prototype.childWrites = function (path) {\n return new WriteTreeRef(path, this);\n };\n /**\n * Record a new overwrite from user code.\n *\n * @param {!Path} path\n * @param {!Node} snap\n * @param {!number} writeId\n * @param {boolean=} visible This is set to false by some transactions. It should be excluded from event caches\n */\n WriteTree.prototype.addOverwrite = function (path, snap, writeId, visible) {\n util_2.assert(writeId > this.lastWriteId_, 'Stacking an older write on top of newer ones');\n if (visible === undefined) {\n visible = true;\n }\n this.allWrites_.push({\n path: path,\n snap: snap,\n writeId: writeId,\n visible: visible\n });\n if (visible) {\n this.visibleWrites_ = this.visibleWrites_.addWrite(path, snap);\n }\n this.lastWriteId_ = writeId;\n };\n /**\n * Record a new merge from user code.\n *\n * @param {!Path} path\n * @param {!Object.} changedChildren\n * @param {!number} writeId\n */\n WriteTree.prototype.addMerge = function (path, changedChildren, writeId) {\n util_2.assert(writeId > this.lastWriteId_, 'Stacking an older merge on top of newer ones');\n this.allWrites_.push({\n path: path,\n children: changedChildren,\n writeId: writeId,\n visible: true\n });\n this.visibleWrites_ = this.visibleWrites_.addWrites(path, changedChildren);\n this.lastWriteId_ = writeId;\n };\n /**\n * @param {!number} writeId\n * @return {?WriteRecord}\n */\n WriteTree.prototype.getWrite = function (writeId) {\n for (var i = 0; i < this.allWrites_.length; i++) {\n var record = this.allWrites_[i];\n if (record.writeId === writeId) {\n return record;\n }\n }\n return null;\n };\n /**\n * Remove a write (either an overwrite or merge) that has been successfully acknowledge by the server. Recalculates\n * the tree if necessary. We return true if it may have been visible, meaning views need to reevaluate.\n *\n * @param {!number} writeId\n * @return {boolean} true if the write may have been visible (meaning we'll need to reevaluate / raise\n * events as a result).\n */\n WriteTree.prototype.removeWrite = function (writeId) {\n // Note: disabling this check. It could be a transaction that preempted another transaction, and thus was applied\n // out of order.\n //const validClear = revert || this.allWrites_.length === 0 || writeId <= this.allWrites_[0].writeId;\n //assert(validClear, \"Either we don't have this write, or it's the first one in the queue\");\n var _this = this;\n var idx = this.allWrites_.findIndex(function (s) {\n return s.writeId === writeId;\n });\n util_2.assert(idx >= 0, 'removeWrite called with nonexistent writeId.');\n var writeToRemove = this.allWrites_[idx];\n this.allWrites_.splice(idx, 1);\n var removedWriteWasVisible = writeToRemove.visible;\n var removedWriteOverlapsWithOtherWrites = false;\n var i = this.allWrites_.length - 1;\n while (removedWriteWasVisible && i >= 0) {\n var currentWrite = this.allWrites_[i];\n if (currentWrite.visible) {\n if (i >= idx &&\n this.recordContainsPath_(currentWrite, writeToRemove.path)) {\n // The removed write was completely shadowed by a subsequent write.\n removedWriteWasVisible = false;\n }\n else if (writeToRemove.path.contains(currentWrite.path)) {\n // Either we're covering some writes or they're covering part of us (depending on which came first).\n removedWriteOverlapsWithOtherWrites = true;\n }\n }\n i--;\n }\n if (!removedWriteWasVisible) {\n return false;\n }\n else if (removedWriteOverlapsWithOtherWrites) {\n // There's some shadowing going on. Just rebuild the visible writes from scratch.\n this.resetTree_();\n return true;\n }\n else {\n // There's no shadowing. We can safely just remove the write(s) from visibleWrites.\n if (writeToRemove.snap) {\n this.visibleWrites_ = this.visibleWrites_.removeWrite(writeToRemove.path);\n }\n else {\n var children = writeToRemove.children;\n util_1.forEach(children, function (childName) {\n _this.visibleWrites_ = _this.visibleWrites_.removeWrite(writeToRemove.path.child(childName));\n });\n }\n return true;\n }\n };\n /**\n * Return a complete snapshot for the given path if there's visible write data at that path, else null.\n * No server data is considered.\n *\n * @param {!Path} path\n * @return {?Node}\n */\n WriteTree.prototype.getCompleteWriteData = function (path) {\n return this.visibleWrites_.getCompleteNode(path);\n };\n /**\n * Given optional, underlying server data, and an optional set of constraints (exclude some sets, include hidden\n * writes), attempt to calculate a complete snapshot for the given path\n *\n * @param {!Path} treePath\n * @param {?Node} completeServerCache\n * @param {Array.=} writeIdsToExclude An optional set to be excluded\n * @param {boolean=} includeHiddenWrites Defaults to false, whether or not to layer on writes with visible set to false\n * @return {?Node}\n */\n WriteTree.prototype.calcCompleteEventCache = function (treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\n if (!writeIdsToExclude && !includeHiddenWrites) {\n var shadowingNode = this.visibleWrites_.getCompleteNode(treePath);\n if (shadowingNode != null) {\n return shadowingNode;\n }\n else {\n var subMerge = this.visibleWrites_.childCompoundWrite(treePath);\n if (subMerge.isEmpty()) {\n return completeServerCache;\n }\n else if (completeServerCache == null &&\n !subMerge.hasCompleteWrite(Path_1.Path.Empty)) {\n // We wouldn't have a complete snapshot, since there's no underlying data and no complete shadow\n return null;\n }\n else {\n var layeredCache = completeServerCache || ChildrenNode_1.ChildrenNode.EMPTY_NODE;\n return subMerge.apply(layeredCache);\n }\n }\n }\n else {\n var merge = this.visibleWrites_.childCompoundWrite(treePath);\n if (!includeHiddenWrites && merge.isEmpty()) {\n return completeServerCache;\n }\n else {\n // If the server cache is null, and we don't have a complete cache, we need to return null\n if (!includeHiddenWrites &&\n completeServerCache == null &&\n !merge.hasCompleteWrite(Path_1.Path.Empty)) {\n return null;\n }\n else {\n var filter = function (write) {\n return ((write.visible || includeHiddenWrites) &&\n (!writeIdsToExclude ||\n !~writeIdsToExclude.indexOf(write.writeId)) &&\n (write.path.contains(treePath) || treePath.contains(write.path)));\n };\n var mergeAtPath = WriteTree.layerTree_(this.allWrites_, filter, treePath);\n var layeredCache = completeServerCache || ChildrenNode_1.ChildrenNode.EMPTY_NODE;\n return mergeAtPath.apply(layeredCache);\n }\n }\n }\n };\n /**\n * With optional, underlying server data, attempt to return a children node of children that we have complete data for.\n * Used when creating new views, to pre-fill their complete event children snapshot.\n *\n * @param {!Path} treePath\n * @param {?ChildrenNode} completeServerChildren\n * @return {!ChildrenNode}\n */\n WriteTree.prototype.calcCompleteEventChildren = function (treePath, completeServerChildren) {\n var completeChildren = ChildrenNode_1.ChildrenNode.EMPTY_NODE;\n var topLevelSet = this.visibleWrites_.getCompleteNode(treePath);\n if (topLevelSet) {\n if (!topLevelSet.isLeafNode()) {\n // we're shadowing everything. Return the children.\n topLevelSet.forEachChild(PriorityIndex_1.PRIORITY_INDEX, function (childName, childSnap) {\n completeChildren = completeChildren.updateImmediateChild(childName, childSnap);\n });\n }\n return completeChildren;\n }\n else if (completeServerChildren) {\n // Layer any children we have on top of this\n // We know we don't have a top-level set, so just enumerate existing children\n var merge_1 = this.visibleWrites_.childCompoundWrite(treePath);\n completeServerChildren.forEachChild(PriorityIndex_1.PRIORITY_INDEX, function (childName, childNode) {\n var node = merge_1\n .childCompoundWrite(new Path_1.Path(childName))\n .apply(childNode);\n completeChildren = completeChildren.updateImmediateChild(childName, node);\n });\n // Add any complete children we have from the set\n merge_1.getCompleteChildren().forEach(function (namedNode) {\n completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\n });\n return completeChildren;\n }\n else {\n // We don't have anything to layer on top of. Layer on any children we have\n // Note that we can return an empty snap if we have a defined delete\n var merge = this.visibleWrites_.childCompoundWrite(treePath);\n merge.getCompleteChildren().forEach(function (namedNode) {\n completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\n });\n return completeChildren;\n }\n };\n /**\n * Given that the underlying server data has updated, determine what, if anything, needs to be\n * applied to the event cache.\n *\n * Possibilities:\n *\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\n *\n * 2. Some write is completely shadowing. No events to be raised\n *\n * 3. Is partially shadowed. Events\n *\n * Either existingEventSnap or existingServerSnap must exist\n *\n * @param {!Path} treePath\n * @param {!Path} childPath\n * @param {?Node} existingEventSnap\n * @param {?Node} existingServerSnap\n * @return {?Node}\n */\n WriteTree.prototype.calcEventCacheAfterServerOverwrite = function (treePath, childPath, existingEventSnap, existingServerSnap) {\n util_2.assert(existingEventSnap || existingServerSnap, 'Either existingEventSnap or existingServerSnap must exist');\n var path = treePath.child(childPath);\n if (this.visibleWrites_.hasCompleteWrite(path)) {\n // At this point we can probably guarantee that we're in case 2, meaning no events\n // May need to check visibility while doing the findRootMostValueAndPath call\n return null;\n }\n else {\n // No complete shadowing. We're either partially shadowing or not shadowing at all.\n var childMerge = this.visibleWrites_.childCompoundWrite(path);\n if (childMerge.isEmpty()) {\n // We're not shadowing at all. Case 1\n return existingServerSnap.getChild(childPath);\n }\n else {\n // This could be more efficient if the serverNode + updates doesn't change the eventSnap\n // However this is tricky to find out, since user updates don't necessary change the server\n // snap, e.g. priority updates on empty nodes, or deep deletes. Another special case is if the server\n // adds nodes, but doesn't change any existing writes. It is therefore not enough to\n // only check if the updates change the serverNode.\n // Maybe check if the merge tree contains these special cases and only do a full overwrite in that case?\n return childMerge.apply(existingServerSnap.getChild(childPath));\n }\n }\n };\n /**\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\n * complete child for this ChildKey.\n *\n * @param {!Path} treePath\n * @param {!string} childKey\n * @param {!CacheNode} existingServerSnap\n * @return {?Node}\n */\n WriteTree.prototype.calcCompleteChild = function (treePath, childKey, existingServerSnap) {\n var path = treePath.child(childKey);\n var shadowingNode = this.visibleWrites_.getCompleteNode(path);\n if (shadowingNode != null) {\n return shadowingNode;\n }\n else {\n if (existingServerSnap.isCompleteForChild(childKey)) {\n var childMerge = this.visibleWrites_.childCompoundWrite(path);\n return childMerge.apply(existingServerSnap.getNode().getImmediateChild(childKey));\n }\n else {\n return null;\n }\n }\n };\n /**\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\n * a higher path, this will return the child of that write relative to the write and this path.\n * Returns null if there is no write at this path.\n *\n * @param {!Path} path\n * @return {?Node}\n */\n WriteTree.prototype.shadowingWrite = function (path) {\n return this.visibleWrites_.getCompleteNode(path);\n };\n /**\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\n * the window, but may now be in the window.\n *\n * @param {!Path} treePath\n * @param {?Node} completeServerData\n * @param {!NamedNode} startPost\n * @param {!number} count\n * @param {boolean} reverse\n * @param {!Index} index\n * @return {!Array.}\n */\n WriteTree.prototype.calcIndexedSlice = function (treePath, completeServerData, startPost, count, reverse, index) {\n var toIterate;\n var merge = this.visibleWrites_.childCompoundWrite(treePath);\n var shadowingNode = merge.getCompleteNode(Path_1.Path.Empty);\n if (shadowingNode != null) {\n toIterate = shadowingNode;\n }\n else if (completeServerData != null) {\n toIterate = merge.apply(completeServerData);\n }\n else {\n // no children to iterate on\n return [];\n }\n toIterate = toIterate.withIndex(index);\n if (!toIterate.isEmpty() && !toIterate.isLeafNode()) {\n var nodes = [];\n var cmp = index.getCompare();\n var iter = reverse\n ? toIterate.getReverseIteratorFrom(startPost, index)\n : toIterate.getIteratorFrom(startPost, index);\n var next = iter.getNext();\n while (next && nodes.length < count) {\n if (cmp(next, startPost) !== 0) {\n nodes.push(next);\n }\n next = iter.getNext();\n }\n return nodes;\n }\n else {\n return [];\n }\n };\n /**\n * @param {!WriteRecord} writeRecord\n * @param {!Path} path\n * @return {boolean}\n * @private\n */\n WriteTree.prototype.recordContainsPath_ = function (writeRecord, path) {\n if (writeRecord.snap) {\n return writeRecord.path.contains(path);\n }\n else {\n // findKey can return undefined, so use !! to coerce to boolean\n return !!util_1.findKey(writeRecord.children, function (childSnap, childName) {\n return writeRecord.path.child(childName).contains(path);\n });\n }\n };\n /**\n * Re-layer the writes and merges into a tree so we can efficiently calculate event snapshots\n * @private\n */\n WriteTree.prototype.resetTree_ = function () {\n this.visibleWrites_ = WriteTree.layerTree_(this.allWrites_, WriteTree.DefaultFilter_, Path_1.Path.Empty);\n if (this.allWrites_.length > 0) {\n this.lastWriteId_ = this.allWrites_[this.allWrites_.length - 1].writeId;\n }\n else {\n this.lastWriteId_ = -1;\n }\n };\n /**\n * The default filter used when constructing the tree. Keep everything that's visible.\n *\n * @param {!WriteRecord} write\n * @return {boolean}\n * @private\n */\n WriteTree.DefaultFilter_ = function (write) {\n return write.visible;\n };\n /**\n * Static method. Given an array of WriteRecords, a filter for which ones to include, and a path, construct the tree of\n * event data at that path.\n *\n * @param {!Array.} writes\n * @param {!function(!WriteRecord):boolean} filter\n * @param {!Path} treeRoot\n * @return {!CompoundWrite}\n * @private\n */\n WriteTree.layerTree_ = function (writes, filter, treeRoot) {\n var compoundWrite = CompoundWrite_1.CompoundWrite.Empty;\n for (var i = 0; i < writes.length; ++i) {\n var write = writes[i];\n // Theory, a later set will either:\n // a) abort a relevant transaction, so no need to worry about excluding it from calculating that transaction\n // b) not be relevant to a transaction (separate branch), so again will not affect the data for that transaction\n if (filter(write)) {\n var writePath = write.path;\n var relativePath = void 0;\n if (write.snap) {\n if (treeRoot.contains(writePath)) {\n relativePath = Path_1.Path.relativePath(treeRoot, writePath);\n compoundWrite = compoundWrite.addWrite(relativePath, write.snap);\n }\n else if (writePath.contains(treeRoot)) {\n relativePath = Path_1.Path.relativePath(writePath, treeRoot);\n compoundWrite = compoundWrite.addWrite(Path_1.Path.Empty, write.snap.getChild(relativePath));\n }\n else {\n // There is no overlap between root path and write path, ignore write\n }\n }\n else if (write.children) {\n if (treeRoot.contains(writePath)) {\n relativePath = Path_1.Path.relativePath(treeRoot, writePath);\n compoundWrite = compoundWrite.addWrites(relativePath, write.children);\n }\n else if (writePath.contains(treeRoot)) {\n relativePath = Path_1.Path.relativePath(writePath, treeRoot);\n if (relativePath.isEmpty()) {\n compoundWrite = compoundWrite.addWrites(Path_1.Path.Empty, write.children);\n }\n else {\n var child = util_1.safeGet(write.children, relativePath.getFront());\n if (child) {\n // There exists a child in this node that matches the root path\n var deepNode = child.getChild(relativePath.popFront());\n compoundWrite = compoundWrite.addWrite(Path_1.Path.Empty, deepNode);\n }\n }\n }\n else {\n // There is no overlap between root path and write path, ignore write\n }\n }\n else {\n throw util_2.assertionError('WriteRecord should have .snap or .children');\n }\n }\n }\n return compoundWrite;\n };\n return WriteTree;\n}());\nexports.WriteTree = WriteTree;\n/**\n * A WriteTreeRef wraps a WriteTree and a path, for convenient access to a particular subtree. All of the methods\n * just proxy to the underlying WriteTree.\n *\n * @constructor\n */\nvar WriteTreeRef = /** @class */ (function () {\n /**\n * @param {!Path} path\n * @param {!WriteTree} writeTree\n */\n function WriteTreeRef(path, writeTree) {\n this.treePath_ = path;\n this.writeTree_ = writeTree;\n }\n /**\n * If possible, returns a complete event cache, using the underlying server data if possible. In addition, can be used\n * to get a cache that includes hidden writes, and excludes arbitrary writes. Note that customizing the returned node\n * can lead to a more expensive calculation.\n *\n * @param {?Node} completeServerCache\n * @param {Array.=} writeIdsToExclude Optional writes to exclude.\n * @param {boolean=} includeHiddenWrites Defaults to false, whether or not to layer on writes with visible set to false\n * @return {?Node}\n */\n WriteTreeRef.prototype.calcCompleteEventCache = function (completeServerCache, writeIdsToExclude, includeHiddenWrites) {\n return this.writeTree_.calcCompleteEventCache(this.treePath_, completeServerCache, writeIdsToExclude, includeHiddenWrites);\n };\n /**\n * If possible, returns a children node containing all of the complete children we have data for. The returned data is a\n * mix of the given server data and write data.\n *\n * @param {?ChildrenNode} completeServerChildren\n * @return {!ChildrenNode}\n */\n WriteTreeRef.prototype.calcCompleteEventChildren = function (completeServerChildren) {\n return this.writeTree_.calcCompleteEventChildren(this.treePath_, completeServerChildren);\n };\n /**\n * Given that either the underlying server data has updated or the outstanding writes have updated, determine what,\n * if anything, needs to be applied to the event cache.\n *\n * Possibilities:\n *\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\n *\n * 2. Some write is completely shadowing. No events to be raised\n *\n * 3. Is partially shadowed. Events should be raised\n *\n * Either existingEventSnap or existingServerSnap must exist, this is validated via an assert\n *\n * @param {!Path} path\n * @param {?Node} existingEventSnap\n * @param {?Node} existingServerSnap\n * @return {?Node}\n */\n WriteTreeRef.prototype.calcEventCacheAfterServerOverwrite = function (path, existingEventSnap, existingServerSnap) {\n return this.writeTree_.calcEventCacheAfterServerOverwrite(this.treePath_, path, existingEventSnap, existingServerSnap);\n };\n /**\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\n * a higher path, this will return the child of that write relative to the write and this path.\n * Returns null if there is no write at this path.\n *\n * @param {!Path} path\n * @return {?Node}\n */\n WriteTreeRef.prototype.shadowingWrite = function (path) {\n return this.writeTree_.shadowingWrite(this.treePath_.child(path));\n };\n /**\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\n * the window, but may now be in the window\n *\n * @param {?Node} completeServerData\n * @param {!NamedNode} startPost\n * @param {!number} count\n * @param {boolean} reverse\n * @param {!Index} index\n * @return {!Array.}\n */\n WriteTreeRef.prototype.calcIndexedSlice = function (completeServerData, startPost, count, reverse, index) {\n return this.writeTree_.calcIndexedSlice(this.treePath_, completeServerData, startPost, count, reverse, index);\n };\n /**\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\n * complete child for this ChildKey.\n *\n * @param {!string} childKey\n * @param {!CacheNode} existingServerCache\n * @return {?Node}\n */\n WriteTreeRef.prototype.calcCompleteChild = function (childKey, existingServerCache) {\n return this.writeTree_.calcCompleteChild(this.treePath_, childKey, existingServerCache);\n };\n /**\n * Return a WriteTreeRef for a child.\n *\n * @param {string} childName\n * @return {!WriteTreeRef}\n */\n WriteTreeRef.prototype.child = function (childName) {\n return new WriteTreeRef(this.treePath_.child(childName), this.writeTree_);\n };\n return WriteTreeRef;\n}());\nexports.WriteTreeRef = WriteTreeRef;\n\n//# sourceMappingURL=WriteTree.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ImmutableTree_1 = require(\"./util/ImmutableTree\");\nvar Path_1 = require(\"./util/Path\");\nvar util_1 = require(\"@firebase/util\");\nvar Node_1 = require(\"./snap/Node\");\nvar PriorityIndex_1 = require(\"./snap/indexes/PriorityIndex\");\nvar util_2 = require(\"@firebase/util\");\n/**\n * This class holds a collection of writes that can be applied to nodes in unison. It abstracts away the logic with\n * dealing with priority writes and multiple nested writes. At any given path there is only allowed to be one write\n * modifying that path. Any write to an existing path or shadowing an existing path will modify that existing write\n * to reflect the write added.\n *\n * @constructor\n * @param {!ImmutableTree.} writeTree\n */\nvar CompoundWrite = /** @class */ (function () {\n function CompoundWrite(writeTree_) {\n this.writeTree_ = writeTree_;\n }\n /**\n * @param {!Path} path\n * @param {!Node} node\n * @return {!CompoundWrite}\n */\n CompoundWrite.prototype.addWrite = function (path, node) {\n if (path.isEmpty()) {\n return new CompoundWrite(new ImmutableTree_1.ImmutableTree(node));\n }\n else {\n var rootmost = this.writeTree_.findRootMostValueAndPath(path);\n if (rootmost != null) {\n var rootMostPath = rootmost.path;\n var value = rootmost.value;\n var relativePath = Path_1.Path.relativePath(rootMostPath, path);\n value = value.updateChild(relativePath, node);\n return new CompoundWrite(this.writeTree_.set(rootMostPath, value));\n }\n else {\n var subtree = new ImmutableTree_1.ImmutableTree(node);\n var newWriteTree = this.writeTree_.setTree(path, subtree);\n return new CompoundWrite(newWriteTree);\n }\n }\n };\n /**\n * @param {!Path} path\n * @param {!Object.} updates\n * @return {!CompoundWrite}\n */\n CompoundWrite.prototype.addWrites = function (path, updates) {\n var newWrite = this;\n util_1.forEach(updates, function (childKey, node) {\n newWrite = newWrite.addWrite(path.child(childKey), node);\n });\n return newWrite;\n };\n /**\n * Will remove a write at the given path and deeper paths. This will not modify a write at a higher\n * location, which must be removed by calling this method with that path.\n *\n * @param {!Path} path The path at which a write and all deeper writes should be removed\n * @return {!CompoundWrite} The new CompoundWrite with the removed path\n */\n CompoundWrite.prototype.removeWrite = function (path) {\n if (path.isEmpty()) {\n return CompoundWrite.Empty;\n }\n else {\n var newWriteTree = this.writeTree_.setTree(path, ImmutableTree_1.ImmutableTree.Empty);\n return new CompoundWrite(newWriteTree);\n }\n };\n /**\n * Returns whether this CompoundWrite will fully overwrite a node at a given location and can therefore be\n * considered \"complete\".\n *\n * @param {!Path} path The path to check for\n * @return {boolean} Whether there is a complete write at that path\n */\n CompoundWrite.prototype.hasCompleteWrite = function (path) {\n return this.getCompleteNode(path) != null;\n };\n /**\n * Returns a node for a path if and only if the node is a \"complete\" overwrite at that path. This will not aggregate\n * writes from deeper paths, but will return child nodes from a more shallow path.\n *\n * @param {!Path} path The path to get a complete write\n * @return {?Node} The node if complete at that path, or null otherwise.\n */\n CompoundWrite.prototype.getCompleteNode = function (path) {\n var rootmost = this.writeTree_.findRootMostValueAndPath(path);\n if (rootmost != null) {\n return this.writeTree_\n .get(rootmost.path)\n .getChild(Path_1.Path.relativePath(rootmost.path, path));\n }\n else {\n return null;\n }\n };\n /**\n * Returns all children that are guaranteed to be a complete overwrite.\n *\n * @return {!Array.} A list of all complete children.\n */\n CompoundWrite.prototype.getCompleteChildren = function () {\n var children = [];\n var node = this.writeTree_.value;\n if (node != null) {\n // If it's a leaf node, it has no children; so nothing to do.\n if (!node.isLeafNode()) {\n node.forEachChild(PriorityIndex_1.PRIORITY_INDEX, function (childName, childNode) {\n children.push(new Node_1.NamedNode(childName, childNode));\n });\n }\n }\n else {\n this.writeTree_.children.inorderTraversal(function (childName, childTree) {\n if (childTree.value != null) {\n children.push(new Node_1.NamedNode(childName, childTree.value));\n }\n });\n }\n return children;\n };\n /**\n * @param {!Path} path\n * @return {!CompoundWrite}\n */\n CompoundWrite.prototype.childCompoundWrite = function (path) {\n if (path.isEmpty()) {\n return this;\n }\n else {\n var shadowingNode = this.getCompleteNode(path);\n if (shadowingNode != null) {\n return new CompoundWrite(new ImmutableTree_1.ImmutableTree(shadowingNode));\n }\n else {\n return new CompoundWrite(this.writeTree_.subtree(path));\n }\n }\n };\n /**\n * Returns true if this CompoundWrite is empty and therefore does not modify any nodes.\n * @return {boolean} Whether this CompoundWrite is empty\n */\n CompoundWrite.prototype.isEmpty = function () {\n return this.writeTree_.isEmpty();\n };\n /**\n * Applies this CompoundWrite to a node. The node is returned with all writes from this CompoundWrite applied to the\n * node\n * @param {!Node} node The node to apply this CompoundWrite to\n * @return {!Node} The node with all writes applied\n */\n CompoundWrite.prototype.apply = function (node) {\n return CompoundWrite.applySubtreeWrite_(Path_1.Path.Empty, this.writeTree_, node);\n };\n /**\n * @type {!CompoundWrite}\n */\n CompoundWrite.Empty = new CompoundWrite(new ImmutableTree_1.ImmutableTree(null));\n /**\n * @param {!Path} relativePath\n * @param {!ImmutableTree.} writeTree\n * @param {!Node} node\n * @return {!Node}\n * @private\n */\n CompoundWrite.applySubtreeWrite_ = function (relativePath, writeTree, node) {\n if (writeTree.value != null) {\n // Since there a write is always a leaf, we're done here\n return node.updateChild(relativePath, writeTree.value);\n }\n else {\n var priorityWrite_1 = null;\n writeTree.children.inorderTraversal(function (childKey, childTree) {\n if (childKey === '.priority') {\n // Apply priorities at the end so we don't update priorities for either empty nodes or forget\n // to apply priorities to empty nodes that are later filled\n util_2.assert(childTree.value !== null, 'Priority writes must always be leaf nodes');\n priorityWrite_1 = childTree.value;\n }\n else {\n node = CompoundWrite.applySubtreeWrite_(relativePath.child(childKey), childTree, node);\n }\n });\n // If there was a priority write, we only apply it if the node is not empty\n if (!node.getChild(relativePath).isEmpty() && priorityWrite_1 !== null) {\n node = node.updateChild(relativePath.child('.priority'), priorityWrite_1);\n }\n return node;\n }\n };\n return CompoundWrite;\n}());\nexports.CompoundWrite = CompoundWrite;\n\n//# sourceMappingURL=CompoundWrite.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ChildrenNode_1 = require(\"./snap/ChildrenNode\");\n/**\n * Mutable object which basically just stores a reference to the \"latest\" immutable snapshot.\n *\n * @constructor\n */\nvar SnapshotHolder = /** @class */ (function () {\n function SnapshotHolder() {\n this.rootNode_ = ChildrenNode_1.ChildrenNode.EMPTY_NODE;\n }\n SnapshotHolder.prototype.getNode = function (path) {\n return this.rootNode_.getChild(path);\n };\n SnapshotHolder.prototype.updateSnapshot = function (path, newSnapshotNode) {\n this.rootNode_ = this.rootNode_.updateChild(path, newSnapshotNode);\n };\n return SnapshotHolder;\n}());\nexports.SnapshotHolder = SnapshotHolder;\n\n//# sourceMappingURL=SnapshotHolder.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"./util/util\");\n/**\n * Abstraction around FirebaseApp's token fetching capabilities.\n */\nvar AuthTokenProvider = /** @class */ (function () {\n /**\n * @param {!FirebaseApp} app_\n */\n function AuthTokenProvider(app_) {\n this.app_ = app_;\n }\n /**\n * @param {boolean} forceRefresh\n * @return {!Promise}\n */\n AuthTokenProvider.prototype.getToken = function (forceRefresh) {\n return this.app_['INTERNAL']['getToken'](forceRefresh).then(null, \n // .catch\n function (error) {\n // TODO: Need to figure out all the cases this is raised and whether\n // this makes sense.\n if (error && error.code === 'auth/token-not-initialized') {\n util_1.log('Got auth/token-not-initialized error. Treating as null token.');\n return null;\n }\n else {\n return Promise.reject(error);\n }\n });\n };\n AuthTokenProvider.prototype.addTokenChangeListener = function (listener) {\n // TODO: We might want to wrap the listener and call it with no args to\n // avoid a leaky abstraction, but that makes removing the listener harder.\n this.app_['INTERNAL']['addAuthTokenListener'](listener);\n };\n AuthTokenProvider.prototype.removeTokenChangeListener = function (listener) {\n this.app_['INTERNAL']['removeAuthTokenListener'](listener);\n };\n AuthTokenProvider.prototype.notifyForInvalidToken = function () {\n var errorMessage = 'Provided authentication credentials for the app named \"' +\n this.app_.name +\n '\" are invalid. This usually indicates your app was not ' +\n 'initialized correctly. ';\n if ('credential' in this.app_.options) {\n errorMessage +=\n 'Make sure the \"credential\" property provided to initializeApp() ' +\n 'is authorized to access the specified \"databaseURL\" and is from the correct ' +\n 'project.';\n }\n else if ('serviceAccount' in this.app_.options) {\n errorMessage +=\n 'Make sure the \"serviceAccount\" property provided to initializeApp() ' +\n 'is authorized to access the specified \"databaseURL\" and is from the correct ' +\n 'project.';\n }\n else {\n errorMessage +=\n 'Make sure the \"apiKey\" and \"databaseURL\" properties provided to ' +\n 'initializeApp() match the values provided for your app at ' +\n 'https://console.firebase.google.com/.';\n }\n util_1.warn(errorMessage);\n };\n return AuthTokenProvider;\n}());\nexports.AuthTokenProvider = AuthTokenProvider;\n\n//# sourceMappingURL=AuthTokenProvider.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar util_2 = require(\"@firebase/util\");\n/**\n * Tracks a collection of stats.\n *\n * @constructor\n */\nvar StatsCollection = /** @class */ (function () {\n function StatsCollection() {\n this.counters_ = {};\n }\n StatsCollection.prototype.incrementCounter = function (name, amount) {\n if (amount === void 0) { amount = 1; }\n if (!util_2.contains(this.counters_, name))\n this.counters_[name] = 0;\n this.counters_[name] += amount;\n };\n StatsCollection.prototype.get = function () {\n return util_1.deepCopy(this.counters_);\n };\n return StatsCollection;\n}());\nexports.StatsCollection = StatsCollection;\n\n//# sourceMappingURL=StatsCollection.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar util_2 = require(\"../util/util\");\nvar StatsListener_1 = require(\"./StatsListener\");\n// Assuming some apps may have a short amount of time on page, and a bulk of firebase operations probably\n// happen on page load, we try to report our first set of stats pretty quickly, but we wait at least 10\n// seconds to try to ensure the Firebase connection is established / settled.\nvar FIRST_STATS_MIN_TIME = 10 * 1000;\nvar FIRST_STATS_MAX_TIME = 30 * 1000;\n// We'll continue to report stats on average every 5 minutes.\nvar REPORT_STATS_INTERVAL = 5 * 60 * 1000;\n/**\n * @constructor\n */\nvar StatsReporter = /** @class */ (function () {\n /**\n * @param collection\n * @param server_\n */\n function StatsReporter(collection, server_) {\n this.server_ = server_;\n this.statsToReport_ = {};\n this.statsListener_ = new StatsListener_1.StatsListener(collection);\n var timeout = FIRST_STATS_MIN_TIME +\n (FIRST_STATS_MAX_TIME - FIRST_STATS_MIN_TIME) * Math.random();\n util_2.setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(timeout));\n }\n StatsReporter.prototype.includeStat = function (stat) {\n this.statsToReport_[stat] = true;\n };\n StatsReporter.prototype.reportStats_ = function () {\n var _this = this;\n var stats = this.statsListener_.get();\n var reportedStats = {};\n var haveStatsToReport = false;\n util_1.forEach(stats, function (stat, value) {\n if (value > 0 && util_1.contains(_this.statsToReport_, stat)) {\n reportedStats[stat] = value;\n haveStatsToReport = true;\n }\n });\n if (haveStatsToReport) {\n this.server_.reportStats(reportedStats);\n }\n // queue our next run.\n util_2.setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(Math.random() * 2 * REPORT_STATS_INTERVAL));\n };\n return StatsReporter;\n}());\nexports.StatsReporter = StatsReporter;\n\n//# sourceMappingURL=StatsReporter.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"../util/util\");\n/**\n * The event queue serves a few purposes:\n * 1. It ensures we maintain event order in the face of event callbacks doing operations that result in more\n * events being queued.\n * 2. raiseQueuedEvents() handles being called reentrantly nicely. That is, if in the course of raising events,\n * raiseQueuedEvents() is called again, the \"inner\" call will pick up raising events where the \"outer\" call\n * left off, ensuring that the events are still raised synchronously and in order.\n * 3. You can use raiseEventsAtPath and raiseEventsForChangedPath to ensure only relevant previously-queued\n * events are raised synchronously.\n *\n * NOTE: This can all go away if/when we move to async events.\n *\n * @constructor\n */\nvar EventQueue = /** @class */ (function () {\n function EventQueue() {\n /**\n * @private\n * @type {!Array.}\n */\n this.eventLists_ = [];\n /**\n * Tracks recursion depth of raiseQueuedEvents_, for debugging purposes.\n * @private\n * @type {!number}\n */\n this.recursionDepth_ = 0;\n }\n /**\n * @param {!Array.} eventDataList The new events to queue.\n */\n EventQueue.prototype.queueEvents = function (eventDataList) {\n // We group events by path, storing them in a single EventList, to make it easier to skip over them quickly.\n var currList = null;\n for (var i = 0; i < eventDataList.length; i++) {\n var eventData = eventDataList[i];\n var eventPath = eventData.getPath();\n if (currList !== null && !eventPath.equals(currList.getPath())) {\n this.eventLists_.push(currList);\n currList = null;\n }\n if (currList === null) {\n currList = new EventList(eventPath);\n }\n currList.add(eventData);\n }\n if (currList) {\n this.eventLists_.push(currList);\n }\n };\n /**\n * Queues the specified events and synchronously raises all events (including previously queued ones)\n * for the specified path.\n *\n * It is assumed that the new events are all for the specified path.\n *\n * @param {!Path} path The path to raise events for.\n * @param {!Array.} eventDataList The new events to raise.\n */\n EventQueue.prototype.raiseEventsAtPath = function (path, eventDataList) {\n this.queueEvents(eventDataList);\n this.raiseQueuedEventsMatchingPredicate_(function (eventPath) {\n return eventPath.equals(path);\n });\n };\n /**\n * Queues the specified events and synchronously raises all events (including previously queued ones) for\n * locations related to the specified change path (i.e. all ancestors and descendants).\n *\n * It is assumed that the new events are all related (ancestor or descendant) to the specified path.\n *\n * @param {!Path} changedPath The path to raise events for.\n * @param {!Array.} eventDataList The events to raise\n */\n EventQueue.prototype.raiseEventsForChangedPath = function (changedPath, eventDataList) {\n this.queueEvents(eventDataList);\n this.raiseQueuedEventsMatchingPredicate_(function (eventPath) {\n return eventPath.contains(changedPath) || changedPath.contains(eventPath);\n });\n };\n /**\n * @param {!function(!Path):boolean} predicate\n * @private\n */\n EventQueue.prototype.raiseQueuedEventsMatchingPredicate_ = function (predicate) {\n this.recursionDepth_++;\n var sentAll = true;\n for (var i = 0; i < this.eventLists_.length; i++) {\n var eventList = this.eventLists_[i];\n if (eventList) {\n var eventPath = eventList.getPath();\n if (predicate(eventPath)) {\n this.eventLists_[i].raise();\n this.eventLists_[i] = null;\n }\n else {\n sentAll = false;\n }\n }\n }\n if (sentAll) {\n this.eventLists_ = [];\n }\n this.recursionDepth_--;\n };\n return EventQueue;\n}());\nexports.EventQueue = EventQueue;\n/**\n * @param {!Path} path\n * @constructor\n */\nvar EventList = /** @class */ (function () {\n function EventList(path_) {\n this.path_ = path_;\n /**\n * @type {!Array.}\n * @private\n */\n this.events_ = [];\n }\n /**\n * @param {!Event} eventData\n */\n EventList.prototype.add = function (eventData) {\n this.events_.push(eventData);\n };\n /**\n * Iterates through the list and raises each event\n */\n EventList.prototype.raise = function () {\n for (var i = 0; i < this.events_.length; i++) {\n var eventData = this.events_[i];\n if (eventData !== null) {\n this.events_[i] = null;\n var eventFn = eventData.getEventRunner();\n if (util_1.logger) {\n util_1.log('event: ' + eventData.toString());\n }\n util_1.exceptionGuard(eventFn);\n }\n }\n };\n /**\n * @return {!Path}\n */\n EventList.prototype.getPath = function () {\n return this.path_;\n };\n return EventList;\n}());\nexports.EventList = EventList;\n\n//# sourceMappingURL=EventQueue.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar EventEmitter_1 = require(\"./EventEmitter\");\nvar util_1 = require(\"@firebase/util\");\n/**\n * @extends {EventEmitter}\n */\nvar VisibilityMonitor = /** @class */ (function (_super) {\n __extends(VisibilityMonitor, _super);\n function VisibilityMonitor() {\n var _this = _super.call(this, ['visible']) || this;\n var hidden;\n var visibilityChange;\n if (typeof document !== 'undefined' &&\n typeof document.addEventListener !== 'undefined') {\n if (typeof document['hidden'] !== 'undefined') {\n // Opera 12.10 and Firefox 18 and later support\n visibilityChange = 'visibilitychange';\n hidden = 'hidden';\n }\n else if (typeof document['mozHidden'] !== 'undefined') {\n visibilityChange = 'mozvisibilitychange';\n hidden = 'mozHidden';\n }\n else if (typeof document['msHidden'] !== 'undefined') {\n visibilityChange = 'msvisibilitychange';\n hidden = 'msHidden';\n }\n else if (typeof document['webkitHidden'] !== 'undefined') {\n visibilityChange = 'webkitvisibilitychange';\n hidden = 'webkitHidden';\n }\n }\n // Initially, we always assume we are visible. This ensures that in browsers\n // without page visibility support or in cases where we are never visible\n // (e.g. chrome extension), we act as if we are visible, i.e. don't delay\n // reconnects\n _this.visible_ = true;\n if (visibilityChange) {\n document.addEventListener(visibilityChange, function () {\n var visible = !document[hidden];\n if (visible !== _this.visible_) {\n _this.visible_ = visible;\n _this.trigger('visible', visible);\n }\n }, false);\n }\n return _this;\n }\n VisibilityMonitor.getInstance = function () {\n return new VisibilityMonitor();\n };\n /**\n * @param {!string} eventType\n * @return {Array.}\n */\n VisibilityMonitor.prototype.getInitialEvent = function (eventType) {\n util_1.assert(eventType === 'visible', 'Unknown event type: ' + eventType);\n return [this.visible_];\n };\n return VisibilityMonitor;\n}(EventEmitter_1.EventEmitter));\nexports.VisibilityMonitor = VisibilityMonitor;\n\n//# sourceMappingURL=VisibilityMonitor.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar EventEmitter_1 = require(\"./EventEmitter\");\nvar util_2 = require(\"@firebase/util\");\n/**\n * Monitors online state (as reported by window.online/offline events).\n *\n * The expectation is that this could have many false positives (thinks we are online\n * when we're not), but no false negatives. So we can safely use it to determine when\n * we definitely cannot reach the internet.\n *\n * @extends {EventEmitter}\n */\nvar OnlineMonitor = /** @class */ (function (_super) {\n __extends(OnlineMonitor, _super);\n function OnlineMonitor() {\n var _this = _super.call(this, ['online']) || this;\n _this.online_ = true;\n // We've had repeated complaints that Cordova apps can get stuck \"offline\", e.g.\n // https://forum.ionicframework.com/t/firebase-connection-is-lost-and-never-come-back/43810\n // It would seem that the 'online' event does not always fire consistently. So we disable it\n // for Cordova.\n if (typeof window !== 'undefined' &&\n typeof window.addEventListener !== 'undefined' &&\n !util_2.isMobileCordova()) {\n window.addEventListener('online', function () {\n if (!_this.online_) {\n _this.online_ = true;\n _this.trigger('online', true);\n }\n }, false);\n window.addEventListener('offline', function () {\n if (_this.online_) {\n _this.online_ = false;\n _this.trigger('online', false);\n }\n }, false);\n }\n return _this;\n }\n OnlineMonitor.getInstance = function () {\n return new OnlineMonitor();\n };\n /**\n * @param {!string} eventType\n * @return {Array.}\n */\n OnlineMonitor.prototype.getInitialEvent = function (eventType) {\n util_1.assert(eventType === 'online', 'Unknown event type: ' + eventType);\n return [this.online_];\n };\n /**\n * @return {boolean}\n */\n OnlineMonitor.prototype.currentlyOnline = function () {\n return this.online_;\n };\n return OnlineMonitor;\n}(EventEmitter_1.EventEmitter));\nexports.OnlineMonitor = OnlineMonitor;\n\n//# sourceMappingURL=OnlineMonitor.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar BrowserPollConnection_1 = require(\"./BrowserPollConnection\");\nvar WebSocketConnection_1 = require(\"./WebSocketConnection\");\nvar util_1 = require(\"../core/util/util\");\n/**\n * Currently simplistic, this class manages what transport a Connection should use at various stages of its\n * lifecycle.\n *\n * It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if\n * they are available.\n * @constructor\n */\nvar TransportManager = /** @class */ (function () {\n /**\n * @param {!RepoInfo} repoInfo Metadata around the namespace we're connecting to\n */\n function TransportManager(repoInfo) {\n this.initTransports_(repoInfo);\n }\n Object.defineProperty(TransportManager, \"ALL_TRANSPORTS\", {\n /**\n * @const\n * @type {!Array.}\n */\n get: function () {\n return [BrowserPollConnection_1.BrowserPollConnection, WebSocketConnection_1.WebSocketConnection];\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @param {!RepoInfo} repoInfo\n * @private\n */\n TransportManager.prototype.initTransports_ = function (repoInfo) {\n var isWebSocketsAvailable = WebSocketConnection_1.WebSocketConnection && WebSocketConnection_1.WebSocketConnection['isAvailable']();\n var isSkipPollConnection = isWebSocketsAvailable && !WebSocketConnection_1.WebSocketConnection.previouslyFailed();\n if (repoInfo.webSocketOnly) {\n if (!isWebSocketsAvailable)\n util_1.warn(\"wss:// URL used, but browser isn't known to support websockets. Trying anyway.\");\n isSkipPollConnection = true;\n }\n if (isSkipPollConnection) {\n this.transports_ = [WebSocketConnection_1.WebSocketConnection];\n }\n else {\n var transports_1 = (this.transports_ = []);\n util_1.each(TransportManager.ALL_TRANSPORTS, function (i, transport) {\n if (transport && transport['isAvailable']()) {\n transports_1.push(transport);\n }\n });\n }\n };\n /**\n * @return {function(new:Transport, !string, !RepoInfo, string=, string=)} The constructor for the\n * initial transport to use\n */\n TransportManager.prototype.initialTransport = function () {\n if (this.transports_.length > 0) {\n return this.transports_[0];\n }\n else {\n throw new Error('No transports available');\n }\n };\n /**\n * @return {?function(new:Transport, function(),function(), string=)} The constructor for the next\n * transport, or null\n */\n TransportManager.prototype.upgradeTransport = function () {\n if (this.transports_.length > 1) {\n return this.transports_[1];\n }\n else {\n return null;\n }\n };\n return TransportManager;\n}());\nexports.TransportManager = TransportManager;\n\n//# sourceMappingURL=TransportManager.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"../../core/util/util\");\n/**\n * This class ensures the packets from the server arrive in order\n * This class takes data from the server and ensures it gets passed into the callbacks in order.\n * @constructor\n */\nvar PacketReceiver = /** @class */ (function () {\n /**\n * @param onMessage_\n */\n function PacketReceiver(onMessage_) {\n this.onMessage_ = onMessage_;\n this.pendingResponses = [];\n this.currentResponseNum = 0;\n this.closeAfterResponse = -1;\n this.onClose = null;\n }\n PacketReceiver.prototype.closeAfter = function (responseNum, callback) {\n this.closeAfterResponse = responseNum;\n this.onClose = callback;\n if (this.closeAfterResponse < this.currentResponseNum) {\n this.onClose();\n this.onClose = null;\n }\n };\n /**\n * Each message from the server comes with a response number, and an array of data. The responseNumber\n * allows us to ensure that we process them in the right order, since we can't be guaranteed that all\n * browsers will respond in the same order as the requests we sent\n * @param {number} requestNum\n * @param {Array} data\n */\n PacketReceiver.prototype.handleResponse = function (requestNum, data) {\n var _this = this;\n this.pendingResponses[requestNum] = data;\n var _loop_1 = function () {\n var toProcess = this_1.pendingResponses[this_1.currentResponseNum];\n delete this_1.pendingResponses[this_1.currentResponseNum];\n var _loop_2 = function (i) {\n if (toProcess[i]) {\n util_1.exceptionGuard(function () {\n _this.onMessage_(toProcess[i]);\n });\n }\n };\n for (var i = 0; i < toProcess.length; ++i) {\n _loop_2(i);\n }\n if (this_1.currentResponseNum === this_1.closeAfterResponse) {\n if (this_1.onClose) {\n this_1.onClose();\n this_1.onClose = null;\n }\n return \"break\";\n }\n this_1.currentResponseNum++;\n };\n var this_1 = this;\n while (this.pendingResponses[this.currentResponseNum]) {\n var state_1 = _loop_1();\n if (state_1 === \"break\")\n break;\n }\n };\n return PacketReceiver;\n}());\nexports.PacketReceiver = PacketReceiver;\n\n//# sourceMappingURL=PacketReceiver.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar util_2 = require(\"./util/util\");\nvar util_3 = require(\"@firebase/util\");\nvar util_4 = require(\"@firebase/util\");\nvar util_5 = require(\"@firebase/util\");\nvar ServerActions_1 = require(\"./ServerActions\");\n/**\n * An implementation of ServerActions that communicates with the server via REST requests.\n * This is mostly useful for compatibility with crawlers, where we don't want to spin up a full\n * persistent connection (using WebSockets or long-polling)\n */\nvar ReadonlyRestClient = /** @class */ (function (_super) {\n __extends(ReadonlyRestClient, _super);\n /**\n * @param {!RepoInfo} repoInfo_ Data about the namespace we are connecting to\n * @param {function(string, *, boolean, ?number)} onDataUpdate_ A callback for new data from the server\n * @param {AuthTokenProvider} authTokenProvider_\n * @implements {ServerActions}\n */\n function ReadonlyRestClient(repoInfo_, onDataUpdate_, authTokenProvider_) {\n var _this = _super.call(this) || this;\n _this.repoInfo_ = repoInfo_;\n _this.onDataUpdate_ = onDataUpdate_;\n _this.authTokenProvider_ = authTokenProvider_;\n /** @private {function(...[*])} */\n _this.log_ = util_2.logWrapper('p:rest:');\n /**\n * We don't actually need to track listens, except to prevent us calling an onComplete for a listen\n * that's been removed. :-/\n *\n * @private {!Object.}\n */\n _this.listens_ = {};\n return _this;\n }\n ReadonlyRestClient.prototype.reportStats = function (stats) {\n throw new Error('Method not implemented.');\n };\n /**\n * @param {!Query} query\n * @param {?number=} tag\n * @return {string}\n * @private\n */\n ReadonlyRestClient.getListenId_ = function (query, tag) {\n if (tag !== undefined) {\n return 'tag$' + tag;\n }\n else {\n util_1.assert(query.getQueryParams().isDefault(), \"should have a tag if it's not a default query.\");\n return query.path.toString();\n }\n };\n /** @inheritDoc */\n ReadonlyRestClient.prototype.listen = function (query, currentHashFn, tag, onComplete) {\n var _this = this;\n var pathString = query.path.toString();\n this.log_('Listen called for ' + pathString + ' ' + query.queryIdentifier());\n // Mark this listener so we can tell if it's removed.\n var listenId = ReadonlyRestClient.getListenId_(query, tag);\n var thisListen = {};\n this.listens_[listenId] = thisListen;\n var queryStringParamaters = query\n .getQueryParams()\n .toRestQueryStringParameters();\n this.restRequest_(pathString + '.json', queryStringParamaters, function (error, result) {\n var data = result;\n if (error === 404) {\n data = null;\n error = null;\n }\n if (error === null) {\n _this.onDataUpdate_(pathString, data, /*isMerge=*/ false, tag);\n }\n if (util_4.safeGet(_this.listens_, listenId) === thisListen) {\n var status_1;\n if (!error) {\n status_1 = 'ok';\n }\n else if (error == 401) {\n status_1 = 'permission_denied';\n }\n else {\n status_1 = 'rest_error:' + error;\n }\n onComplete(status_1, null);\n }\n });\n };\n /** @inheritDoc */\n ReadonlyRestClient.prototype.unlisten = function (query, tag) {\n var listenId = ReadonlyRestClient.getListenId_(query, tag);\n delete this.listens_[listenId];\n };\n /** @inheritDoc */\n ReadonlyRestClient.prototype.refreshAuthToken = function (token) {\n // no-op since we just always call getToken.\n };\n /**\n * Performs a REST request to the given path, with the provided query string parameters,\n * and any auth credentials we have.\n *\n * @param {!string} pathString\n * @param {!Object.} queryStringParameters\n * @param {?function(?number, *=)} callback\n * @private\n */\n ReadonlyRestClient.prototype.restRequest_ = function (pathString, queryStringParameters, callback) {\n var _this = this;\n if (queryStringParameters === void 0) { queryStringParameters = {}; }\n queryStringParameters['format'] = 'export';\n this.authTokenProvider_\n .getToken(/*forceRefresh=*/ false)\n .then(function (authTokenData) {\n var authToken = authTokenData && authTokenData.accessToken;\n if (authToken) {\n queryStringParameters['auth'] = authToken;\n }\n var url = (_this.repoInfo_.secure ? 'https://' : 'http://') +\n _this.repoInfo_.host +\n pathString +\n '?' +\n util_5.querystring(queryStringParameters);\n _this.log_('Sending REST request for ' + url);\n var xhr = new XMLHttpRequest();\n xhr.onreadystatechange = function () {\n if (callback && xhr.readyState === 4) {\n _this.log_('REST Response for ' + url + ' received. status:', xhr.status, 'response:', xhr.responseText);\n var res = null;\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n res = util_3.jsonEval(xhr.responseText);\n }\n catch (e) {\n util_2.warn('Failed to parse JSON response for ' +\n url +\n ': ' +\n xhr.responseText);\n }\n callback(null, res);\n }\n else {\n // 401 and 404 are expected.\n if (xhr.status !== 401 && xhr.status !== 404) {\n util_2.warn('Got unsuccessful REST response for ' +\n url +\n ' Status: ' +\n xhr.status);\n }\n callback(xhr.status);\n }\n callback = null;\n }\n };\n xhr.open('GET', url, /*asynchronous=*/ true);\n xhr.send();\n });\n };\n return ReadonlyRestClient;\n}(ServerActions_1.ServerActions));\nexports.ReadonlyRestClient = ReadonlyRestClient;\n\n//# sourceMappingURL=ReadonlyRestClient.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar util_2 = require(\"../util/util\");\nvar KeyIndex_1 = require(\"../snap/indexes/KeyIndex\");\nvar PriorityIndex_1 = require(\"../snap/indexes/PriorityIndex\");\nvar ValueIndex_1 = require(\"../snap/indexes/ValueIndex\");\nvar PathIndex_1 = require(\"../snap/indexes/PathIndex\");\nvar IndexedFilter_1 = require(\"./filter/IndexedFilter\");\nvar LimitedFilter_1 = require(\"./filter/LimitedFilter\");\nvar RangedFilter_1 = require(\"./filter/RangedFilter\");\nvar util_3 = require(\"@firebase/util\");\n/**\n * This class is an immutable-from-the-public-api struct containing a set of query parameters defining a\n * range to be returned for a particular location. It is assumed that validation of parameters is done at the\n * user-facing API level, so it is not done here.\n * @constructor\n */\nvar QueryParams = /** @class */ (function () {\n function QueryParams() {\n this.limitSet_ = false;\n this.startSet_ = false;\n this.startNameSet_ = false;\n this.endSet_ = false;\n this.endNameSet_ = false;\n this.limit_ = 0;\n this.viewFrom_ = '';\n this.indexStartValue_ = null;\n this.indexStartName_ = '';\n this.indexEndValue_ = null;\n this.indexEndName_ = '';\n this.index_ = PriorityIndex_1.PRIORITY_INDEX;\n }\n /**\n * @return {boolean}\n */\n QueryParams.prototype.hasStart = function () {\n return this.startSet_;\n };\n /**\n * @return {boolean} True if it would return from left.\n */\n QueryParams.prototype.isViewFromLeft = function () {\n if (this.viewFrom_ === '') {\n // limit(), rather than limitToFirst or limitToLast was called.\n // This means that only one of startSet_ and endSet_ is true. Use them\n // to calculate which side of the view to anchor to. If neither is set,\n // anchor to the end.\n return this.startSet_;\n }\n else {\n return (this.viewFrom_ === QueryParams.WIRE_PROTOCOL_CONSTANTS_.VIEW_FROM_LEFT);\n }\n };\n /**\n * Only valid to call if hasStart() returns true\n * @return {*}\n */\n QueryParams.prototype.getIndexStartValue = function () {\n util_1.assert(this.startSet_, 'Only valid if start has been set');\n return this.indexStartValue_;\n };\n /**\n * Only valid to call if hasStart() returns true.\n * Returns the starting key name for the range defined by these query parameters\n * @return {!string}\n */\n QueryParams.prototype.getIndexStartName = function () {\n util_1.assert(this.startSet_, 'Only valid if start has been set');\n if (this.startNameSet_) {\n return this.indexStartName_;\n }\n else {\n return util_2.MIN_NAME;\n }\n };\n /**\n * @return {boolean}\n */\n QueryParams.prototype.hasEnd = function () {\n return this.endSet_;\n };\n /**\n * Only valid to call if hasEnd() returns true.\n * @return {*}\n */\n QueryParams.prototype.getIndexEndValue = function () {\n util_1.assert(this.endSet_, 'Only valid if end has been set');\n return this.indexEndValue_;\n };\n /**\n * Only valid to call if hasEnd() returns true.\n * Returns the end key name for the range defined by these query parameters\n * @return {!string}\n */\n QueryParams.prototype.getIndexEndName = function () {\n util_1.assert(this.endSet_, 'Only valid if end has been set');\n if (this.endNameSet_) {\n return this.indexEndName_;\n }\n else {\n return util_2.MAX_NAME;\n }\n };\n /**\n * @return {boolean}\n */\n QueryParams.prototype.hasLimit = function () {\n return this.limitSet_;\n };\n /**\n * @return {boolean} True if a limit has been set and it has been explicitly anchored\n */\n QueryParams.prototype.hasAnchoredLimit = function () {\n return this.limitSet_ && this.viewFrom_ !== '';\n };\n /**\n * Only valid to call if hasLimit() returns true\n * @return {!number}\n */\n QueryParams.prototype.getLimit = function () {\n util_1.assert(this.limitSet_, 'Only valid if limit has been set');\n return this.limit_;\n };\n /**\n * @return {!Index}\n */\n QueryParams.prototype.getIndex = function () {\n return this.index_;\n };\n /**\n * @return {!QueryParams}\n * @private\n */\n QueryParams.prototype.copy_ = function () {\n var copy = new QueryParams();\n copy.limitSet_ = this.limitSet_;\n copy.limit_ = this.limit_;\n copy.startSet_ = this.startSet_;\n copy.indexStartValue_ = this.indexStartValue_;\n copy.startNameSet_ = this.startNameSet_;\n copy.indexStartName_ = this.indexStartName_;\n copy.endSet_ = this.endSet_;\n copy.indexEndValue_ = this.indexEndValue_;\n copy.endNameSet_ = this.endNameSet_;\n copy.indexEndName_ = this.indexEndName_;\n copy.index_ = this.index_;\n copy.viewFrom_ = this.viewFrom_;\n return copy;\n };\n /**\n * @param {!number} newLimit\n * @return {!QueryParams}\n */\n QueryParams.prototype.limit = function (newLimit) {\n var newParams = this.copy_();\n newParams.limitSet_ = true;\n newParams.limit_ = newLimit;\n newParams.viewFrom_ = '';\n return newParams;\n };\n /**\n * @param {!number} newLimit\n * @return {!QueryParams}\n */\n QueryParams.prototype.limitToFirst = function (newLimit) {\n var newParams = this.copy_();\n newParams.limitSet_ = true;\n newParams.limit_ = newLimit;\n newParams.viewFrom_ = QueryParams.WIRE_PROTOCOL_CONSTANTS_.VIEW_FROM_LEFT;\n return newParams;\n };\n /**\n * @param {!number} newLimit\n * @return {!QueryParams}\n */\n QueryParams.prototype.limitToLast = function (newLimit) {\n var newParams = this.copy_();\n newParams.limitSet_ = true;\n newParams.limit_ = newLimit;\n newParams.viewFrom_ = QueryParams.WIRE_PROTOCOL_CONSTANTS_.VIEW_FROM_RIGHT;\n return newParams;\n };\n /**\n * @param {*} indexValue\n * @param {?string=} key\n * @return {!QueryParams}\n */\n QueryParams.prototype.startAt = function (indexValue, key) {\n var newParams = this.copy_();\n newParams.startSet_ = true;\n if (!(indexValue !== undefined)) {\n indexValue = null;\n }\n newParams.indexStartValue_ = indexValue;\n if (key != null) {\n newParams.startNameSet_ = true;\n newParams.indexStartName_ = key;\n }\n else {\n newParams.startNameSet_ = false;\n newParams.indexStartName_ = '';\n }\n return newParams;\n };\n /**\n * @param {*} indexValue\n * @param {?string=} key\n * @return {!QueryParams}\n */\n QueryParams.prototype.endAt = function (indexValue, key) {\n var newParams = this.copy_();\n newParams.endSet_ = true;\n if (!(indexValue !== undefined)) {\n indexValue = null;\n }\n newParams.indexEndValue_ = indexValue;\n if (key !== undefined) {\n newParams.endNameSet_ = true;\n newParams.indexEndName_ = key;\n }\n else {\n newParams.endNameSet_ = false;\n newParams.indexEndName_ = '';\n }\n return newParams;\n };\n /**\n * @param {!Index} index\n * @return {!QueryParams}\n */\n QueryParams.prototype.orderBy = function (index) {\n var newParams = this.copy_();\n newParams.index_ = index;\n return newParams;\n };\n /**\n * @return {!Object}\n */\n QueryParams.prototype.getQueryObject = function () {\n var WIRE_PROTOCOL_CONSTANTS = QueryParams.WIRE_PROTOCOL_CONSTANTS_;\n var obj = {};\n if (this.startSet_) {\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_START_VALUE] = this.indexStartValue_;\n if (this.startNameSet_) {\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_START_NAME] = this.indexStartName_;\n }\n }\n if (this.endSet_) {\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_END_VALUE] = this.indexEndValue_;\n if (this.endNameSet_) {\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_END_NAME] = this.indexEndName_;\n }\n }\n if (this.limitSet_) {\n obj[WIRE_PROTOCOL_CONSTANTS.LIMIT] = this.limit_;\n var viewFrom = this.viewFrom_;\n if (viewFrom === '') {\n if (this.isViewFromLeft()) {\n viewFrom = WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT;\n }\n else {\n viewFrom = WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT;\n }\n }\n obj[WIRE_PROTOCOL_CONSTANTS.VIEW_FROM] = viewFrom;\n }\n // For now, priority index is the default, so we only specify if it's some other index\n if (this.index_ !== PriorityIndex_1.PRIORITY_INDEX) {\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX] = this.index_.toString();\n }\n return obj;\n };\n /**\n * @return {boolean}\n */\n QueryParams.prototype.loadsAllData = function () {\n return !(this.startSet_ || this.endSet_ || this.limitSet_);\n };\n /**\n * @return {boolean}\n */\n QueryParams.prototype.isDefault = function () {\n return this.loadsAllData() && this.index_ == PriorityIndex_1.PRIORITY_INDEX;\n };\n /**\n * @return {!NodeFilter}\n */\n QueryParams.prototype.getNodeFilter = function () {\n if (this.loadsAllData()) {\n return new IndexedFilter_1.IndexedFilter(this.getIndex());\n }\n else if (this.hasLimit()) {\n return new LimitedFilter_1.LimitedFilter(this);\n }\n else {\n return new RangedFilter_1.RangedFilter(this);\n }\n };\n /**\n * Returns a set of REST query string parameters representing this query.\n *\n * @return {!Object.} query string parameters\n */\n QueryParams.prototype.toRestQueryStringParameters = function () {\n var REST_CONSTANTS = QueryParams.REST_QUERY_CONSTANTS_;\n var qs = {};\n if (this.isDefault()) {\n return qs;\n }\n var orderBy;\n if (this.index_ === PriorityIndex_1.PRIORITY_INDEX) {\n orderBy = REST_CONSTANTS.PRIORITY_INDEX;\n }\n else if (this.index_ === ValueIndex_1.VALUE_INDEX) {\n orderBy = REST_CONSTANTS.VALUE_INDEX;\n }\n else if (this.index_ === KeyIndex_1.KEY_INDEX) {\n orderBy = REST_CONSTANTS.KEY_INDEX;\n }\n else {\n util_1.assert(this.index_ instanceof PathIndex_1.PathIndex, 'Unrecognized index type!');\n orderBy = this.index_.toString();\n }\n qs[REST_CONSTANTS.ORDER_BY] = util_3.stringify(orderBy);\n if (this.startSet_) {\n qs[REST_CONSTANTS.START_AT] = util_3.stringify(this.indexStartValue_);\n if (this.startNameSet_) {\n qs[REST_CONSTANTS.START_AT] += ',' + util_3.stringify(this.indexStartName_);\n }\n }\n if (this.endSet_) {\n qs[REST_CONSTANTS.END_AT] = util_3.stringify(this.indexEndValue_);\n if (this.endNameSet_) {\n qs[REST_CONSTANTS.END_AT] += ',' + util_3.stringify(this.indexEndName_);\n }\n }\n if (this.limitSet_) {\n if (this.isViewFromLeft()) {\n qs[REST_CONSTANTS.LIMIT_TO_FIRST] = this.limit_;\n }\n else {\n qs[REST_CONSTANTS.LIMIT_TO_LAST] = this.limit_;\n }\n }\n return qs;\n };\n /**\n * Wire Protocol Constants\n * @const\n * @enum {string}\n * @private\n */\n QueryParams.WIRE_PROTOCOL_CONSTANTS_ = {\n INDEX_START_VALUE: 'sp',\n INDEX_START_NAME: 'sn',\n INDEX_END_VALUE: 'ep',\n INDEX_END_NAME: 'en',\n LIMIT: 'l',\n VIEW_FROM: 'vf',\n VIEW_FROM_LEFT: 'l',\n VIEW_FROM_RIGHT: 'r',\n INDEX: 'i'\n };\n /**\n * REST Query Constants\n * @const\n * @enum {string}\n * @private\n */\n QueryParams.REST_QUERY_CONSTANTS_ = {\n ORDER_BY: 'orderBy',\n PRIORITY_INDEX: '$priority',\n VALUE_INDEX: '$value',\n KEY_INDEX: '$key',\n START_AT: 'startAt',\n END_AT: 'endAt',\n LIMIT_TO_FIRST: 'limitToFirst',\n LIMIT_TO_LAST: 'limitToLast'\n };\n /**\n * Default, empty query parameters\n * @type {!QueryParams}\n * @const\n */\n QueryParams.DEFAULT = new QueryParams();\n return QueryParams;\n}());\nexports.QueryParams = QueryParams;\n\n//# sourceMappingURL=QueryParams.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar RangedFilter_1 = require(\"./RangedFilter\");\nvar ChildrenNode_1 = require(\"../../snap/ChildrenNode\");\nvar Node_1 = require(\"../../snap/Node\");\nvar util_1 = require(\"@firebase/util\");\nvar Change_1 = require(\"../Change\");\n/**\n * Applies a limit and a range to a node and uses RangedFilter to do the heavy lifting where possible\n *\n * @constructor\n * @implements {NodeFilter}\n */\nvar LimitedFilter = /** @class */ (function () {\n /**\n * @param {!QueryParams} params\n */\n function LimitedFilter(params) {\n this.rangedFilter_ = new RangedFilter_1.RangedFilter(params);\n this.index_ = params.getIndex();\n this.limit_ = params.getLimit();\n this.reverse_ = !params.isViewFromLeft();\n }\n /**\n * @inheritDoc\n */\n LimitedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {\n if (!this.rangedFilter_.matches(new Node_1.NamedNode(key, newChild))) {\n newChild = ChildrenNode_1.ChildrenNode.EMPTY_NODE;\n }\n if (snap.getImmediateChild(key).equals(newChild)) {\n // No change\n return snap;\n }\n else if (snap.numChildren() < this.limit_) {\n return this.rangedFilter_\n .getIndexedFilter()\n .updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\n }\n else {\n return this.fullLimitUpdateChild_(snap, key, newChild, source, optChangeAccumulator);\n }\n };\n /**\n * @inheritDoc\n */\n LimitedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {\n var filtered;\n if (newSnap.isLeafNode() || newSnap.isEmpty()) {\n // Make sure we have a children node with the correct index, not a leaf node;\n filtered = ChildrenNode_1.ChildrenNode.EMPTY_NODE.withIndex(this.index_);\n }\n else {\n if (this.limit_ * 2 < newSnap.numChildren() &&\n newSnap.isIndexed(this.index_)) {\n // Easier to build up a snapshot, since what we're given has more than twice the elements we want\n filtered = ChildrenNode_1.ChildrenNode.EMPTY_NODE.withIndex(this.index_);\n // anchor to the startPost, endPost, or last element as appropriate\n var iterator = void 0;\n if (this.reverse_) {\n iterator = newSnap.getReverseIteratorFrom(this.rangedFilter_.getEndPost(), this.index_);\n }\n else {\n iterator = newSnap.getIteratorFrom(this.rangedFilter_.getStartPost(), this.index_);\n }\n var count = 0;\n while (iterator.hasNext() && count < this.limit_) {\n var next = iterator.getNext();\n var inRange = void 0;\n if (this.reverse_) {\n inRange =\n this.index_.compare(this.rangedFilter_.getStartPost(), next) <= 0;\n }\n else {\n inRange =\n this.index_.compare(next, this.rangedFilter_.getEndPost()) <= 0;\n }\n if (inRange) {\n filtered = filtered.updateImmediateChild(next.name, next.node);\n count++;\n }\n else {\n // if we have reached the end post, we cannot keep adding elemments\n break;\n }\n }\n }\n else {\n // The snap contains less than twice the limit. Faster to delete from the snap than build up a new one\n filtered = newSnap.withIndex(this.index_);\n // Don't support priorities on queries\n filtered = filtered.updatePriority(ChildrenNode_1.ChildrenNode.EMPTY_NODE);\n var startPost = void 0;\n var endPost = void 0;\n var cmp = void 0;\n var iterator = void 0;\n if (this.reverse_) {\n iterator = filtered.getReverseIterator(this.index_);\n startPost = this.rangedFilter_.getEndPost();\n endPost = this.rangedFilter_.getStartPost();\n var indexCompare_1 = this.index_.getCompare();\n cmp = function (a, b) { return indexCompare_1(b, a); };\n }\n else {\n iterator = filtered.getIterator(this.index_);\n startPost = this.rangedFilter_.getStartPost();\n endPost = this.rangedFilter_.getEndPost();\n cmp = this.index_.getCompare();\n }\n var count = 0;\n var foundStartPost = false;\n while (iterator.hasNext()) {\n var next = iterator.getNext();\n if (!foundStartPost && cmp(startPost, next) <= 0) {\n // start adding\n foundStartPost = true;\n }\n var inRange = foundStartPost && count < this.limit_ && cmp(next, endPost) <= 0;\n if (inRange) {\n count++;\n }\n else {\n filtered = filtered.updateImmediateChild(next.name, ChildrenNode_1.ChildrenNode.EMPTY_NODE);\n }\n }\n }\n }\n return this.rangedFilter_\n .getIndexedFilter()\n .updateFullNode(oldSnap, filtered, optChangeAccumulator);\n };\n /**\n * @inheritDoc\n */\n LimitedFilter.prototype.updatePriority = function (oldSnap, newPriority) {\n // Don't support priorities on queries\n return oldSnap;\n };\n /**\n * @inheritDoc\n */\n LimitedFilter.prototype.filtersNodes = function () {\n return true;\n };\n /**\n * @inheritDoc\n */\n LimitedFilter.prototype.getIndexedFilter = function () {\n return this.rangedFilter_.getIndexedFilter();\n };\n /**\n * @inheritDoc\n */\n LimitedFilter.prototype.getIndex = function () {\n return this.index_;\n };\n /**\n * @param {!Node} snap\n * @param {string} childKey\n * @param {!Node} childSnap\n * @param {!CompleteChildSource} source\n * @param {?ChildChangeAccumulator} changeAccumulator\n * @return {!Node}\n * @private\n */\n LimitedFilter.prototype.fullLimitUpdateChild_ = function (snap, childKey, childSnap, source, changeAccumulator) {\n // TODO: rename all cache stuff etc to general snap terminology\n var cmp;\n if (this.reverse_) {\n var indexCmp_1 = this.index_.getCompare();\n cmp = function (a, b) { return indexCmp_1(b, a); };\n }\n else {\n cmp = this.index_.getCompare();\n }\n var oldEventCache = snap;\n util_1.assert(oldEventCache.numChildren() == this.limit_, '');\n var newChildNamedNode = new Node_1.NamedNode(childKey, childSnap);\n var windowBoundary = this.reverse_\n ? oldEventCache.getFirstChild(this.index_)\n : oldEventCache.getLastChild(this.index_);\n var inRange = this.rangedFilter_.matches(newChildNamedNode);\n if (oldEventCache.hasChild(childKey)) {\n var oldChildSnap = oldEventCache.getImmediateChild(childKey);\n var nextChild = source.getChildAfterChild(this.index_, windowBoundary, this.reverse_);\n while (nextChild != null &&\n (nextChild.name == childKey || oldEventCache.hasChild(nextChild.name))) {\n // There is a weird edge case where a node is updated as part of a merge in the write tree, but hasn't\n // been applied to the limited filter yet. Ignore this next child which will be updated later in\n // the limited filter...\n nextChild = source.getChildAfterChild(this.index_, nextChild, this.reverse_);\n }\n var compareNext = nextChild == null ? 1 : cmp(nextChild, newChildNamedNode);\n var remainsInWindow = inRange && !childSnap.isEmpty() && compareNext >= 0;\n if (remainsInWindow) {\n if (changeAccumulator != null) {\n changeAccumulator.trackChildChange(Change_1.Change.childChangedChange(childKey, childSnap, oldChildSnap));\n }\n return oldEventCache.updateImmediateChild(childKey, childSnap);\n }\n else {\n if (changeAccumulator != null) {\n changeAccumulator.trackChildChange(Change_1.Change.childRemovedChange(childKey, oldChildSnap));\n }\n var newEventCache = oldEventCache.updateImmediateChild(childKey, ChildrenNode_1.ChildrenNode.EMPTY_NODE);\n var nextChildInRange = nextChild != null && this.rangedFilter_.matches(nextChild);\n if (nextChildInRange) {\n if (changeAccumulator != null) {\n changeAccumulator.trackChildChange(Change_1.Change.childAddedChange(nextChild.name, nextChild.node));\n }\n return newEventCache.updateImmediateChild(nextChild.name, nextChild.node);\n }\n else {\n return newEventCache;\n }\n }\n }\n else if (childSnap.isEmpty()) {\n // we're deleting a node, but it was not in the window, so ignore it\n return snap;\n }\n else if (inRange) {\n if (cmp(windowBoundary, newChildNamedNode) >= 0) {\n if (changeAccumulator != null) {\n changeAccumulator.trackChildChange(Change_1.Change.childRemovedChange(windowBoundary.name, windowBoundary.node));\n changeAccumulator.trackChildChange(Change_1.Change.childAddedChange(childKey, childSnap));\n }\n return oldEventCache\n .updateImmediateChild(childKey, childSnap)\n .updateImmediateChild(windowBoundary.name, ChildrenNode_1.ChildrenNode.EMPTY_NODE);\n }\n else {\n return snap;\n }\n }\n else {\n return snap;\n }\n };\n return LimitedFilter;\n}());\nexports.LimitedFilter = LimitedFilter;\n\n//# sourceMappingURL=LimitedFilter.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar Reference_1 = require(\"../api/Reference\");\nvar DataSnapshot_1 = require(\"../api/DataSnapshot\");\nvar Path_1 = require(\"./util/Path\");\nvar Tree_1 = require(\"./util/Tree\");\nvar PriorityIndex_1 = require(\"./snap/indexes/PriorityIndex\");\nvar util_2 = require(\"./util/util\");\nvar ServerValues_1 = require(\"./util/ServerValues\");\nvar validation_1 = require(\"./util/validation\");\nvar util_3 = require(\"@firebase/util\");\nvar nodeFromJSON_1 = require(\"./snap/nodeFromJSON\");\nvar ChildrenNode_1 = require(\"./snap/ChildrenNode\");\nvar Repo_1 = require(\"./Repo\");\n// TODO: This is pretty messy. Ideally, a lot of this would move into FirebaseData, or a transaction-specific\n// component used by FirebaseData, but it has ties to user callbacks (transaction update and onComplete) as well\n// as the realtime connection (to send transactions to the server). So that all needs to be decoupled first.\n// For now it's part of Repo, but in its own file.\n/**\n * @enum {number}\n */\nvar TransactionStatus;\n(function (TransactionStatus) {\n // We've run the transaction and updated transactionResultData_ with the result, but it isn't currently sent to the\n // server. A transaction will go from RUN -> SENT -> RUN if it comes back from the server as rejected due to\n // mismatched hash.\n TransactionStatus[TransactionStatus[\"RUN\"] = 0] = \"RUN\";\n // We've run the transaction and sent it to the server and it's currently outstanding (hasn't come back as accepted\n // or rejected yet).\n TransactionStatus[TransactionStatus[\"SENT\"] = 1] = \"SENT\";\n // Temporary state used to mark completed transactions (whether successful or aborted). The transaction will be\n // removed when we get a chance to prune completed ones.\n TransactionStatus[TransactionStatus[\"COMPLETED\"] = 2] = \"COMPLETED\";\n // Used when an already-sent transaction needs to be aborted (e.g. due to a conflicting set() call that was made).\n // If it comes back as unsuccessful, we'll abort it.\n TransactionStatus[TransactionStatus[\"SENT_NEEDS_ABORT\"] = 3] = \"SENT_NEEDS_ABORT\";\n // Temporary state used to mark transactions that need to be aborted.\n TransactionStatus[TransactionStatus[\"NEEDS_ABORT\"] = 4] = \"NEEDS_ABORT\";\n})(TransactionStatus = exports.TransactionStatus || (exports.TransactionStatus = {}));\n/**\n * If a transaction does not succeed after 25 retries, we abort it. Among other things this ensure that if there's\n * ever a bug causing a mismatch between client / server hashes for some data, we won't retry indefinitely.\n * @type {number}\n * @const\n * @private\n */\nRepo_1.Repo.MAX_TRANSACTION_RETRIES_ = 25;\n/**\n * Setup the transaction data structures\n * @private\n */\nRepo_1.Repo.prototype.transactions_init_ = function () {\n /**\n * Stores queues of outstanding transactions for Firebase locations.\n *\n * @type {!Tree.>}\n * @private\n */\n this.transactionQueueTree_ = new Tree_1.Tree();\n};\n/**\n * Creates a new transaction, adds it to the transactions we're tracking, and sends it to the server if possible.\n *\n * @param {!Path} path Path at which to do transaction.\n * @param {function(*):*} transactionUpdate Update callback.\n * @param {?function(?Error, boolean, ?DataSnapshot)} onComplete Completion callback.\n * @param {boolean} applyLocally Whether or not to make intermediate results visible\n */\nRepo_1.Repo.prototype.startTransaction = function (path, transactionUpdate, onComplete, applyLocally) {\n this.log_('transaction on ' + path);\n // Add a watch to make sure we get server updates.\n var valueCallback = function () { };\n var watchRef = new Reference_1.Reference(this, path);\n watchRef.on('value', valueCallback);\n var unwatcher = function () {\n watchRef.off('value', valueCallback);\n };\n // Initialize transaction.\n var transaction = {\n path: path,\n update: transactionUpdate,\n onComplete: onComplete,\n // One of TransactionStatus enums.\n status: null,\n // Used when combining transactions at different locations to figure out which one goes first.\n order: util_2.LUIDGenerator(),\n // Whether to raise local events for this transaction.\n applyLocally: applyLocally,\n // Count of how many times we've retried the transaction.\n retryCount: 0,\n // Function to call to clean up our .on() listener.\n unwatcher: unwatcher,\n // Stores why a transaction was aborted.\n abortReason: null,\n currentWriteId: null,\n currentInputSnapshot: null,\n currentOutputSnapshotRaw: null,\n currentOutputSnapshotResolved: null\n };\n // Run transaction initially.\n var currentState = this.getLatestState_(path);\n transaction.currentInputSnapshot = currentState;\n var newVal = transaction.update(currentState.val());\n if (newVal === undefined) {\n // Abort transaction.\n transaction.unwatcher();\n transaction.currentOutputSnapshotRaw = null;\n transaction.currentOutputSnapshotResolved = null;\n if (transaction.onComplete) {\n // We just set the input snapshot, so this cast should be safe\n var snapshot = new DataSnapshot_1.DataSnapshot(transaction.currentInputSnapshot, new Reference_1.Reference(this, transaction.path), PriorityIndex_1.PRIORITY_INDEX);\n transaction.onComplete(null, false, snapshot);\n }\n }\n else {\n validation_1.validateFirebaseData('transaction failed: Data returned ', newVal, transaction.path);\n // Mark as run and add to our queue.\n transaction.status = TransactionStatus.RUN;\n var queueNode = this.transactionQueueTree_.subTree(path);\n var nodeQueue = queueNode.getValue() || [];\n nodeQueue.push(transaction);\n queueNode.setValue(nodeQueue);\n // Update visibleData and raise events\n // Note: We intentionally raise events after updating all of our transaction state, since the user could\n // start new transactions from the event callbacks.\n var priorityForNode = void 0;\n if (typeof newVal === 'object' &&\n newVal !== null &&\n util_3.contains(newVal, '.priority')) {\n priorityForNode = util_3.safeGet(newVal, '.priority');\n util_1.assert(validation_1.isValidPriority(priorityForNode), 'Invalid priority returned by transaction. ' +\n 'Priority must be a valid string, finite number, server value, or null.');\n }\n else {\n var currentNode = this.serverSyncTree_.calcCompleteEventCache(path) ||\n ChildrenNode_1.ChildrenNode.EMPTY_NODE;\n priorityForNode = currentNode.getPriority().val();\n }\n priorityForNode /** @type {null|number|string} */ = priorityForNode;\n var serverValues = this.generateServerValues();\n var newNodeUnresolved = nodeFromJSON_1.nodeFromJSON(newVal, priorityForNode);\n var newNode = ServerValues_1.resolveDeferredValueSnapshot(newNodeUnresolved, serverValues);\n transaction.currentOutputSnapshotRaw = newNodeUnresolved;\n transaction.currentOutputSnapshotResolved = newNode;\n transaction.currentWriteId = this.getNextWriteId_();\n var events = this.serverSyncTree_.applyUserOverwrite(path, newNode, transaction.currentWriteId, transaction.applyLocally);\n this.eventQueue_.raiseEventsForChangedPath(path, events);\n this.sendReadyTransactions_();\n }\n};\n/**\n * @param {!Path} path\n * @param {Array.=} excludeSets A specific set to exclude\n * @return {Node}\n * @private\n */\nRepo_1.Repo.prototype.getLatestState_ = function (path, excludeSets) {\n return (this.serverSyncTree_.calcCompleteEventCache(path, excludeSets) ||\n ChildrenNode_1.ChildrenNode.EMPTY_NODE);\n};\n/**\n * Sends any already-run transactions that aren't waiting for outstanding transactions to\n * complete.\n *\n * Externally it's called with no arguments, but it calls itself recursively with a particular\n * transactionQueueTree node to recurse through the tree.\n *\n * @param {Tree.>=} node transactionQueueTree node to start at.\n * @private\n */\nRepo_1.Repo.prototype.sendReadyTransactions_ = function (node) {\n var _this = this;\n if (node === void 0) { node = this.transactionQueueTree_; }\n // Before recursing, make sure any completed transactions are removed.\n if (!node) {\n this.pruneCompletedTransactionsBelowNode_(node);\n }\n if (node.getValue() !== null) {\n var queue = this.buildTransactionQueue_(node);\n util_1.assert(queue.length > 0, 'Sending zero length transaction queue');\n var allRun = queue.every(function (transaction) { return transaction.status === TransactionStatus.RUN; });\n // If they're all run (and not sent), we can send them. Else, we must wait.\n if (allRun) {\n this.sendTransactionQueue_(node.path(), queue);\n }\n }\n else if (node.hasChildren()) {\n node.forEachChild(function (childNode) {\n _this.sendReadyTransactions_(childNode);\n });\n }\n};\n/**\n * Given a list of run transactions, send them to the server and then handle the result (success or failure).\n *\n * @param {!Path} path The location of the queue.\n * @param {!Array.} queue Queue of transactions under the specified location.\n * @private\n */\nRepo_1.Repo.prototype.sendTransactionQueue_ = function (path, queue) {\n var _this = this;\n // Mark transactions as sent and increment retry count!\n var setsToIgnore = queue.map(function (txn) {\n return txn.currentWriteId;\n });\n var latestState = this.getLatestState_(path, setsToIgnore);\n var snapToSend = latestState;\n var latestHash = latestState.hash();\n for (var i = 0; i < queue.length; i++) {\n var txn = queue[i];\n util_1.assert(txn.status === TransactionStatus.RUN, 'tryToSendTransactionQueue_: items in queue should all be run.');\n txn.status = TransactionStatus.SENT;\n txn.retryCount++;\n var relativePath = Path_1.Path.relativePath(path, txn.path);\n // If we've gotten to this point, the output snapshot must be defined.\n snapToSend = snapToSend.updateChild(relativePath /**@type {!Node} */, txn.currentOutputSnapshotRaw);\n }\n var dataToSend = snapToSend.val(true);\n var pathToSend = path;\n // Send the put.\n this.server_.put(pathToSend.toString(), dataToSend, function (status) {\n _this.log_('transaction put response', {\n path: pathToSend.toString(),\n status: status\n });\n var events = [];\n if (status === 'ok') {\n // Queue up the callbacks and fire them after cleaning up all of our transaction state, since\n // the callback could trigger more transactions or sets.\n var callbacks = [];\n for (var i = 0; i < queue.length; i++) {\n queue[i].status = TransactionStatus.COMPLETED;\n events = events.concat(_this.serverSyncTree_.ackUserWrite(queue[i].currentWriteId));\n if (queue[i].onComplete) {\n // We never unset the output snapshot, and given that this transaction is complete, it should be set\n var node = queue[i].currentOutputSnapshotResolved;\n var ref = new Reference_1.Reference(_this, queue[i].path);\n var snapshot = new DataSnapshot_1.DataSnapshot(node, ref, PriorityIndex_1.PRIORITY_INDEX);\n callbacks.push(queue[i].onComplete.bind(null, null, true, snapshot));\n }\n queue[i].unwatcher();\n }\n // Now remove the completed transactions.\n _this.pruneCompletedTransactionsBelowNode_(_this.transactionQueueTree_.subTree(path));\n // There may be pending transactions that we can now send.\n _this.sendReadyTransactions_();\n _this.eventQueue_.raiseEventsForChangedPath(path, events);\n // Finally, trigger onComplete callbacks.\n for (var i = 0; i < callbacks.length; i++) {\n util_2.exceptionGuard(callbacks[i]);\n }\n }\n else {\n // transactions are no longer sent. Update their status appropriately.\n if (status === 'datastale') {\n for (var i = 0; i < queue.length; i++) {\n if (queue[i].status === TransactionStatus.SENT_NEEDS_ABORT)\n queue[i].status = TransactionStatus.NEEDS_ABORT;\n else\n queue[i].status = TransactionStatus.RUN;\n }\n }\n else {\n util_2.warn('transaction at ' + pathToSend.toString() + ' failed: ' + status);\n for (var i = 0; i < queue.length; i++) {\n queue[i].status = TransactionStatus.NEEDS_ABORT;\n queue[i].abortReason = status;\n }\n }\n _this.rerunTransactions_(path);\n }\n }, latestHash);\n};\n/**\n * Finds all transactions dependent on the data at changedPath and reruns them.\n *\n * Should be called any time cached data changes.\n *\n * Return the highest path that was affected by rerunning transactions. This is the path at which events need to\n * be raised for.\n *\n * @param {!Path} changedPath The path in mergedData that changed.\n * @return {!Path} The rootmost path that was affected by rerunning transactions.\n * @private\n */\nRepo_1.Repo.prototype.rerunTransactions_ = function (changedPath) {\n var rootMostTransactionNode = this.getAncestorTransactionNode_(changedPath);\n var path = rootMostTransactionNode.path();\n var queue = this.buildTransactionQueue_(rootMostTransactionNode);\n this.rerunTransactionQueue_(queue, path);\n return path;\n};\n/**\n * Does all the work of rerunning transactions (as well as cleans up aborted transactions and whatnot).\n *\n * @param {Array.} queue The queue of transactions to run.\n * @param {!Path} path The path the queue is for.\n * @private\n */\nRepo_1.Repo.prototype.rerunTransactionQueue_ = function (queue, path) {\n if (queue.length === 0) {\n return; // Nothing to do!\n }\n // Queue up the callbacks and fire them after cleaning up all of our transaction state, since\n // the callback could trigger more transactions or sets.\n var callbacks = [];\n var events = [];\n // Ignore all of the sets we're going to re-run.\n var txnsToRerun = queue.filter(function (q) {\n return q.status === TransactionStatus.RUN;\n });\n var setsToIgnore = txnsToRerun.map(function (q) {\n return q.currentWriteId;\n });\n for (var i = 0; i < queue.length; i++) {\n var transaction = queue[i];\n var relativePath = Path_1.Path.relativePath(path, transaction.path);\n var abortTransaction = false, abortReason = void 0;\n util_1.assert(relativePath !== null, 'rerunTransactionsUnderNode_: relativePath should not be null.');\n if (transaction.status === TransactionStatus.NEEDS_ABORT) {\n abortTransaction = true;\n abortReason = transaction.abortReason;\n events = events.concat(this.serverSyncTree_.ackUserWrite(transaction.currentWriteId, true));\n }\n else if (transaction.status === TransactionStatus.RUN) {\n if (transaction.retryCount >= Repo_1.Repo.MAX_TRANSACTION_RETRIES_) {\n abortTransaction = true;\n abortReason = 'maxretry';\n events = events.concat(this.serverSyncTree_.ackUserWrite(transaction.currentWriteId, true));\n }\n else {\n // This code reruns a transaction\n var currentNode = this.getLatestState_(transaction.path, setsToIgnore);\n transaction.currentInputSnapshot = currentNode;\n var newData = queue[i].update(currentNode.val());\n if (newData !== undefined) {\n validation_1.validateFirebaseData('transaction failed: Data returned ', newData, transaction.path);\n var newDataNode = nodeFromJSON_1.nodeFromJSON(newData);\n var hasExplicitPriority = typeof newData === 'object' &&\n newData != null &&\n util_3.contains(newData, '.priority');\n if (!hasExplicitPriority) {\n // Keep the old priority if there wasn't a priority explicitly specified.\n newDataNode = newDataNode.updatePriority(currentNode.getPriority());\n }\n var oldWriteId = transaction.currentWriteId;\n var serverValues = this.generateServerValues();\n var newNodeResolved = ServerValues_1.resolveDeferredValueSnapshot(newDataNode, serverValues);\n transaction.currentOutputSnapshotRaw = newDataNode;\n transaction.currentOutputSnapshotResolved = newNodeResolved;\n transaction.currentWriteId = this.getNextWriteId_();\n // Mutates setsToIgnore in place\n setsToIgnore.splice(setsToIgnore.indexOf(oldWriteId), 1);\n events = events.concat(this.serverSyncTree_.applyUserOverwrite(transaction.path, newNodeResolved, transaction.currentWriteId, transaction.applyLocally));\n events = events.concat(this.serverSyncTree_.ackUserWrite(oldWriteId, true));\n }\n else {\n abortTransaction = true;\n abortReason = 'nodata';\n events = events.concat(this.serverSyncTree_.ackUserWrite(transaction.currentWriteId, true));\n }\n }\n }\n this.eventQueue_.raiseEventsForChangedPath(path, events);\n events = [];\n if (abortTransaction) {\n // Abort.\n queue[i].status = TransactionStatus.COMPLETED;\n // Removing a listener can trigger pruning which can muck with mergedData/visibleData (as it prunes data).\n // So defer the unwatcher until we're done.\n (function (unwatcher) {\n setTimeout(unwatcher, Math.floor(0));\n })(queue[i].unwatcher);\n if (queue[i].onComplete) {\n if (abortReason === 'nodata') {\n var ref = new Reference_1.Reference(this, queue[i].path);\n // We set this field immediately, so it's safe to cast to an actual snapshot\n var lastInput /** @type {!Node} */ = queue[i].currentInputSnapshot;\n var snapshot = new DataSnapshot_1.DataSnapshot(lastInput, ref, PriorityIndex_1.PRIORITY_INDEX);\n callbacks.push(queue[i].onComplete.bind(null, null, false, snapshot));\n }\n else {\n callbacks.push(queue[i].onComplete.bind(null, new Error(abortReason), false, null));\n }\n }\n }\n }\n // Clean up completed transactions.\n this.pruneCompletedTransactionsBelowNode_(this.transactionQueueTree_);\n // Now fire callbacks, now that we're in a good, known state.\n for (var i = 0; i < callbacks.length; i++) {\n util_2.exceptionGuard(callbacks[i]);\n }\n // Try to send the transaction result to the server.\n this.sendReadyTransactions_();\n};\n/**\n * Returns the rootmost ancestor node of the specified path that has a pending transaction on it, or just returns\n * the node for the given path if there are no pending transactions on any ancestor.\n *\n * @param {!Path} path The location to start at.\n * @return {!Tree.>} The rootmost node with a transaction.\n * @private\n */\nRepo_1.Repo.prototype.getAncestorTransactionNode_ = function (path) {\n var front;\n // Start at the root and walk deeper into the tree towards path until we find a node with pending transactions.\n var transactionNode = this.transactionQueueTree_;\n while ((front = path.getFront()) !== null &&\n transactionNode.getValue() === null) {\n transactionNode = transactionNode.subTree(front);\n path = path.popFront();\n }\n return transactionNode;\n};\n/**\n * Builds the queue of all transactions at or below the specified transactionNode.\n *\n * @param {!Tree.>} transactionNode\n * @return {Array.} The generated queue.\n * @private\n */\nRepo_1.Repo.prototype.buildTransactionQueue_ = function (transactionNode) {\n // Walk any child transaction queues and aggregate them into a single queue.\n var transactionQueue = [];\n this.aggregateTransactionQueuesForNode_(transactionNode, transactionQueue);\n // Sort them by the order the transactions were created.\n transactionQueue.sort(function (a, b) {\n return a.order - b.order;\n });\n return transactionQueue;\n};\n/**\n * @param {!Tree.>} node\n * @param {Array.} queue\n * @private\n */\nRepo_1.Repo.prototype.aggregateTransactionQueuesForNode_ = function (node, queue) {\n var _this = this;\n var nodeQueue = node.getValue();\n if (nodeQueue !== null) {\n for (var i = 0; i < nodeQueue.length; i++) {\n queue.push(nodeQueue[i]);\n }\n }\n node.forEachChild(function (child) {\n _this.aggregateTransactionQueuesForNode_(child, queue);\n });\n};\n/**\n * Remove COMPLETED transactions at or below this node in the transactionQueueTree_.\n *\n * @param {!Tree.>} node\n * @private\n */\nRepo_1.Repo.prototype.pruneCompletedTransactionsBelowNode_ = function (node) {\n var _this = this;\n var queue = node.getValue();\n if (queue) {\n var to = 0;\n for (var from = 0; from < queue.length; from++) {\n if (queue[from].status !== TransactionStatus.COMPLETED) {\n queue[to] = queue[from];\n to++;\n }\n }\n queue.length = to;\n node.setValue(queue.length > 0 ? queue : null);\n }\n node.forEachChild(function (childNode) {\n _this.pruneCompletedTransactionsBelowNode_(childNode);\n });\n};\n/**\n * Aborts all transactions on ancestors or descendants of the specified path. Called when doing a set() or update()\n * since we consider them incompatible with transactions.\n *\n * @param {!Path} path Path for which we want to abort related transactions.\n * @return {!Path}\n * @private\n */\nRepo_1.Repo.prototype.abortTransactions_ = function (path) {\n var _this = this;\n var affectedPath = this.getAncestorTransactionNode_(path).path();\n var transactionNode = this.transactionQueueTree_.subTree(path);\n transactionNode.forEachAncestor(function (node) {\n _this.abortTransactionsOnNode_(node);\n });\n this.abortTransactionsOnNode_(transactionNode);\n transactionNode.forEachDescendant(function (node) {\n _this.abortTransactionsOnNode_(node);\n });\n return affectedPath;\n};\n/**\n * Abort transactions stored in this transaction queue node.\n *\n * @param {!Tree.>} node Node to abort transactions for.\n * @private\n */\nRepo_1.Repo.prototype.abortTransactionsOnNode_ = function (node) {\n var queue = node.getValue();\n if (queue !== null) {\n // Queue up the callbacks and fire them after cleaning up all of our transaction state, since\n // the callback could trigger more transactions or sets.\n var callbacks = [];\n // Go through queue. Any already-sent transactions must be marked for abort, while the unsent ones\n // can be immediately aborted and removed.\n var events = [];\n var lastSent = -1;\n for (var i = 0; i < queue.length; i++) {\n if (queue[i].status === TransactionStatus.SENT_NEEDS_ABORT) {\n // Already marked. No action needed.\n }\n else if (queue[i].status === TransactionStatus.SENT) {\n util_1.assert(lastSent === i - 1, 'All SENT items should be at beginning of queue.');\n lastSent = i;\n // Mark transaction for abort when it comes back.\n queue[i].status = TransactionStatus.SENT_NEEDS_ABORT;\n queue[i].abortReason = 'set';\n }\n else {\n util_1.assert(queue[i].status === TransactionStatus.RUN, 'Unexpected transaction status in abort');\n // We can abort it immediately.\n queue[i].unwatcher();\n events = events.concat(this.serverSyncTree_.ackUserWrite(queue[i].currentWriteId, true));\n if (queue[i].onComplete) {\n var snapshot = null;\n callbacks.push(queue[i].onComplete.bind(null, new Error('set'), false, snapshot));\n }\n }\n }\n if (lastSent === -1) {\n // We're not waiting for any sent transactions. We can clear the queue.\n node.setValue(null);\n }\n else {\n // Remove the transactions we aborted.\n queue.length = lastSent + 1;\n }\n // Now fire the callbacks.\n this.eventQueue_.raiseEventsForChangedPath(node.path(), events);\n for (var i = 0; i < callbacks.length; i++) {\n util_2.exceptionGuard(callbacks[i]);\n }\n }\n};\n\n//# sourceMappingURL=Repo_transaction.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar Path_1 = require(\"./Path\");\nvar util_2 = require(\"@firebase/util\");\n/**\n * Node in a Tree.\n */\nvar TreeNode = /** @class */ (function () {\n function TreeNode() {\n // TODO: Consider making accessors that create children and value lazily or\n // separate Internal / Leaf 'types'.\n this.children = {};\n this.childCount = 0;\n this.value = null;\n }\n return TreeNode;\n}());\nexports.TreeNode = TreeNode;\n/**\n * A light-weight tree, traversable by path. Nodes can have both values and children.\n * Nodes are not enumerated (by forEachChild) unless they have a value or non-empty\n * children.\n */\nvar Tree = /** @class */ (function () {\n /**\n * @template T\n * @param {string=} name_ Optional name of the node.\n * @param {Tree=} parent_ Optional parent node.\n * @param {TreeNode=} node_ Optional node to wrap.\n */\n function Tree(name_, parent_, node_) {\n if (name_ === void 0) { name_ = ''; }\n if (parent_ === void 0) { parent_ = null; }\n if (node_ === void 0) { node_ = new TreeNode(); }\n this.name_ = name_;\n this.parent_ = parent_;\n this.node_ = node_;\n }\n /**\n * Returns a sub-Tree for the given path.\n *\n * @param {!(string|Path)} pathObj Path to look up.\n * @return {!Tree.} Tree for path.\n */\n Tree.prototype.subTree = function (pathObj) {\n // TODO: Require pathObj to be Path?\n var path = pathObj instanceof Path_1.Path ? pathObj : new Path_1.Path(pathObj);\n var child = this, next;\n while ((next = path.getFront()) !== null) {\n var childNode = util_2.safeGet(child.node_.children, next) || new TreeNode();\n child = new Tree(next, child, childNode);\n path = path.popFront();\n }\n return child;\n };\n /**\n * Returns the data associated with this tree node.\n *\n * @return {?T} The data or null if no data exists.\n */\n Tree.prototype.getValue = function () {\n return this.node_.value;\n };\n /**\n * Sets data to this tree node.\n *\n * @param {!T} value Value to set.\n */\n Tree.prototype.setValue = function (value) {\n util_1.assert(typeof value !== 'undefined', 'Cannot set value to undefined');\n this.node_.value = value;\n this.updateParents_();\n };\n /**\n * Clears the contents of the tree node (its value and all children).\n */\n Tree.prototype.clear = function () {\n this.node_.value = null;\n this.node_.children = {};\n this.node_.childCount = 0;\n this.updateParents_();\n };\n /**\n * @return {boolean} Whether the tree has any children.\n */\n Tree.prototype.hasChildren = function () {\n return this.node_.childCount > 0;\n };\n /**\n * @return {boolean} Whether the tree is empty (no value or children).\n */\n Tree.prototype.isEmpty = function () {\n return this.getValue() === null && !this.hasChildren();\n };\n /**\n * Calls action for each child of this tree node.\n *\n * @param {function(!Tree.)} action Action to be called for each child.\n */\n Tree.prototype.forEachChild = function (action) {\n var _this = this;\n util_2.forEach(this.node_.children, function (child, childTree) {\n action(new Tree(child, _this, childTree));\n });\n };\n /**\n * Does a depth-first traversal of this node's descendants, calling action for each one.\n *\n * @param {function(!Tree.)} action Action to be called for each child.\n * @param {boolean=} includeSelf Whether to call action on this node as well. Defaults to\n * false.\n * @param {boolean=} childrenFirst Whether to call action on children before calling it on\n * parent.\n */\n Tree.prototype.forEachDescendant = function (action, includeSelf, childrenFirst) {\n if (includeSelf && !childrenFirst)\n action(this);\n this.forEachChild(function (child) {\n child.forEachDescendant(action, /*includeSelf=*/ true, childrenFirst);\n });\n if (includeSelf && childrenFirst)\n action(this);\n };\n /**\n * Calls action on each ancestor node.\n *\n * @param {function(!Tree.)} action Action to be called on each parent; return\n * true to abort.\n * @param {boolean=} includeSelf Whether to call action on this node as well.\n * @return {boolean} true if the action callback returned true.\n */\n Tree.prototype.forEachAncestor = function (action, includeSelf) {\n var node = includeSelf ? this : this.parent();\n while (node !== null) {\n if (action(node)) {\n return true;\n }\n node = node.parent();\n }\n return false;\n };\n /**\n * Does a depth-first traversal of this node's descendants. When a descendant with a value\n * is found, action is called on it and traversal does not continue inside the node.\n * Action is *not* called on this node.\n *\n * @param {function(!Tree.)} action Action to be called for each child.\n */\n Tree.prototype.forEachImmediateDescendantWithValue = function (action) {\n this.forEachChild(function (child) {\n if (child.getValue() !== null)\n action(child);\n else\n child.forEachImmediateDescendantWithValue(action);\n });\n };\n /**\n * @return {!Path} The path of this tree node, as a Path.\n */\n Tree.prototype.path = function () {\n return new Path_1.Path(this.parent_ === null\n ? this.name_\n : this.parent_.path() + '/' + this.name_);\n };\n /**\n * @return {string} The name of the tree node.\n */\n Tree.prototype.name = function () {\n return this.name_;\n };\n /**\n * @return {?Tree} The parent tree node, or null if this is the root of the tree.\n */\n Tree.prototype.parent = function () {\n return this.parent_;\n };\n /**\n * Adds or removes this child from its parent based on whether it's empty or not.\n *\n * @private\n */\n Tree.prototype.updateParents_ = function () {\n if (this.parent_ !== null)\n this.parent_.updateChild_(this.name_, this);\n };\n /**\n * Adds or removes the passed child to this tree node, depending on whether it's empty.\n *\n * @param {string} childName The name of the child to update.\n * @param {!Tree.} child The child to update.\n * @private\n */\n Tree.prototype.updateChild_ = function (childName, child) {\n var childEmpty = child.isEmpty();\n var childExists = util_2.contains(this.node_.children, childName);\n if (childEmpty && childExists) {\n delete this.node_.children[childName];\n this.node_.childCount--;\n this.updateParents_();\n }\n else if (!childEmpty && !childExists) {\n this.node_.children[childName] = child.node_;\n this.node_.childCount++;\n this.updateParents_();\n }\n };\n return Tree;\n}());\nexports.Tree = Tree;\n\n//# sourceMappingURL=Tree.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar WebSocketConnection_1 = require(\"../realtime/WebSocketConnection\");\nvar BrowserPollConnection_1 = require(\"../realtime/BrowserPollConnection\");\n/**\n * INTERNAL methods for internal-use only (tests, etc.).\n *\n * Customers shouldn't use these or else should be aware that they could break at any time.\n *\n * @const\n */\nexports.forceLongPolling = function () {\n WebSocketConnection_1.WebSocketConnection.forceDisallow();\n BrowserPollConnection_1.BrowserPollConnection.forceAllow();\n};\nexports.forceWebSockets = function () {\n BrowserPollConnection_1.BrowserPollConnection.forceDisallow();\n};\n/* Used by App Manager */\nexports.isWebSocketsAvailable = function () {\n return WebSocketConnection_1.WebSocketConnection['isAvailable']();\n};\nexports.setSecurityDebugCallback = function (ref, callback) {\n ref.repo.persistentConnection_.securityDebugCallback_ = callback;\n};\nexports.stats = function (ref, showDelta) {\n ref.repo.stats(showDelta);\n};\nexports.statsIncrementCounter = function (ref, metric) {\n ref.repo.statsIncrementCounter(metric);\n};\nexports.dataUpdateCount = function (ref) {\n return ref.repo.dataUpdateCount;\n};\nexports.interceptServerData = function (ref, callback) {\n return ref.repo.interceptServerData_(callback);\n};\n\n//# sourceMappingURL=internal.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar RepoInfo_1 = require(\"../core/RepoInfo\");\nvar PersistentConnection_1 = require(\"../core/PersistentConnection\");\nvar RepoManager_1 = require(\"../core/RepoManager\");\nvar Connection_1 = require(\"../realtime/Connection\");\nexports.DataConnection = PersistentConnection_1.PersistentConnection;\n/**\n * @param {!string} pathString\n * @param {function(*)} onComplete\n */\nPersistentConnection_1.PersistentConnection.prototype.simpleListen = function (pathString, onComplete) {\n this.sendRequest('q', { p: pathString }, onComplete);\n};\n/**\n * @param {*} data\n * @param {function(*)} onEcho\n */\nPersistentConnection_1.PersistentConnection.prototype.echo = function (data, onEcho) {\n this.sendRequest('echo', { d: data }, onEcho);\n};\n// RealTimeConnection properties that we use in tests.\nexports.RealTimeConnection = Connection_1.Connection;\n/**\n * @param {function(): string} newHash\n * @return {function()}\n */\nexports.hijackHash = function (newHash) {\n var oldPut = PersistentConnection_1.PersistentConnection.prototype.put;\n PersistentConnection_1.PersistentConnection.prototype.put = function (pathString, data, opt_onComplete, opt_hash) {\n if (opt_hash !== undefined) {\n opt_hash = newHash();\n }\n oldPut.call(this, pathString, data, opt_onComplete, opt_hash);\n };\n return function () {\n PersistentConnection_1.PersistentConnection.prototype.put = oldPut;\n };\n};\n/**\n * @type {function(new:RepoInfo, !string, boolean, !string, boolean): undefined}\n */\nexports.ConnectionTarget = RepoInfo_1.RepoInfo;\n/**\n * @param {!Query} query\n * @return {!string}\n */\nexports.queryIdentifier = function (query) {\n return query.queryIdentifier();\n};\n/**\n * @param {!Query} firebaseRef\n * @return {!Object}\n */\nexports.listens = function (firebaseRef) {\n return firebaseRef.repo.persistentConnection_.listens_;\n};\n/**\n * Forces the RepoManager to create Repos that use ReadonlyRestClient instead of PersistentConnection.\n *\n * @param {boolean} forceRestClient\n */\nexports.forceRestClient = function (forceRestClient) {\n RepoManager_1.RepoManager.getInstance().forceRestClient(forceRestClient);\n};\n\n//# sourceMappingURL=test_access.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nrequire('@firebase/messaging');\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nrequire('@firebase/storage');\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nrequire('@firebase/firestore');\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* tslint:disable:no-console */\nimport { SDK_VERSION } from '../core/version';\nimport { PlatformSupport } from '../platform/platform';\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel[LogLevel[\"ERROR\"] = 1] = \"ERROR\";\n LogLevel[LogLevel[\"SILENT\"] = 2] = \"SILENT\";\n})(LogLevel || (LogLevel = {}));\nvar logLevel = LogLevel.ERROR;\n// Helper methods are needed because variables can't be exported as read/write\nexport function getLogLevel() {\n return logLevel;\n}\nexport function setLogLevel(newLevel) {\n logLevel = newLevel;\n}\nexport function debug(tag, msg) {\n var obj = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n obj[_i - 2] = arguments[_i];\n }\n if (logLevel <= LogLevel.DEBUG) {\n var time = new Date().toISOString();\n var args = obj.map(argToString);\n console.log.apply(console, [\"Firestore (\" + SDK_VERSION + \") \" + time + \" [\" + tag + \"]: \" + msg].concat(args));\n }\n}\nexport function error(msg) {\n var obj = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n obj[_i - 1] = arguments[_i];\n }\n if (logLevel <= LogLevel.ERROR) {\n var time = new Date().toISOString();\n var args = obj.map(argToString);\n console.error.apply(console, [\"Firestore (\" + SDK_VERSION + \") \" + time + \": \" + msg].concat(args));\n }\n}\n/**\n * Converts an additional log parameter to a string representation.\n */\nfunction argToString(obj) {\n if (typeof obj === 'string') {\n return obj;\n }\n else {\n var platform = PlatformSupport.getPlatform();\n try {\n return platform.formatJSON(obj);\n }\n catch (e) {\n // Converting to JSON failed, just log the object directly\n return obj;\n }\n }\n}\n\n//# sourceMappingURL=log.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport firebase from '@firebase/app';\n/** The semver (www.semver.org) version of the SDK. */\nexport var SDK_VERSION = firebase.SDK_VERSION;\n\n//# sourceMappingURL=version.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SDK_VERSION } from '../core/version';\nimport { error } from './log';\n/**\n * Unconditionally fails, throwing an Error with the given message.\n *\n * Returns any so it can be used in expressions:\n * @example\n * let futureVar = fail('not implemented yet');\n */\nexport function fail(failure) {\n // Log the failure in addition to throw an exception, just in case the\n // exception is swallowed.\n var message = \"FIRESTORE (\" + SDK_VERSION + \") INTERNAL ASSERTION FAILED: \" + failure;\n error(message);\n // NOTE: We don't use FirestoreError here because these are internal failures\n // that cannot be handled by the user. (Also it would create a circular\n // dependency between the error and assert modules which doesn't work.)\n throw new Error(message);\n}\n/**\n * Fails if the given assertion condition is false, throwing an Error with the\n * given message if it did.\n */\nexport function assert(assertion, message) {\n if (!assertion) {\n fail(message);\n }\n}\n\n//# sourceMappingURL=assert.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { fail } from '../util/assert';\n/**\n * Provides singleton helpers where setup code can inject a platform at runtime.\n * setPlatform needs to be set before Firestore is used and must be set exactly\n * once.\n */\nvar PlatformSupport = /** @class */ (function () {\n function PlatformSupport() {\n }\n PlatformSupport.setPlatform = function (platform) {\n if (PlatformSupport.platform) {\n fail('Platform already defined');\n }\n PlatformSupport.platform = platform;\n };\n PlatformSupport.getPlatform = function () {\n if (!PlatformSupport.platform) {\n fail('Platform not set');\n }\n return PlatformSupport.platform;\n };\n return PlatformSupport;\n}());\nexport { PlatformSupport };\n/**\n * Returns the representation of an empty \"proto\" byte string for the\n * platform.\n */\nexport function emptyByteString() {\n return PlatformSupport.getPlatform().emptyByteString;\n}\n\n//# sourceMappingURL=platform.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n// TODO(mcg): Change to a string enum once we've upgraded to typescript 2.4.\n// tslint:disable-next-line:variable-name Intended to look like a TS 2.4 enum\nexport var Code = {\n // Causes are copied from:\n // https://github.com/grpc/grpc/blob/bceec94ea4fc5f0085d81235d8e1c06798dc341a/include/grpc%2B%2B/impl/codegen/status_code_enum.h\n /** Not an error; returned on success. */\n OK: 'ok',\n /** The operation was cancelled (typically by the caller). */\n CANCELLED: 'cancelled',\n /** Unknown error or an error from a different error domain. */\n UNKNOWN: 'unknown',\n /**\n * Client specified an invalid argument. Note that this differs from\n * FAILED_PRECONDITION. INVALID_ARGUMENT indicates arguments that are\n * problematic regardless of the state of the system (e.g., a malformed file\n * name).\n */\n INVALID_ARGUMENT: 'invalid-argument',\n /**\n * Deadline expired before operation could complete. For operations that\n * change the state of the system, this error may be returned even if the\n * operation has completed successfully. For example, a successful response\n * from a server could have been delayed long enough for the deadline to\n * expire.\n */\n DEADLINE_EXCEEDED: 'deadline-exceeded',\n /** Some requested entity (e.g., file or directory) was not found. */\n NOT_FOUND: 'not-found',\n /**\n * Some entity that we attempted to create (e.g., file or directory) already\n * exists.\n */\n ALREADY_EXISTS: 'already-exists',\n /**\n * The caller does not have permission to execute the specified operation.\n * PERMISSION_DENIED must not be used for rejections caused by exhausting\n * some resource (use RESOURCE_EXHAUSTED instead for those errors).\n * PERMISSION_DENIED must not be used if the caller can not be identified\n * (use UNAUTHENTICATED instead for those errors).\n */\n PERMISSION_DENIED: 'permission-denied',\n /**\n * The request does not have valid authentication credentials for the\n * operation.\n */\n UNAUTHENTICATED: 'unauthenticated',\n /**\n * Some resource has been exhausted, perhaps a per-user quota, or perhaps the\n * entire file system is out of space.\n */\n RESOURCE_EXHAUSTED: 'resource-exhausted',\n /**\n * Operation was rejected because the system is not in a state required for\n * the operation's execution. For example, directory to be deleted may be\n * non-empty, an rmdir operation is applied to a non-directory, etc.\n *\n * A litmus test that may help a service implementor in deciding\n * between FAILED_PRECONDITION, ABORTED, and UNAVAILABLE:\n * (a) Use UNAVAILABLE if the client can retry just the failing call.\n * (b) Use ABORTED if the client should retry at a higher-level\n * (e.g., restarting a read-modify-write sequence).\n * (c) Use FAILED_PRECONDITION if the client should not retry until\n * the system state has been explicitly fixed. E.g., if an \"rmdir\"\n * fails because the directory is non-empty, FAILED_PRECONDITION\n * should be returned since the client should not retry unless\n * they have first fixed up the directory by deleting files from it.\n * (d) Use FAILED_PRECONDITION if the client performs conditional\n * REST Get/Update/Delete on a resource and the resource on the\n * server does not match the condition. E.g., conflicting\n * read-modify-write on the same resource.\n */\n FAILED_PRECONDITION: 'failed-precondition',\n /**\n * The operation was aborted, typically due to a concurrency issue like\n * sequencer check failures, transaction aborts, etc.\n *\n * See litmus test above for deciding between FAILED_PRECONDITION, ABORTED,\n * and UNAVAILABLE.\n */\n ABORTED: 'aborted',\n /**\n * Operation was attempted past the valid range. E.g., seeking or reading\n * past end of file.\n *\n * Unlike INVALID_ARGUMENT, this error indicates a problem that may be fixed\n * if the system state changes. For example, a 32-bit file system will\n * generate INVALID_ARGUMENT if asked to read at an offset that is not in the\n * range [0,2^32-1], but it will generate OUT_OF_RANGE if asked to read from\n * an offset past the current file size.\n *\n * There is a fair bit of overlap between FAILED_PRECONDITION and\n * OUT_OF_RANGE. We recommend using OUT_OF_RANGE (the more specific error)\n * when it applies so that callers who are iterating through a space can\n * easily look for an OUT_OF_RANGE error to detect when they are done.\n */\n OUT_OF_RANGE: 'out-of-range',\n /** Operation is not implemented or not supported/enabled in this service. */\n UNIMPLEMENTED: 'unimplemented',\n /**\n * Internal errors. Means some invariants expected by underlying System has\n * been broken. If you see one of these errors, Something is very broken.\n */\n INTERNAL: 'internal',\n /**\n * The service is currently unavailable. This is a most likely a transient\n * condition and may be corrected by retrying with a backoff.\n *\n * See litmus test above for deciding between FAILED_PRECONDITION, ABORTED,\n * and UNAVAILABLE.\n */\n UNAVAILABLE: 'unavailable',\n /** Unrecoverable data loss or corruption. */\n DATA_LOSS: 'data-loss'\n};\n/**\n * An error class used for Firestore-generated errors. Ideally we should be\n * using FirebaseError, but integrating with it is overly arduous at the moment,\n * so we define our own compatible error class (with a `name` of 'FirebaseError'\n * and compatible `code` and `message` fields.)\n */\nvar FirestoreError = /** @class */ (function (_super) {\n __extends(FirestoreError, _super);\n function FirestoreError(code, message) {\n var _this = _super.call(this, message) || this;\n _this.code = code;\n _this.message = message;\n _this.name = 'FirebaseError';\n // HACK: We write a toString property directly because Error is not a real\n // class and so inheritance does not work correctly. We could alternatively\n // do the same \"back-door inheritance\" trick that FirebaseError does.\n _this.toString = function () { return _this.name + \": [code=\" + _this.code + \"]: \" + _this.message; };\n return _this;\n }\n return FirestoreError;\n}(Error));\nexport { FirestoreError };\n\n//# sourceMappingURL=error.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// We are doing some heavy reflective stuff, lots of any casting necessary\n/* tslint:disable:no-any */\nimport { Code, FirestoreError } from './error';\n/**\n * Helper function to prevent instantiation through the constructor.\n *\n * This method creates a new constructor that throws when it's invoked.\n * The prototype of that constructor is then set to the prototype of the hidden\n * \"class\" to expose all the prototype methods and allow for instanceof\n * checks.\n *\n * To also make all the static methods available, all properties of the\n * original constructor are copied to the new constructor.\n */\nexport function makeConstructorPrivate(cls, optionalMessage) {\n function PublicConstructor() {\n var error = 'This constructor is private.';\n if (optionalMessage) {\n error += ' ';\n error += optionalMessage;\n }\n throw new FirestoreError(Code.INVALID_ARGUMENT, error);\n }\n // Make sure instanceof checks work and all methods are exposed on the public\n // constructor\n PublicConstructor.prototype = cls.prototype;\n // Copy any static methods/members\n for (var staticProperty in cls) {\n if (cls.hasOwnProperty(staticProperty)) {\n PublicConstructor[staticProperty] = cls[staticProperty];\n }\n }\n return PublicConstructor;\n}\n\n//# sourceMappingURL=api.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { assert } from './assert';\nexport function contains(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function get(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key) ? obj[key] : null;\n}\nexport function size(obj) {\n var count = 0;\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n count++;\n }\n }\n return count;\n}\n/** Returns the given value if it's defined or the defaultValue otherwise. */\nexport function defaulted(value, defaultValue) {\n return value !== undefined ? value : defaultValue;\n}\nexport function forEachNumber(obj, fn) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n var num = Number(key);\n if (!isNaN(num)) {\n fn(num, obj[key]);\n }\n }\n }\n}\nexport function forEach(obj, fn) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn(key, obj[key]);\n }\n }\n}\nexport function lookupOrInsert(obj, key, valFn) {\n if (!contains(obj, key)) {\n obj[key] = valFn();\n }\n return obj[key];\n}\nexport function isEmpty(obj) {\n assert(obj != null && typeof obj === 'object', 'isEmpty() expects object parameter.');\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n return false;\n }\n }\n return true;\n}\nexport function shallowCopy(obj) {\n assert(obj && typeof obj === 'object', 'shallowCopy() expects object parameter.');\n var result = {};\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n//# sourceMappingURL=obj.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { fail } from './assert';\nimport { Code, FirestoreError } from './error';\nimport * as obj from './obj';\n/**\n * Validates the invocation of functionName has the exact number of arguments.\n *\n * Forward the magic \"arguments\" variable as second parameter on which the\n * parameter validation is performed:\n * validateExactNumberOfArgs('myFunction', arguments, 2);\n */\nexport function validateExactNumberOfArgs(functionName, args, numberOfArgs) {\n if (args.length !== numberOfArgs) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Function \" + functionName + \"() requires \" +\n formatPlural(numberOfArgs, 'argument') +\n ', but was called with ' +\n formatPlural(args.length, 'argument') +\n '.');\n }\n}\n/**\n * Validates the invocation of functionName has at least the provided number of\n * arguments (but can have many more).\n *\n * Forward the magic \"arguments\" variable as second parameter on which the\n * parameter validation is performed:\n * validateAtLeastNumberOfArgs('myFunction', arguments, 2);\n */\nexport function validateAtLeastNumberOfArgs(functionName, args, minNumberOfArgs) {\n if (args.length < minNumberOfArgs) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Function \" + functionName + \"() requires at least \" +\n formatPlural(minNumberOfArgs, 'argument') +\n ', but was called with ' +\n formatPlural(args.length, 'argument') +\n '.');\n }\n}\n/**\n * Validates the invocation of functionName has number of arguments between\n * the values provided.\n *\n * Forward the magic \"arguments\" variable as second parameter on which the\n * parameter validation is performed:\n * validateBetweenNumberOfArgs('myFunction', arguments, 2, 3);\n */\nexport function validateBetweenNumberOfArgs(functionName, args, minNumberOfArgs, maxNumberOfArgs) {\n if (args.length < minNumberOfArgs || args.length > maxNumberOfArgs) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Function \" + functionName + \"() requires between \" + minNumberOfArgs + \" and \" +\n (maxNumberOfArgs + \" arguments, but was called with \") +\n formatPlural(args.length, 'argument') +\n '.');\n }\n}\n/**\n * Validates the provided argument is an array and has as least the expected\n * number of elements.\n */\nexport function validateNamedArrayAtLeastNumberOfElements(functionName, value, name, minNumberOfElements) {\n if (!(value instanceof Array) || value.length < minNumberOfElements) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Function \" + functionName + \"() requires its \" + name + \" argument to be an \" +\n 'array with at least ' +\n (formatPlural(minNumberOfElements, 'element') + \".\"));\n }\n}\n/**\n * Validates the provided positional argument has the native JavaScript type\n * using typeof checks.\n */\nexport function validateArgType(functionName, type, position, argument) {\n validateType(functionName, type, ordinal(position) + \" argument\", argument);\n}\n/**\n * Validates the provided argument has the native JavaScript type using\n * typeof checks or is undefined.\n */\nexport function validateOptionalArgType(functionName, type, position, argument) {\n if (argument !== undefined) {\n validateArgType(functionName, type, position, argument);\n }\n}\n/**\n * Validates the provided named option has the native JavaScript type using\n * typeof checks.\n */\nexport function validateNamedType(functionName, type, optionName, argument) {\n validateType(functionName, type, optionName + \" option\", argument);\n}\n/**\n * Validates the provided named option has the native JavaScript type using\n * typeof checks or is undefined.\n */\nexport function validateNamedOptionalType(functionName, type, optionName, argument) {\n if (argument !== undefined) {\n validateNamedType(functionName, type, optionName, argument);\n }\n}\n/**\n * Validates that the provided named option equals one of the expected values.\n */\nexport function validateNamedPropertyEquals(functionName, inputName, optionName, input, expected) {\n var expectedDescription = [];\n for (var _i = 0, expected_1 = expected; _i < expected_1.length; _i++) {\n var val = expected_1[_i];\n if (val === input) {\n return;\n }\n expectedDescription.push(valueDescription(val));\n }\n var actualDescription = valueDescription(input);\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Invalid value \" + actualDescription + \" provided to function \" + functionName + \"() for option \\\"\" + optionName + \"\\\". Acceptable values: \" + expectedDescription.join(', '));\n}\n/**\n * Validates that the provided named option equals one of the expected values or\n * is undefined.\n */\nexport function validateNamedOptionalPropertyEquals(functionName, inputName, optionName, input, expected) {\n if (input !== undefined) {\n validateNamedPropertyEquals(functionName, inputName, optionName, input, expected);\n }\n}\n/** Helper to validate the type of a provided input. */\nfunction validateType(functionName, type, inputName, input) {\n if (typeof input !== type || (type === 'object' && !isPlainObject(input))) {\n var description = valueDescription(input);\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Function \" + functionName + \"() requires its \" + inputName + \" \" +\n (\"to be of type \" + type + \", but it was: \" + description));\n }\n}\n/**\n * Returns true iff it's a non-null object without a custom prototype\n * (i.e. excludes Array, Date, etc.).\n */\nexport function isPlainObject(input) {\n return (typeof input === 'object' &&\n input !== null &&\n Object.getPrototypeOf(input) === Object.prototype);\n}\n/** Returns a string describing the type / value of the provided input. */\nexport function valueDescription(input) {\n if (input === undefined) {\n return 'undefined';\n }\n else if (input === null) {\n return 'null';\n }\n else if (typeof input === 'string') {\n if (input.length > 20) {\n input = input.substring(0, 20) + \"...\";\n }\n return JSON.stringify(input);\n }\n else if (typeof input === 'number' || typeof input === 'boolean') {\n return '' + input;\n }\n else if (typeof input === 'object') {\n if (input instanceof Array) {\n return 'an array';\n }\n else {\n var customObjectName = tryGetCustomObjectType(input);\n if (customObjectName) {\n return \"a custom \" + customObjectName + \" object\";\n }\n else {\n return 'an object';\n }\n }\n }\n else if (typeof input === 'function') {\n return 'a function';\n }\n else {\n return fail('Unknown wrong type: ' + typeof input);\n }\n}\n/** Hacky method to try to get the constructor name for an object. */\nexport function tryGetCustomObjectType(input) {\n if (input.constructor) {\n var funcNameRegex = /function\\s+([^\\s(]+)\\s*\\(/;\n var results = funcNameRegex.exec(input.constructor.toString());\n if (results && results.length > 1) {\n return results[1];\n }\n }\n return null;\n}\n/** Validates the provided argument is defined. */\nexport function validateDefined(functionName, position, argument) {\n if (argument === undefined) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Function \" + functionName + \"() requires a valid \" + ordinal(position) + \" \" +\n \"argument, but it was undefined.\");\n }\n}\n/**\n * Validates the provided positional argument is an object, and its keys and\n * values match the expected keys and types provided in optionTypes.\n */\nexport function validateOptionNames(functionName, options, optionNames) {\n obj.forEach(options, function (key, _) {\n if (optionNames.indexOf(key) < 0) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Unknown option '\" + key + \"' passed to function \" + functionName + \"(). \" +\n 'Available options: ' +\n optionNames.join(', '));\n }\n });\n}\n/**\n * Helper method to throw an error that the provided argument did not pass\n * an instanceof check.\n */\nexport function invalidClassError(functionName, type, position, argument) {\n var description = valueDescription(argument);\n return new FirestoreError(Code.INVALID_ARGUMENT, \"Function \" + functionName + \"() requires its \" + ordinal(position) + \" \" +\n (\"argument to be a \" + type + \", but it was: \" + description));\n}\n/** Converts a number to its english word representation */\nfunction ordinal(num) {\n switch (num) {\n case 1:\n return 'first';\n case 2:\n return 'second';\n case 3:\n return 'third';\n default:\n return num + 'th';\n }\n}\n/**\n * Formats the given word as plural conditionally given the preceding number.\n */\nfunction formatPlural(num, str) {\n return num + \" \" + str + (num === 1 ? '' : 's');\n}\n\n//# sourceMappingURL=input_validation.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { assert } from './assert';\n// tslint:disable-next-line:class-as-namespace\nvar AutoId = /** @class */ (function () {\n function AutoId() {\n }\n AutoId.newId = function () {\n // Alphanumeric characters\n var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n var autoId = '';\n for (var i = 0; i < 20; i++) {\n autoId += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n assert(autoId.length === 20, 'Invalid auto ID: ' + autoId);\n return autoId;\n };\n return AutoId;\n}());\nexport { AutoId };\nexport function primitiveComparator(left, right) {\n if (left < right)\n return -1;\n if (left > right)\n return 1;\n return 0;\n}\n/** Helper to compare nullable (or undefined-able) objects using isEqual(). */\nexport function equals(left, right) {\n if (left !== null && left !== undefined) {\n return !!(right && left.isEqual(right));\n }\n else {\n // HACK: Explicitly cast since TypeScript's type narrowing apparently isn't\n // smart enough.\n return left === right;\n }\n}\n/** Helper to compare arrays using isEqual(). */\nexport function arrayEquals(left, right) {\n if (left.length !== right.length) {\n return false;\n }\n for (var i = 0; i < left.length; i++) {\n if (!left[i].isEqual(right[i])) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns the largest lexicographically smaller string of equal or smaller\n * length. Returns an empty string if there is no such predecessor (if the input\n * is empty).\n *\n * Strings returned from this method can be invalid UTF-16 but this is sufficent\n * in use for indexeddb because that depends on lexicographical ordering but\n * shouldn't be used elsewhere.\n */\nexport function immediatePredecessor(s) {\n // We can decrement the last character in the string and be done\n // unless that character is 0 (0x0000), in which case we have to erase the\n // last character.\n var lastIndex = s.length - 1;\n if (s.length === 0) {\n // Special case the empty string.\n return '';\n }\n else if (s.charAt(lastIndex) === '\\0') {\n return s.substring(0, lastIndex);\n }\n else {\n return (s.substring(0, lastIndex) +\n String.fromCharCode(s.charCodeAt(lastIndex) - 1));\n }\n}\n/**\n * Returns the immediate lexicographically-following string. This is useful to\n * construct an inclusive range for indexeddb iterators.\n */\nexport function immediateSuccessor(s) {\n // Return the input string, with an additional NUL byte appended.\n return s + '\\0';\n}\n\n//# sourceMappingURL=misc.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { PlatformSupport } from '../platform/platform';\nimport { makeConstructorPrivate } from '../util/api';\nimport { Code, FirestoreError } from '../util/error';\nimport { invalidClassError, validateArgType, validateExactNumberOfArgs } from '../util/input_validation';\nimport { primitiveComparator } from '../util/misc';\n/** Helper function to assert Uint8Array is available at runtime. */\nfunction assertUint8ArrayAvailable() {\n if (typeof Uint8Array === 'undefined') {\n throw new FirestoreError(Code.UNIMPLEMENTED, 'Uint8Arrays are not available in this environment.');\n }\n}\n/** Helper function to assert Base64 functions are available at runtime. */\nfunction assertBase64Available() {\n if (!PlatformSupport.getPlatform().base64Available) {\n throw new FirestoreError(Code.UNIMPLEMENTED, 'Blobs are unavailable in Firestore in this environment.');\n }\n}\n/**\n * Immutable class holding a blob (binary data).\n * This class is directly exposed in the public API.\n *\n * Note that while you can't hide the constructor in JavaScript code, we are\n * using the hack above to make sure no-one outside this module can call it.\n */\nvar Blob = /** @class */ (function () {\n function Blob(binaryString) {\n assertBase64Available();\n this._binaryString = binaryString;\n }\n Blob.fromBase64String = function (base64) {\n validateExactNumberOfArgs('Blob.fromBase64String', arguments, 1);\n validateArgType('Blob.fromBase64String', 'string', 1, base64);\n assertBase64Available();\n try {\n var binaryString = PlatformSupport.getPlatform().atob(base64);\n return new Blob(binaryString);\n }\n catch (e) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Failed to construct Blob from Base64 string: ' + e);\n }\n };\n Blob.fromUint8Array = function (array) {\n validateExactNumberOfArgs('Blob.fromUint8Array', arguments, 1);\n assertUint8ArrayAvailable();\n if (!(array instanceof Uint8Array)) {\n throw invalidClassError('Blob.fromUint8Array', 'Uint8Array', 1, array);\n }\n // We can't call array.map directly because it expects the return type to\n // be a Uint8Array, whereas we can convert it to a regular array by invoking\n // map on the Array prototype.\n var binaryString = Array.prototype.map\n .call(array, function (char) {\n return String.fromCharCode(char);\n })\n .join('');\n return new Blob(binaryString);\n };\n Blob.prototype.toBase64 = function () {\n validateExactNumberOfArgs('Blob.toBase64', arguments, 0);\n assertBase64Available();\n return PlatformSupport.getPlatform().btoa(this._binaryString);\n };\n Blob.prototype.toUint8Array = function () {\n validateExactNumberOfArgs('Blob.toUint8Array', arguments, 0);\n assertUint8ArrayAvailable();\n var buffer = new Uint8Array(this._binaryString.length);\n for (var i = 0; i < this._binaryString.length; i++) {\n buffer[i] = this._binaryString.charCodeAt(i);\n }\n return buffer;\n };\n Blob.prototype.toString = function () {\n return 'Blob(base64: ' + this.toBase64() + ')';\n };\n Blob.prototype.isEqual = function (other) {\n return this._binaryString === other._binaryString;\n };\n /**\n * Actually private to JS consumers of our API, so this function is prefixed\n * with an underscore.\n */\n Blob.prototype._compareTo = function (other) {\n return primitiveComparator(this._binaryString, other._binaryString);\n };\n return Blob;\n}());\nexport { Blob };\n// Public instance that disallows construction at runtime. This constructor is\n// used when exporting Blob on firebase.firestore.Blob and will be called Blob\n// publicly. Internally we still use Blob which has a type checked private\n// constructor. Note that Blob and PublicBlob can be used interchangeably in\n// instanceof checks.\n// For our internal TypeScript code PublicBlob doesn't exist as a type, and so\n// we need to use Blob as type and export it too.\n// tslint:disable-next-line:variable-name We're treating this as a class name.\nexport var PublicBlob = makeConstructorPrivate(Blob, 'Use Blob.fromUint8Array() or Blob.fromBase64String() instead.');\n\n//# sourceMappingURL=blob.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Code, FirestoreError } from '../util/error';\nimport { validateArgType, validateExactNumberOfArgs } from '../util/input_validation';\nimport { primitiveComparator } from '../util/misc';\n/**\n * Immutable class representing a geo point as latitude-longitude pair.\n * This class is directly exposed in the public API, including its constructor.\n */\nvar GeoPoint = /** @class */ (function () {\n function GeoPoint(latitude, longitude) {\n validateExactNumberOfArgs('GeoPoint', arguments, 2);\n validateArgType('GeoPoint', 'number', 1, latitude);\n validateArgType('GeoPoint', 'number', 2, longitude);\n if (!isFinite(latitude) || latitude < -90 || latitude > 90) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Latitude must be a number between -90 and 90, but was: ' + latitude);\n }\n if (!isFinite(longitude) || longitude < -180 || longitude > 180) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Longitude must be a number between -180 and 180, but was: ' + longitude);\n }\n this._lat = latitude;\n this._long = longitude;\n }\n Object.defineProperty(GeoPoint.prototype, \"latitude\", {\n /**\n * Returns the latitude of this geo point, a number between -90 and 90.\n */\n get: function () {\n return this._lat;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GeoPoint.prototype, \"longitude\", {\n /**\n * Returns the longitude of this geo point, a number between -180 and 180.\n */\n get: function () {\n return this._long;\n },\n enumerable: true,\n configurable: true\n });\n GeoPoint.prototype.isEqual = function (other) {\n return this._lat === other._lat && this._long === other._long;\n };\n /**\n * Actually private to JS consumers of our API, so this function is prefixed\n * with an underscore.\n */\n GeoPoint.prototype._compareTo = function (other) {\n return (primitiveComparator(this._lat, other._lat) ||\n primitiveComparator(this._long, other._long));\n };\n return GeoPoint;\n}());\nexport { GeoPoint };\n\n//# sourceMappingURL=geo_point.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { primitiveComparator } from '../util/misc';\nvar DatabaseInfo = /** @class */ (function () {\n /**\n * Constructs a DatabaseInfo using the provided host, databaseId and\n * persistenceKey.\n *\n * @param databaseId The database to use.\n * @param persistenceKey A unique identifier for this Firestore's local\n * storage (used in conjunction with the databaseId).\n * @param host The Firestore backend host to connect to.\n * @param ssl Whether to use SSL when connecting.\n */\n function DatabaseInfo(databaseId, persistenceKey, host, ssl) {\n this.databaseId = databaseId;\n this.persistenceKey = persistenceKey;\n this.host = host;\n this.ssl = ssl;\n }\n return DatabaseInfo;\n}());\nexport { DatabaseInfo };\n/** The default database name for a project. */\nvar DEFAULT_DATABASE_NAME = '(default)';\n/** Represents the database ID a Firestore client is associated with. */\nvar DatabaseId = /** @class */ (function () {\n function DatabaseId(projectId, database) {\n this.projectId = projectId;\n this.database = database ? database : DEFAULT_DATABASE_NAME;\n }\n Object.defineProperty(DatabaseId.prototype, \"isDefaultDatabase\", {\n get: function () {\n return this.database === DEFAULT_DATABASE_NAME;\n },\n enumerable: true,\n configurable: true\n });\n DatabaseId.prototype.isEqual = function (other) {\n return (other instanceof DatabaseId &&\n other.projectId === this.projectId &&\n other.database === this.database);\n };\n DatabaseId.prototype.compareTo = function (other) {\n return (primitiveComparator(this.projectId, other.projectId) ||\n primitiveComparator(this.database, other.database));\n };\n return DatabaseId;\n}());\nexport { DatabaseId };\n\n//# sourceMappingURL=database_info.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { assert, fail } from '../util/assert';\nimport { Code, FirestoreError } from '../util/error';\nexport var DOCUMENT_KEY_NAME = '__name__';\n/**\n * Path represents an ordered sequence of string segments.\n */\nvar Path = /** @class */ (function () {\n function Path(segments, offset, length) {\n this.init(segments, offset, length);\n }\n /**\n * An initialization method that can be called from outside the constructor.\n * We need this so that we can have a non-static construct method that returns\n * the polymorphic `this` type.\n */\n Path.prototype.init = function (segments, offset, length) {\n if (offset === undefined) {\n offset = 0;\n }\n else if (offset > segments.length) {\n fail('offset ' + offset + ' out of range ' + segments.length);\n }\n if (length === undefined) {\n length = segments.length - offset;\n }\n else if (length > segments.length - offset) {\n fail('length ' + length + ' out of range ' + (segments.length - offset));\n }\n this.segments = segments;\n this.offset = offset;\n this.len = length;\n };\n /**\n * Constructs a new instance of Path using the same concrete type as `this`.\n * We need this instead of using the normal constructor, because polymorphic\n * `this` doesn't work on static methods.\n */\n Path.prototype.construct = function (segments, offset, length) {\n var path = Object.create(Object.getPrototypeOf(this));\n path.init(segments, offset, length);\n return path;\n };\n Object.defineProperty(Path.prototype, \"length\", {\n get: function () {\n return this.len;\n },\n enumerable: true,\n configurable: true\n });\n Path.prototype.isEqual = function (other) {\n return Path.comparator(this, other) === 0;\n };\n Path.prototype.child = function (nameOrPath) {\n var segments = this.segments.slice(this.offset, this.limit());\n if (nameOrPath instanceof Path) {\n nameOrPath.forEach(function (segment) {\n segments.push(segment);\n });\n }\n else if (typeof nameOrPath === 'string') {\n segments.push(nameOrPath);\n }\n else {\n fail('Unknown parameter type for Path.child(): ' + nameOrPath);\n }\n return this.construct(segments);\n };\n /** The index of one past the last segment of the path. */\n Path.prototype.limit = function () {\n return this.offset + this.length;\n };\n Path.prototype.popFirst = function (size) {\n size = size === undefined ? 1 : size;\n assert(this.length >= size, \"Can't call popFirst() with less segments\");\n return this.construct(this.segments, this.offset + size, this.length - size);\n };\n Path.prototype.popLast = function () {\n assert(!this.isEmpty(), \"Can't call popLast() on empty path\");\n return this.construct(this.segments, this.offset, this.length - 1);\n };\n Path.prototype.firstSegment = function () {\n assert(!this.isEmpty(), \"Can't call firstSegment() on empty path\");\n return this.segments[this.offset];\n };\n Path.prototype.lastSegment = function () {\n assert(!this.isEmpty(), \"Can't call lastSegment() on empty path\");\n return this.segments[this.limit() - 1];\n };\n Path.prototype.get = function (index) {\n assert(index < this.length, 'Index out of range');\n return this.segments[this.offset + index];\n };\n Path.prototype.isEmpty = function () {\n return this.length === 0;\n };\n Path.prototype.isPrefixOf = function (other) {\n if (other.length < this.length) {\n return false;\n }\n for (var i = 0; i < this.length; i++) {\n if (this.get(i) !== other.get(i)) {\n return false;\n }\n }\n return true;\n };\n Path.prototype.forEach = function (fn) {\n for (var i = this.offset, end = this.limit(); i < end; i++) {\n fn(this.segments[i]);\n }\n };\n Path.prototype.toArray = function () {\n return this.segments.slice(this.offset, this.limit());\n };\n Path.comparator = function (p1, p2) {\n var len = Math.min(p1.length, p2.length);\n for (var i = 0; i < len; i++) {\n var left = p1.get(i);\n var right = p2.get(i);\n if (left < right)\n return -1;\n if (left > right)\n return 1;\n }\n if (p1.length < p2.length)\n return -1;\n if (p1.length > p2.length)\n return 1;\n return 0;\n };\n return Path;\n}());\nexport { Path };\n/**\n * A slash-separated path for navigating resources (documents and collections)\n * within Firestore.\n */\nvar ResourcePath = /** @class */ (function (_super) {\n __extends(ResourcePath, _super);\n function ResourcePath() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ResourcePath.prototype.canonicalString = function () {\n // NOTE: The client is ignorant of any path segments containing escape\n // sequences (e.g. __id123__) and just passes them through raw (they exist\n // for legacy reasons and should not be used frequently).\n return this.toArray().join('/');\n };\n ResourcePath.prototype.toString = function () {\n return this.canonicalString();\n };\n /**\n * Creates a resource path from the given slash-delimited string.\n */\n ResourcePath.fromString = function (path) {\n // NOTE: The client is ignorant of any path segments containing escape\n // sequences (e.g. __id123__) and just passes them through raw (they exist\n // for legacy reasons and should not be used frequently).\n if (path.indexOf('//') >= 0) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Invalid path (\" + path + \"). Paths must not contain // in them.\");\n }\n // We may still have an empty segment at the beginning or end if they had a\n // leading or trailing slash (which we allow).\n var segments = path.split('/').filter(function (segment) { return segment.length > 0; });\n return new ResourcePath(segments);\n };\n ResourcePath.EMPTY_PATH = new ResourcePath([]);\n return ResourcePath;\n}(Path));\nexport { ResourcePath };\nvar identifierRegExp = /^[_a-zA-Z][_a-zA-Z0-9]*$/;\n/** A dot-separated path for navigating sub-objects within a document. */\nvar FieldPath = /** @class */ (function (_super) {\n __extends(FieldPath, _super);\n function FieldPath() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Returns true if the string could be used as a segment in a field path\n * without escaping.\n */\n FieldPath.isValidIdentifier = function (segment) {\n return identifierRegExp.test(segment);\n };\n FieldPath.prototype.canonicalString = function () {\n return this.toArray()\n .map(function (str) {\n str = str.replace('\\\\', '\\\\\\\\').replace('`', '\\\\`');\n if (!FieldPath.isValidIdentifier(str)) {\n str = '`' + str + '`';\n }\n return str;\n })\n .join('.');\n };\n FieldPath.prototype.toString = function () {\n return this.canonicalString();\n };\n /**\n * Returns true if this field references the key of a document.\n */\n FieldPath.prototype.isKeyField = function () {\n return this.length === 1 && this.get(0) === DOCUMENT_KEY_NAME;\n };\n /**\n * The field designating the key of a document.\n */\n FieldPath.keyField = function () {\n return new FieldPath([DOCUMENT_KEY_NAME]);\n };\n /**\n * Parses a field string from the given server-formatted string.\n *\n * - Splitting the empty string is not allowed (for now at least).\n * - Empty segments within the string (e.g. if there are two consecutive\n * separators) are not allowed.\n *\n * TODO(b/37244157): we should make this more strict. Right now, it allows\n * non-identifier path components, even if they aren't escaped.\n */\n FieldPath.fromServerFormat = function (path) {\n var segments = [];\n var current = '';\n var i = 0;\n var addCurrentSegment = function () {\n if (current.length === 0) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Invalid field path (\" + path + \"). Paths must not be empty, begin \" +\n \"with '.', end with '.', or contain '..'\");\n }\n segments.push(current);\n current = '';\n };\n var inBackticks = false;\n while (i < path.length) {\n var c = path[i];\n if (c === '\\\\') {\n if (i + 1 === path.length) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Path has trailing escape character: ' + path);\n }\n var next = path[i + 1];\n if (!(next === '\\\\' || next === '.' || next === '`')) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Path has invalid escape sequence: ' + path);\n }\n current += next;\n i += 2;\n }\n else if (c === '`') {\n inBackticks = !inBackticks;\n i++;\n }\n else if (c === '.' && !inBackticks) {\n addCurrentSegment();\n i++;\n }\n else {\n current += c;\n i++;\n }\n }\n addCurrentSegment();\n if (inBackticks) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Unterminated ` in path: ' + path);\n }\n return new FieldPath(segments);\n };\n FieldPath.EMPTY_PATH = new FieldPath([]);\n return FieldPath;\n}(Path));\nexport { FieldPath };\n\n//# sourceMappingURL=path.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { assert } from '../util/assert';\nimport { ResourcePath } from './path';\nvar DocumentKey = /** @class */ (function () {\n function DocumentKey(path) {\n this.path = path;\n assert(DocumentKey.isDocumentKey(path), 'Invalid DocumentKey with an odd number of segments: ' +\n path.toArray().join('/'));\n }\n DocumentKey.prototype.isEqual = function (other) {\n return (other !== null && ResourcePath.comparator(this.path, other.path) === 0);\n };\n DocumentKey.prototype.toString = function () {\n return this.path.toString();\n };\n DocumentKey.comparator = function (k1, k2) {\n return ResourcePath.comparator(k1.path, k2.path);\n };\n DocumentKey.isDocumentKey = function (path) {\n return path.length % 2 === 0;\n };\n /**\n * Creates and returns a new document key with the given segments.\n *\n * @param path The segments of the path to the document\n * @return A new instance of DocumentKey\n */\n DocumentKey.fromSegments = function (segments) {\n return new DocumentKey(new ResourcePath(segments.slice()));\n };\n /**\n * Creates and returns a new document key using '/' to split the string into\n * segments.\n *\n * @param path The slash-separated path string to the document\n * @return A new instance of DocumentKey\n */\n DocumentKey.fromPathString = function (path) {\n return new DocumentKey(ResourcePath.fromString(path));\n };\n DocumentKey.EMPTY = new DocumentKey(new ResourcePath([]));\n return DocumentKey;\n}());\nexport { DocumentKey };\n\n//# sourceMappingURL=document_key.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { fail } from '../util/assert';\nimport { DocumentKey } from './document_key';\nvar Document = /** @class */ (function () {\n function Document(key, version, data, options) {\n this.key = key;\n this.version = version;\n this.data = data;\n this.hasLocalMutations = options.hasLocalMutations;\n }\n Document.prototype.field = function (path) {\n return this.data.field(path);\n };\n Document.prototype.fieldValue = function (path) {\n var field = this.field(path);\n return field ? field.value() : undefined;\n };\n Document.prototype.value = function () {\n return this.data.value();\n };\n Document.prototype.isEqual = function (other) {\n return (other instanceof Document &&\n this.key.isEqual(other.key) &&\n this.version.isEqual(other.version) &&\n this.data.isEqual(other.data) &&\n this.hasLocalMutations === other.hasLocalMutations);\n };\n Document.prototype.toString = function () {\n return (\"Document(\" + this.key + \", \" + this.version + \", \" + this.data.toString() + \", \" +\n (\"{hasLocalMutations: \" + this.hasLocalMutations + \"})\"));\n };\n Document.compareByKey = function (d1, d2) {\n return DocumentKey.comparator(d1.key, d2.key);\n };\n Document.compareByField = function (field, d1, d2) {\n var v1 = d1.field(field);\n var v2 = d2.field(field);\n if (v1 !== undefined && v2 !== undefined) {\n return v1.compareTo(v2);\n }\n else {\n return fail(\"Trying to compare documents on fields that don't exist\");\n }\n };\n return Document;\n}());\nexport { Document };\n/**\n * A class representing a deleted document.\n * Version is set to 0 if we don't point to any specific time, otherwise it\n * denotes time we know it didn't exist at.\n */\nvar NoDocument = /** @class */ (function () {\n function NoDocument(key, version) {\n this.key = key;\n this.version = version;\n }\n NoDocument.prototype.toString = function () {\n return \"NoDocument(\" + this.key + \", \" + this.version + \")\";\n };\n NoDocument.prototype.isEqual = function (other) {\n return (other &&\n other.version.isEqual(this.version) &&\n other.key.isEqual(this.key));\n };\n NoDocument.compareByKey = function (d1, d2) {\n return DocumentKey.comparator(d1.key, d2.key);\n };\n return NoDocument;\n}());\nexport { NoDocument };\n\n//# sourceMappingURL=document.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { assert, fail } from './assert';\n// An immutable sorted map implementation, based on a Left-leaning Red-Black\n// tree.\nvar SortedMap = /** @class */ (function () {\n function SortedMap(comparator, root) {\n this.comparator = comparator;\n this.root = root ? root : LLRBNode.EMPTY;\n }\n // Returns a copy of the map, with the specified key/value added or replaced.\n SortedMap.prototype.insert = function (key, value) {\n return new SortedMap(this.comparator, this.root\n .insert(key, value, this.comparator)\n .copy(null, null, LLRBNode.BLACK, null, null));\n };\n // Returns a copy of the map, with the specified key removed.\n SortedMap.prototype.remove = function (key) {\n return new SortedMap(this.comparator, this.root\n .remove(key, this.comparator)\n .copy(null, null, LLRBNode.BLACK, null, null));\n };\n // Returns the value of the node with the given key, or null.\n SortedMap.prototype.get = function (key) {\n var node = this.root;\n while (!node.isEmpty()) {\n var cmp = this.comparator(key, node.key);\n if (cmp === 0) {\n return node.value;\n }\n else if (cmp < 0) {\n node = node.left;\n }\n else if (cmp > 0) {\n node = node.right;\n }\n }\n return null;\n };\n // Returns the index of the element in this sorted map, or -1 if it doesn't\n // exist.\n SortedMap.prototype.indexOf = function (key) {\n // Number of nodes that were pruned when descending right\n var prunedNodes = 0;\n var node = this.root;\n while (!node.isEmpty()) {\n var cmp = this.comparator(key, node.key);\n if (cmp === 0) {\n return prunedNodes + node.left.size;\n }\n else if (cmp < 0) {\n node = node.left;\n }\n else {\n // Count all nodes left of the node plus the node itself\n prunedNodes += node.left.size + 1;\n node = node.right;\n }\n }\n // Node not found\n return -1;\n };\n SortedMap.prototype.isEmpty = function () {\n return this.root.isEmpty();\n };\n Object.defineProperty(SortedMap.prototype, \"size\", {\n // Returns the total number of nodes in the map.\n get: function () {\n return this.root.size;\n },\n enumerable: true,\n configurable: true\n });\n // Returns the minimum key in the map.\n SortedMap.prototype.minKey = function () {\n return this.root.minKey();\n };\n // Returns the maximum key in the map.\n SortedMap.prototype.maxKey = function () {\n return this.root.maxKey();\n };\n // Traverses the map in key order and calls the specified action function\n // for each key/value pair. If action returns true, traversal is aborted.\n // Returns the first truthy value returned by action, or the last falsey\n // value returned by action.\n SortedMap.prototype.inorderTraversal = function (action) {\n return this.root.inorderTraversal(action);\n };\n SortedMap.prototype.forEach = function (fn) {\n this.inorderTraversal(function (k, v) {\n fn(k, v);\n return false;\n });\n };\n // Traverses the map in reverse key order and calls the specified action\n // function for each key/value pair. If action returns true, traversal is\n // aborted.\n // Returns the first truthy value returned by action, or the last falsey\n // value returned by action.\n SortedMap.prototype.reverseTraversal = function (action) {\n return this.root.reverseTraversal(action);\n };\n // Returns an iterator over the SortedMap.\n SortedMap.prototype.getIterator = function () {\n return new SortedMapIterator(this.root, null, this.comparator, false);\n };\n SortedMap.prototype.getIteratorFrom = function (key) {\n return new SortedMapIterator(this.root, key, this.comparator, false);\n };\n SortedMap.prototype.getReverseIterator = function () {\n return new SortedMapIterator(this.root, null, this.comparator, true);\n };\n SortedMap.prototype.getReverseIteratorFrom = function (key) {\n return new SortedMapIterator(this.root, key, this.comparator, true);\n };\n return SortedMap;\n}()); // end SortedMap\nexport { SortedMap };\n// An iterator over an LLRBNode.\nvar SortedMapIterator = /** @class */ (function () {\n function SortedMapIterator(node, startKey, comparator, isReverse) {\n this.isReverse = isReverse;\n this.nodeStack = [];\n var cmp = 1;\n while (!node.isEmpty()) {\n cmp = startKey ? comparator(node.key, startKey) : 1;\n // flip the comparison if we're going in reverse\n if (isReverse)\n cmp *= -1;\n if (cmp < 0) {\n // This node is less than our start key. ignore it\n if (this.isReverse) {\n node = node.left;\n }\n else {\n node = node.right;\n }\n }\n else if (cmp === 0) {\n // This node is exactly equal to our start key. Push it on the stack,\n // but stop iterating;\n this.nodeStack.push(node);\n break;\n }\n else {\n // This node is greater than our start key, add it to the stack and move\n // to the next one\n this.nodeStack.push(node);\n if (this.isReverse) {\n node = node.right;\n }\n else {\n node = node.left;\n }\n }\n }\n }\n SortedMapIterator.prototype.getNext = function () {\n assert(this.nodeStack.length > 0, 'getNext() called on iterator when hasNext() is false.');\n var node = this.nodeStack.pop();\n var result = { key: node.key, value: node.value };\n if (this.isReverse) {\n node = node.left;\n while (!node.isEmpty()) {\n this.nodeStack.push(node);\n node = node.right;\n }\n }\n else {\n node = node.right;\n while (!node.isEmpty()) {\n this.nodeStack.push(node);\n node = node.left;\n }\n }\n return result;\n };\n SortedMapIterator.prototype.hasNext = function () {\n return this.nodeStack.length > 0;\n };\n SortedMapIterator.prototype.peek = function () {\n if (this.nodeStack.length === 0)\n return null;\n var node = this.nodeStack[this.nodeStack.length - 1];\n return { key: node.key, value: node.value };\n };\n return SortedMapIterator;\n}()); // end SortedMapIterator\nexport { SortedMapIterator };\n// Represents a node in a Left-leaning Red-Black tree.\nvar LLRBNode = /** @class */ (function () {\n function LLRBNode(key, value, color, left, right) {\n this.key = key;\n this.value = value;\n this.color = color != null ? color : LLRBNode.RED;\n this.left = left != null ? left : LLRBNode.EMPTY;\n this.right = right != null ? right : LLRBNode.EMPTY;\n this.size = this.left.size + 1 + this.right.size;\n }\n // Returns a copy of the current node, optionally replacing pieces of it.\n LLRBNode.prototype.copy = function (key, value, color, left, right) {\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);\n };\n LLRBNode.prototype.isEmpty = function () {\n return false;\n };\n // Traverses the tree in key order and calls the specified action function\n // for each node. If action returns true, traversal is aborted.\n // Returns the first truthy value returned by action, or the last falsey\n // value returned by action.\n LLRBNode.prototype.inorderTraversal = function (action) {\n return (this.left.inorderTraversal(action) ||\n action(this.key, this.value) ||\n this.right.inorderTraversal(action));\n };\n // Traverses the tree in reverse key order and calls the specified action\n // function for each node. If action returns true, traversal is aborted.\n // Returns the first truthy value returned by action, or the last falsey\n // value returned by action.\n LLRBNode.prototype.reverseTraversal = function (action) {\n return (this.right.reverseTraversal(action) ||\n action(this.key, this.value) ||\n this.left.reverseTraversal(action));\n };\n // Returns the minimum node in the tree.\n LLRBNode.prototype.min = function () {\n if (this.left.isEmpty()) {\n return this;\n }\n else {\n return this.left.min();\n }\n };\n // Returns the maximum key in the tree.\n LLRBNode.prototype.minKey = function () {\n return this.min().key;\n };\n // Returns the maximum key in the tree.\n LLRBNode.prototype.maxKey = function () {\n if (this.right.isEmpty()) {\n return this.key;\n }\n else {\n return this.right.maxKey();\n }\n };\n // Returns new tree, with the key/value added.\n LLRBNode.prototype.insert = function (key, value, comparator) {\n var n = this;\n var cmp = comparator(key, n.key);\n if (cmp < 0) {\n n = n.copy(null, null, null, n.left.insert(key, value, comparator), null);\n }\n else if (cmp === 0) {\n n = n.copy(null, value, null, null, null);\n }\n else {\n n = n.copy(null, null, null, null, n.right.insert(key, value, comparator));\n }\n return n.fixUp();\n };\n LLRBNode.prototype.removeMin = function () {\n if (this.left.isEmpty()) {\n return LLRBNode.EMPTY;\n }\n var n = this;\n if (!n.left.isRed() && !n.left.left.isRed())\n n = n.moveRedLeft();\n n = n.copy(null, null, null, n.left.removeMin(), null);\n return n.fixUp();\n };\n // Returns new tree, with the specified item removed.\n LLRBNode.prototype.remove = function (key, comparator) {\n var smallest;\n var n = this;\n if (comparator(key, n.key) < 0) {\n if (!n.left.isEmpty() && !n.left.isRed() && !n.left.left.isRed()) {\n n = n.moveRedLeft();\n }\n n = n.copy(null, null, null, n.left.remove(key, comparator), null);\n }\n else {\n if (n.left.isRed())\n n = n.rotateRight();\n if (!n.right.isEmpty() && !n.right.isRed() && !n.right.left.isRed()) {\n n = n.moveRedRight();\n }\n if (comparator(key, n.key) === 0) {\n if (n.right.isEmpty()) {\n return LLRBNode.EMPTY;\n }\n else {\n smallest = n.right.min();\n n = n.copy(smallest.key, smallest.value, null, null, n.right.removeMin());\n }\n }\n n = n.copy(null, null, null, null, n.right.remove(key, comparator));\n }\n return n.fixUp();\n };\n LLRBNode.prototype.isRed = function () {\n return this.color;\n };\n // Returns new tree after performing any needed rotations.\n LLRBNode.prototype.fixUp = function () {\n var n = this;\n if (n.right.isRed() && !n.left.isRed())\n n = n.rotateLeft();\n if (n.left.isRed() && n.left.left.isRed())\n n = n.rotateRight();\n if (n.left.isRed() && n.right.isRed())\n n = n.colorFlip();\n return n;\n };\n LLRBNode.prototype.moveRedLeft = function () {\n var n = this.colorFlip();\n if (n.right.left.isRed()) {\n n = n.copy(null, null, null, null, n.right.rotateRight());\n n = n.rotateLeft();\n n = n.colorFlip();\n }\n return n;\n };\n LLRBNode.prototype.moveRedRight = function () {\n var n = this.colorFlip();\n if (n.left.left.isRed()) {\n n = n.rotateRight();\n n = n.colorFlip();\n }\n return n;\n };\n LLRBNode.prototype.rotateLeft = function () {\n var nl = this.copy(null, null, LLRBNode.RED, null, this.right.left);\n return this.right.copy(null, null, this.color, nl, null);\n };\n LLRBNode.prototype.rotateRight = function () {\n var nr = this.copy(null, null, LLRBNode.RED, this.left.right, null);\n return this.left.copy(null, null, this.color, null, nr);\n };\n LLRBNode.prototype.colorFlip = function () {\n var left = this.left.copy(null, null, !this.left.color, null, null);\n var right = this.right.copy(null, null, !this.right.color, null, null);\n return this.copy(null, null, !this.color, left, right);\n };\n // For testing.\n LLRBNode.prototype.checkMaxDepth = function () {\n var blackDepth = this.check();\n if (Math.pow(2.0, blackDepth) <= this.size + 1) {\n return true;\n }\n else {\n return false;\n }\n };\n // In a balanced RB tree, the black-depth (number of black nodes) from root to\n // leaves is equal on both sides. This function verifies that or asserts.\n LLRBNode.prototype.check = function () {\n if (this.isRed() && this.left.isRed()) {\n throw fail('Red node has red child(' + this.key + ',' + this.value + ')');\n }\n if (this.right.isRed()) {\n throw fail('Right child of (' + this.key + ',' + this.value + ') is red');\n }\n var blackDepth = this.left.check();\n if (blackDepth !== this.right.check()) {\n throw fail('Black depths differ');\n }\n else {\n return blackDepth + (this.isRed() ? 0 : 1);\n }\n };\n // tslint:disable-next-line:no-any Empty node is shared between all LLRB trees.\n LLRBNode.EMPTY = null;\n LLRBNode.RED = true;\n LLRBNode.BLACK = false;\n return LLRBNode;\n}()); // end LLRBNode\nexport { LLRBNode };\n// Represents an empty node (a leaf node in the Red-Black Tree).\nvar LLRBEmptyNode = /** @class */ (function () {\n function LLRBEmptyNode() {\n this.size = 0;\n }\n // Returns a copy of the current node.\n LLRBEmptyNode.prototype.copy = function (key, value, color, left, right) {\n return this;\n };\n // Returns a copy of the tree, with the specified key/value added.\n LLRBEmptyNode.prototype.insert = function (key, value, comparator) {\n return new LLRBNode(key, value);\n };\n // Returns a copy of the tree, with the specified key removed.\n LLRBEmptyNode.prototype.remove = function (key, comparator) {\n return this;\n };\n LLRBEmptyNode.prototype.isEmpty = function () {\n return true;\n };\n LLRBEmptyNode.prototype.inorderTraversal = function (action) {\n return false;\n };\n LLRBEmptyNode.prototype.reverseTraversal = function (action) {\n return false;\n };\n LLRBEmptyNode.prototype.minKey = function () {\n return null;\n };\n LLRBEmptyNode.prototype.maxKey = function () {\n return null;\n };\n LLRBEmptyNode.prototype.isRed = function () {\n return false;\n };\n // For testing.\n LLRBEmptyNode.prototype.checkMaxDepth = function () {\n return true;\n };\n LLRBEmptyNode.prototype.check = function () {\n return 0;\n };\n return LLRBEmptyNode;\n}()); // end LLRBEmptyNode\nexport { LLRBEmptyNode };\nLLRBNode.EMPTY = new LLRBEmptyNode();\n\n//# sourceMappingURL=sorted_map.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { assert, fail } from '../util/assert';\nimport { primitiveComparator } from '../util/misc';\nimport { SortedMap } from '../util/sorted_map';\nimport { DocumentKey } from './document_key';\nexport var TypeOrder;\n(function (TypeOrder) {\n // This order is defined by the backend.\n TypeOrder[TypeOrder[\"NullValue\"] = 0] = \"NullValue\";\n TypeOrder[TypeOrder[\"BooleanValue\"] = 1] = \"BooleanValue\";\n TypeOrder[TypeOrder[\"NumberValue\"] = 2] = \"NumberValue\";\n TypeOrder[TypeOrder[\"TimestampValue\"] = 3] = \"TimestampValue\";\n TypeOrder[TypeOrder[\"StringValue\"] = 4] = \"StringValue\";\n TypeOrder[TypeOrder[\"BlobValue\"] = 5] = \"BlobValue\";\n TypeOrder[TypeOrder[\"RefValue\"] = 6] = \"RefValue\";\n TypeOrder[TypeOrder[\"GeoPointValue\"] = 7] = \"GeoPointValue\";\n TypeOrder[TypeOrder[\"ArrayValue\"] = 8] = \"ArrayValue\";\n TypeOrder[TypeOrder[\"ObjectValue\"] = 9] = \"ObjectValue\";\n})(TypeOrder || (TypeOrder = {}));\n/** Defines the return value for pending server timestamps. */\nexport var ServerTimestampBehavior;\n(function (ServerTimestampBehavior) {\n ServerTimestampBehavior[ServerTimestampBehavior[\"Default\"] = 0] = \"Default\";\n ServerTimestampBehavior[ServerTimestampBehavior[\"Estimate\"] = 1] = \"Estimate\";\n ServerTimestampBehavior[ServerTimestampBehavior[\"Previous\"] = 2] = \"Previous\";\n})(ServerTimestampBehavior || (ServerTimestampBehavior = {}));\n/** Holds properties that define field value deserialization options. */\nvar FieldValueOptions = /** @class */ (function () {\n function FieldValueOptions(serverTimestampBehavior) {\n this.serverTimestampBehavior = serverTimestampBehavior;\n }\n FieldValueOptions.fromSnapshotOptions = function (options) {\n switch (options.serverTimestamps) {\n case 'estimate':\n return new FieldValueOptions(ServerTimestampBehavior.Estimate);\n case 'previous':\n return new FieldValueOptions(ServerTimestampBehavior.Previous);\n case 'none': // Fall-through intended.\n case undefined:\n return FieldValueOptions.defaultOptions;\n default:\n return fail('fromSnapshotOptions() called with invalid options.');\n }\n };\n FieldValueOptions.defaultOptions = new FieldValueOptions(ServerTimestampBehavior.Default);\n return FieldValueOptions;\n}());\nexport { FieldValueOptions };\n/**\n * A field value represents a datatype as stored by Firestore.\n */\nvar FieldValue = /** @class */ (function () {\n function FieldValue() {\n }\n FieldValue.prototype.toString = function () {\n var val = this.value();\n return val === null ? 'null' : val.toString();\n };\n FieldValue.prototype.defaultCompareTo = function (other) {\n assert(this.typeOrder !== other.typeOrder, 'Default compareTo should not be used for values of same type.');\n var cmp = primitiveComparator(this.typeOrder, other.typeOrder);\n return cmp;\n };\n return FieldValue;\n}());\nexport { FieldValue };\nvar NullValue = /** @class */ (function (_super) {\n __extends(NullValue, _super);\n function NullValue() {\n var _this = _super.call(this) || this;\n _this.typeOrder = TypeOrder.NullValue;\n // internalValue is unused but we add it to work around\n // https://github.com/Microsoft/TypeScript/issues/15585\n _this.internalValue = null;\n return _this;\n }\n NullValue.prototype.value = function (options) {\n return null;\n };\n NullValue.prototype.isEqual = function (other) {\n return other instanceof NullValue;\n };\n NullValue.prototype.compareTo = function (other) {\n if (other instanceof NullValue) {\n return 0;\n }\n return this.defaultCompareTo(other);\n };\n NullValue.INSTANCE = new NullValue();\n return NullValue;\n}(FieldValue));\nexport { NullValue };\nvar BooleanValue = /** @class */ (function (_super) {\n __extends(BooleanValue, _super);\n function BooleanValue(internalValue) {\n var _this = _super.call(this) || this;\n _this.internalValue = internalValue;\n _this.typeOrder = TypeOrder.BooleanValue;\n return _this;\n }\n BooleanValue.prototype.value = function (options) {\n return this.internalValue;\n };\n BooleanValue.prototype.isEqual = function (other) {\n return (other instanceof BooleanValue &&\n this.internalValue === other.internalValue);\n };\n BooleanValue.prototype.compareTo = function (other) {\n if (other instanceof BooleanValue) {\n return primitiveComparator(this, other);\n }\n return this.defaultCompareTo(other);\n };\n BooleanValue.of = function (value) {\n return value ? BooleanValue.TRUE : BooleanValue.FALSE;\n };\n BooleanValue.TRUE = new BooleanValue(true);\n BooleanValue.FALSE = new BooleanValue(false);\n return BooleanValue;\n}(FieldValue));\nexport { BooleanValue };\n/** Base class for IntegerValue and DoubleValue. */\nvar NumberValue = /** @class */ (function (_super) {\n __extends(NumberValue, _super);\n function NumberValue(internalValue) {\n var _this = _super.call(this) || this;\n _this.internalValue = internalValue;\n _this.typeOrder = TypeOrder.NumberValue;\n return _this;\n }\n NumberValue.prototype.value = function (options) {\n return this.internalValue;\n };\n NumberValue.prototype.compareTo = function (other) {\n if (other instanceof NumberValue) {\n return numericComparator(this.internalValue, other.internalValue);\n }\n return this.defaultCompareTo(other);\n };\n return NumberValue;\n}(FieldValue));\nexport { NumberValue };\n/** Utility function to compare doubles (using Firestore semantics for NaN). */\nfunction numericComparator(left, right) {\n if (left < right) {\n return -1;\n }\n else if (left > right) {\n return 1;\n }\n else if (left === right) {\n return 0;\n }\n else {\n // one or both are NaN.\n if (isNaN(left)) {\n return isNaN(right) ? 0 : -1;\n }\n else {\n return 1;\n }\n }\n}\n/**\n * Utility function to check numbers for equality using Firestore semantics\n * (NaN === NaN, -0.0 !== 0.0).\n */\nfunction numericEquals(left, right) {\n // Implemented based on Object.is() polyfill from\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n if (left === right) {\n // +0 != -0\n return left !== 0 || 1 / left === 1 / right;\n }\n else {\n // NaN == NaN\n return left !== left && right !== right;\n }\n}\nvar IntegerValue = /** @class */ (function (_super) {\n __extends(IntegerValue, _super);\n function IntegerValue(internalValue) {\n return _super.call(this, internalValue) || this;\n }\n IntegerValue.prototype.isEqual = function (other) {\n // NOTE: DoubleValue and IntegerValue instances may compareTo() the same,\n // but that doesn't make them equal via isEqual().\n if (other instanceof IntegerValue) {\n return numericEquals(this.internalValue, other.internalValue);\n }\n else {\n return false;\n }\n };\n return IntegerValue;\n}(NumberValue));\nexport { IntegerValue };\nvar DoubleValue = /** @class */ (function (_super) {\n __extends(DoubleValue, _super);\n function DoubleValue(internalValue) {\n var _this = _super.call(this, internalValue) || this;\n _this.internalValue = internalValue;\n return _this;\n }\n DoubleValue.prototype.isEqual = function (other) {\n // NOTE: DoubleValue and IntegerValue instances may compareTo() the same,\n // but that doesn't make them equal via isEqual().\n if (other instanceof DoubleValue) {\n return numericEquals(this.internalValue, other.internalValue);\n }\n else {\n return false;\n }\n };\n DoubleValue.NAN = new DoubleValue(NaN);\n DoubleValue.POSITIVE_INFINITY = new DoubleValue(Infinity);\n DoubleValue.NEGATIVE_INFINITY = new DoubleValue(-Infinity);\n return DoubleValue;\n}(NumberValue));\nexport { DoubleValue };\n// TODO(b/37267885): Add truncation support\nvar StringValue = /** @class */ (function (_super) {\n __extends(StringValue, _super);\n function StringValue(internalValue) {\n var _this = _super.call(this) || this;\n _this.internalValue = internalValue;\n _this.typeOrder = TypeOrder.StringValue;\n return _this;\n }\n StringValue.prototype.value = function (options) {\n return this.internalValue;\n };\n StringValue.prototype.isEqual = function (other) {\n return (other instanceof StringValue && this.internalValue === other.internalValue);\n };\n StringValue.prototype.compareTo = function (other) {\n if (other instanceof StringValue) {\n return primitiveComparator(this.internalValue, other.internalValue);\n }\n return this.defaultCompareTo(other);\n };\n return StringValue;\n}(FieldValue));\nexport { StringValue };\nvar TimestampValue = /** @class */ (function (_super) {\n __extends(TimestampValue, _super);\n function TimestampValue(internalValue) {\n var _this = _super.call(this) || this;\n _this.internalValue = internalValue;\n _this.typeOrder = TypeOrder.TimestampValue;\n return _this;\n }\n TimestampValue.prototype.value = function (options) {\n return this.internalValue.toDate();\n };\n TimestampValue.prototype.isEqual = function (other) {\n return (other instanceof TimestampValue &&\n this.internalValue.isEqual(other.internalValue));\n };\n TimestampValue.prototype.compareTo = function (other) {\n if (other instanceof TimestampValue) {\n return this.internalValue.compareTo(other.internalValue);\n }\n else if (other instanceof ServerTimestampValue) {\n // Concrete timestamps come before server timestamps.\n return -1;\n }\n else {\n return this.defaultCompareTo(other);\n }\n };\n return TimestampValue;\n}(FieldValue));\nexport { TimestampValue };\n/**\n * Represents a locally-applied ServerTimestamp.\n *\n * Notes:\n * - ServerTimestampValue instances are created as the result of applying a\n * TransformMutation (see TransformMutation.applyTo()). They can only exist in\n * the local view of a document. Therefore they do not need to be parsed or\n * serialized.\n * - When evaluated locally (e.g. for snapshot.data()), they by default\n * evaluate to `null`. This behavior can be configured by passing custom\n * FieldValueOptions to value().\n * - With respect to other ServerTimestampValues, they sort by their\n * localWriteTime.\n */\nvar ServerTimestampValue = /** @class */ (function (_super) {\n __extends(ServerTimestampValue, _super);\n function ServerTimestampValue(localWriteTime, previousValue) {\n var _this = _super.call(this) || this;\n _this.localWriteTime = localWriteTime;\n _this.previousValue = previousValue;\n _this.typeOrder = TypeOrder.TimestampValue;\n return _this;\n }\n ServerTimestampValue.prototype.value = function (options) {\n if (options &&\n options.serverTimestampBehavior === ServerTimestampBehavior.Estimate) {\n return this.localWriteTime.toDate();\n }\n else if (options &&\n options.serverTimestampBehavior === ServerTimestampBehavior.Previous) {\n return this.previousValue ? this.previousValue.value(options) : null;\n }\n else {\n return null;\n }\n };\n ServerTimestampValue.prototype.isEqual = function (other) {\n return (other instanceof ServerTimestampValue &&\n this.localWriteTime.isEqual(other.localWriteTime));\n };\n ServerTimestampValue.prototype.compareTo = function (other) {\n if (other instanceof ServerTimestampValue) {\n return this.localWriteTime.compareTo(other.localWriteTime);\n }\n else if (other instanceof TimestampValue) {\n // Server timestamps come after all concrete timestamps.\n return 1;\n }\n else {\n return this.defaultCompareTo(other);\n }\n };\n ServerTimestampValue.prototype.toString = function () {\n return '';\n };\n return ServerTimestampValue;\n}(FieldValue));\nexport { ServerTimestampValue };\nvar BlobValue = /** @class */ (function (_super) {\n __extends(BlobValue, _super);\n function BlobValue(internalValue) {\n var _this = _super.call(this) || this;\n _this.internalValue = internalValue;\n _this.typeOrder = TypeOrder.BlobValue;\n return _this;\n }\n BlobValue.prototype.value = function (options) {\n return this.internalValue;\n };\n BlobValue.prototype.isEqual = function (other) {\n return (other instanceof BlobValue &&\n this.internalValue.isEqual(other.internalValue));\n };\n BlobValue.prototype.compareTo = function (other) {\n if (other instanceof BlobValue) {\n return this.internalValue._compareTo(other.internalValue);\n }\n return this.defaultCompareTo(other);\n };\n return BlobValue;\n}(FieldValue));\nexport { BlobValue };\nvar RefValue = /** @class */ (function (_super) {\n __extends(RefValue, _super);\n function RefValue(databaseId, key) {\n var _this = _super.call(this) || this;\n _this.databaseId = databaseId;\n _this.key = key;\n _this.typeOrder = TypeOrder.RefValue;\n return _this;\n }\n RefValue.prototype.value = function (options) {\n return this.key;\n };\n RefValue.prototype.isEqual = function (other) {\n if (other instanceof RefValue) {\n return (this.key.isEqual(other.key) && this.databaseId.isEqual(other.databaseId));\n }\n else {\n return false;\n }\n };\n RefValue.prototype.compareTo = function (other) {\n if (other instanceof RefValue) {\n var cmp = this.databaseId.compareTo(other.databaseId);\n return cmp !== 0 ? cmp : DocumentKey.comparator(this.key, other.key);\n }\n return this.defaultCompareTo(other);\n };\n return RefValue;\n}(FieldValue));\nexport { RefValue };\nvar GeoPointValue = /** @class */ (function (_super) {\n __extends(GeoPointValue, _super);\n function GeoPointValue(internalValue) {\n var _this = _super.call(this) || this;\n _this.internalValue = internalValue;\n _this.typeOrder = TypeOrder.GeoPointValue;\n return _this;\n }\n GeoPointValue.prototype.value = function (options) {\n return this.internalValue;\n };\n GeoPointValue.prototype.isEqual = function (other) {\n return (other instanceof GeoPointValue &&\n this.internalValue.isEqual(other.internalValue));\n };\n GeoPointValue.prototype.compareTo = function (other) {\n if (other instanceof GeoPointValue) {\n return this.internalValue._compareTo(other.internalValue);\n }\n return this.defaultCompareTo(other);\n };\n return GeoPointValue;\n}(FieldValue));\nexport { GeoPointValue };\nvar ObjectValue = /** @class */ (function (_super) {\n __extends(ObjectValue, _super);\n function ObjectValue(internalValue) {\n var _this = _super.call(this) || this;\n _this.internalValue = internalValue;\n _this.typeOrder = TypeOrder.ObjectValue;\n return _this;\n }\n ObjectValue.prototype.value = function (options) {\n var result = {};\n this.internalValue.inorderTraversal(function (key, val) {\n result[key] = val.value(options);\n });\n return result;\n };\n ObjectValue.prototype.forEach = function (action) {\n this.internalValue.inorderTraversal(action);\n };\n ObjectValue.prototype.isEqual = function (other) {\n if (other instanceof ObjectValue) {\n var it1 = this.internalValue.getIterator();\n var it2 = other.internalValue.getIterator();\n while (it1.hasNext() && it2.hasNext()) {\n var next1 = it1.getNext();\n var next2 = it2.getNext();\n if (next1.key !== next2.key || !next1.value.isEqual(next2.value)) {\n return false;\n }\n }\n return !it1.hasNext() && !it2.hasNext();\n }\n return false;\n };\n ObjectValue.prototype.compareTo = function (other) {\n if (other instanceof ObjectValue) {\n var it1 = this.internalValue.getIterator();\n var it2 = other.internalValue.getIterator();\n while (it1.hasNext() && it2.hasNext()) {\n var next1 = it1.getNext();\n var next2 = it2.getNext();\n var cmp = primitiveComparator(next1.key, next2.key) ||\n next1.value.compareTo(next2.value);\n if (cmp) {\n return cmp;\n }\n }\n // Only equal if both iterators are exhausted\n return primitiveComparator(it1.hasNext(), it2.hasNext());\n }\n else {\n return this.defaultCompareTo(other);\n }\n };\n ObjectValue.prototype.set = function (path, to) {\n assert(!path.isEmpty(), 'Cannot set field for empty path on ObjectValue');\n if (path.length === 1) {\n return this.setChild(path.firstSegment(), to);\n }\n else {\n var child = this.child(path.firstSegment());\n if (!(child instanceof ObjectValue)) {\n child = ObjectValue.EMPTY;\n }\n var newChild = child.set(path.popFirst(), to);\n return this.setChild(path.firstSegment(), newChild);\n }\n };\n ObjectValue.prototype.delete = function (path) {\n assert(!path.isEmpty(), 'Cannot delete field for empty path on ObjectValue');\n if (path.length === 1) {\n return new ObjectValue(this.internalValue.remove(path.firstSegment()));\n }\n else {\n // nested field\n var child = this.child(path.firstSegment());\n if (child instanceof ObjectValue) {\n var newChild = child.delete(path.popFirst());\n return new ObjectValue(this.internalValue.insert(path.firstSegment(), newChild));\n }\n else {\n // Don't actually change a primitive value to an object for a delete\n return this;\n }\n }\n };\n ObjectValue.prototype.contains = function (path) {\n return this.field(path) !== undefined;\n };\n ObjectValue.prototype.field = function (path) {\n assert(!path.isEmpty(), \"Can't get field of empty path\");\n var field = this;\n path.forEach(function (pathSegment) {\n if (field instanceof ObjectValue) {\n field = field.internalValue.get(pathSegment) || undefined;\n }\n else {\n field = undefined;\n }\n });\n return field;\n };\n ObjectValue.prototype.toString = function () {\n return JSON.stringify(this.value());\n };\n ObjectValue.prototype.child = function (childName) {\n return this.internalValue.get(childName) || undefined;\n };\n ObjectValue.prototype.setChild = function (childName, value) {\n return new ObjectValue(this.internalValue.insert(childName, value));\n };\n ObjectValue.EMPTY = new ObjectValue(new SortedMap(primitiveComparator));\n return ObjectValue;\n}(FieldValue));\nexport { ObjectValue };\nvar ArrayValue = /** @class */ (function (_super) {\n __extends(ArrayValue, _super);\n function ArrayValue(internalValue) {\n var _this = _super.call(this) || this;\n _this.internalValue = internalValue;\n _this.typeOrder = TypeOrder.ArrayValue;\n return _this;\n }\n ArrayValue.prototype.value = function (options) {\n return this.internalValue.map(function (v) { return v.value(options); });\n };\n ArrayValue.prototype.forEach = function (action) {\n this.internalValue.forEach(action);\n };\n ArrayValue.prototype.isEqual = function (other) {\n if (other instanceof ArrayValue) {\n if (this.internalValue.length !== other.internalValue.length) {\n return false;\n }\n for (var i = 0; i < this.internalValue.length; i++) {\n if (!this.internalValue[i].isEqual(other.internalValue[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n ArrayValue.prototype.compareTo = function (other) {\n if (other instanceof ArrayValue) {\n var minLength = Math.min(this.internalValue.length, other.internalValue.length);\n for (var i = 0; i < minLength; i++) {\n var cmp = this.internalValue[i].compareTo(other.internalValue[i]);\n if (cmp) {\n return cmp;\n }\n }\n return primitiveComparator(this.internalValue.length, other.internalValue.length);\n }\n else {\n return this.defaultCompareTo(other);\n }\n };\n ArrayValue.prototype.toString = function () {\n return JSON.stringify(this.value());\n };\n return ArrayValue;\n}(FieldValue));\nexport { ArrayValue };\n\n//# sourceMappingURL=field_value.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Untyped Number alias we can use to check for ES6 methods / properties.\n// tslint:disable-next-line:no-any variable-name\nvar NumberAsAny = Number;\n/**\n * Minimum safe integer in Javascript because of floating point precision.\n * Added to not rely on ES6 features.\n */\nexport var MIN_SAFE_INTEGER = NumberAsAny.MIN_SAFE_INTEGER || -(Math.pow(2, 53) - 1);\n/**\n * Maximum safe integer in Javascript because of floating point precision.\n * Added to not rely on ES6 features.\n */\nexport var MAX_SAFE_INTEGER = NumberAsAny.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1;\n/**\n * Returns whether an number is an integer, uses native implementation if\n * available.\n * Added to not rely on ES6 features.\n * @param value The value to test for being an integer\n */\nexport var isInteger = NumberAsAny.isInteger ||\n (function (value) {\n return typeof value === 'number' &&\n isFinite(value) &&\n Math.floor(value) === value;\n });\n/**\n * Returns whether a variable is either undefined or null.\n */\nexport function isNullOrUndefined(value) {\n return value === null || value === undefined;\n}\n/**\n * Returns whether a value is an integer and in the safe integer range\n * @param value The value to test for being an integer and in the safe range\n */\nexport function isSafeInteger(value) {\n return (isInteger(value) &&\n value <= MAX_SAFE_INTEGER &&\n value >= MIN_SAFE_INTEGER);\n}\n/**\n * Safely checks if the number is NaN.\n */\nexport function safeIsNaN(value) {\n if (NumberAsAny.IsNaN) {\n return NumberAsAny.IsNaN(value);\n }\n else {\n return typeof value === 'number' && isNaN(value);\n }\n}\n\n//# sourceMappingURL=types.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Document } from '../model/document';\nimport { DocumentKey } from '../model/document_key';\nimport { DoubleValue, NullValue, RefValue } from '../model/field_value';\nimport { FieldPath } from '../model/path';\nimport { assert, fail } from '../util/assert';\nimport { Code, FirestoreError } from '../util/error';\nimport { isNullOrUndefined } from '../util/types';\nvar Query = /** @class */ (function () {\n function Query(path, explicitOrderBy, filters, limit, startAt, endAt) {\n if (explicitOrderBy === void 0) { explicitOrderBy = []; }\n if (filters === void 0) { filters = []; }\n if (limit === void 0) { limit = null; }\n if (startAt === void 0) { startAt = null; }\n if (endAt === void 0) { endAt = null; }\n this.path = path;\n this.explicitOrderBy = explicitOrderBy;\n this.filters = filters;\n this.limit = limit;\n this.startAt = startAt;\n this.endAt = endAt;\n this.memoizedCanonicalId = null;\n this.memoizedOrderBy = null;\n if (this.startAt) {\n this.assertValidBound(this.startAt);\n }\n if (this.endAt) {\n this.assertValidBound(this.endAt);\n }\n }\n Query.atPath = function (path) {\n return new Query(path);\n };\n Object.defineProperty(Query.prototype, \"orderBy\", {\n get: function () {\n if (this.memoizedOrderBy === null) {\n var inequalityField = this.getInequalityFilterField();\n var firstOrderByField = this.getFirstOrderByField();\n if (inequalityField !== null && firstOrderByField === null) {\n // In order to implicitly add key ordering, we must also add the\n // inequality filter field for it to be a valid query.\n // Note that the default inequality field and key ordering is ascending.\n if (inequalityField.isKeyField()) {\n this.memoizedOrderBy = [KEY_ORDERING_ASC];\n }\n else {\n this.memoizedOrderBy = [\n new OrderBy(inequalityField),\n KEY_ORDERING_ASC\n ];\n }\n }\n else {\n assert(inequalityField === null ||\n (firstOrderByField !== null &&\n inequalityField.isEqual(firstOrderByField)), 'First orderBy should match inequality field.');\n this.memoizedOrderBy = [];\n var foundKeyOrdering = false;\n for (var _i = 0, _a = this.explicitOrderBy; _i < _a.length; _i++) {\n var orderBy = _a[_i];\n this.memoizedOrderBy.push(orderBy);\n if (orderBy.field.isKeyField()) {\n foundKeyOrdering = true;\n }\n }\n if (!foundKeyOrdering) {\n // The order of the implicit key ordering always matches the last\n // explicit order by\n var lastDirection = this.explicitOrderBy.length > 0\n ? this.explicitOrderBy[this.explicitOrderBy.length - 1].dir\n : Direction.ASCENDING;\n this.memoizedOrderBy.push(lastDirection === Direction.ASCENDING\n ? KEY_ORDERING_ASC\n : KEY_ORDERING_DESC);\n }\n }\n }\n return this.memoizedOrderBy;\n },\n enumerable: true,\n configurable: true\n });\n Query.prototype.addFilter = function (filter) {\n assert(this.getInequalityFilterField() == null ||\n !(filter instanceof RelationFilter) ||\n !filter.isInequality() ||\n filter.field.isEqual(this.getInequalityFilterField()), 'Query must only have one inequality field.');\n assert(!DocumentKey.isDocumentKey(this.path), 'No filtering allowed for document query');\n var newFilters = this.filters.concat([filter]);\n return new Query(this.path, this.explicitOrderBy.slice(), newFilters, this.limit, this.startAt, this.endAt);\n };\n Query.prototype.addOrderBy = function (orderBy) {\n assert(!DocumentKey.isDocumentKey(this.path), 'No ordering allowed for document query');\n assert(!this.startAt && !this.endAt, 'Bounds must be set after orderBy');\n // TODO(dimond): validate that orderBy does not list the same key twice.\n var newOrderBy = this.explicitOrderBy.concat([orderBy]);\n return new Query(this.path, newOrderBy, this.filters.slice(), this.limit, this.startAt, this.endAt);\n };\n Query.prototype.withLimit = function (limit) {\n return new Query(this.path, this.explicitOrderBy.slice(), this.filters.slice(), limit, this.startAt, this.endAt);\n };\n Query.prototype.withStartAt = function (bound) {\n return new Query(this.path, this.explicitOrderBy.slice(), this.filters.slice(), this.limit, bound, this.endAt);\n };\n Query.prototype.withEndAt = function (bound) {\n return new Query(this.path, this.explicitOrderBy.slice(), this.filters.slice(), this.limit, this.startAt, bound);\n };\n // TODO(b/29183165): This is used to get a unique string from a query to, for\n // example, use as a dictionary key, but the implementation is subject to\n // collisions. Make it collision-free.\n Query.prototype.canonicalId = function () {\n if (this.memoizedCanonicalId === null) {\n var canonicalId = this.path.canonicalString();\n canonicalId += '|f:';\n for (var _i = 0, _a = this.filters; _i < _a.length; _i++) {\n var filter = _a[_i];\n canonicalId += filter.canonicalId();\n canonicalId += ',';\n }\n canonicalId += '|ob:';\n // TODO(dimond): make this collision resistant\n for (var _b = 0, _c = this.orderBy; _b < _c.length; _b++) {\n var orderBy = _c[_b];\n canonicalId += orderBy.canonicalId();\n canonicalId += ',';\n }\n if (!isNullOrUndefined(this.limit)) {\n canonicalId += '|l:';\n canonicalId += this.limit;\n }\n if (this.startAt) {\n canonicalId += '|lb:';\n canonicalId += this.startAt.canonicalId();\n }\n if (this.endAt) {\n canonicalId += '|ub:';\n canonicalId += this.endAt.canonicalId();\n }\n this.memoizedCanonicalId = canonicalId;\n }\n return this.memoizedCanonicalId;\n };\n Query.prototype.toString = function () {\n var str = 'Query(' + this.path.canonicalString();\n if (this.filters.length > 0) {\n str += \", filters: [\" + this.filters.join(', ') + \"]\";\n }\n if (!isNullOrUndefined(this.limit)) {\n str += ', limit: ' + this.limit;\n }\n if (this.explicitOrderBy.length > 0) {\n str += \", orderBy: [\" + this.explicitOrderBy.join(', ') + \"]\";\n }\n if (this.startAt) {\n str += ', startAt: ' + this.startAt.canonicalId();\n }\n if (this.endAt) {\n str += ', endAt: ' + this.endAt.canonicalId();\n }\n return str + ')';\n };\n Query.prototype.isEqual = function (other) {\n if (this.limit !== other.limit) {\n return false;\n }\n if (this.orderBy.length !== other.orderBy.length) {\n return false;\n }\n for (var i = 0; i < this.orderBy.length; i++) {\n if (!this.orderBy[i].isEqual(other.orderBy[i])) {\n return false;\n }\n }\n if (this.filters.length !== other.filters.length) {\n return false;\n }\n for (var i = 0; i < this.filters.length; i++) {\n if (!this.filters[i].isEqual(other.filters[i])) {\n return false;\n }\n }\n if (!this.path.isEqual(other.path)) {\n return false;\n }\n if (this.startAt !== null\n ? !this.startAt.isEqual(other.startAt)\n : other.startAt !== null) {\n return false;\n }\n return this.endAt !== null\n ? this.endAt.isEqual(other.endAt)\n : other.endAt === null;\n };\n Query.prototype.docComparator = function (d1, d2) {\n var comparedOnKeyField = false;\n for (var _i = 0, _a = this.orderBy; _i < _a.length; _i++) {\n var orderBy = _a[_i];\n var comp = orderBy.compare(d1, d2);\n if (comp !== 0)\n return comp;\n comparedOnKeyField = comparedOnKeyField || orderBy.field.isKeyField();\n }\n // Assert that we actually compared by key\n assert(comparedOnKeyField, \"orderBy used that doesn't compare on key field\");\n return 0;\n };\n Query.prototype.matches = function (doc) {\n return (this.matchesAncestor(doc) &&\n this.matchesOrderBy(doc) &&\n this.matchesFilters(doc) &&\n this.matchesBounds(doc));\n };\n Query.prototype.hasLimit = function () {\n return !isNullOrUndefined(this.limit);\n };\n Query.prototype.getFirstOrderByField = function () {\n return this.explicitOrderBy.length > 0\n ? this.explicitOrderBy[0].field\n : null;\n };\n Query.prototype.getInequalityFilterField = function () {\n for (var _i = 0, _a = this.filters; _i < _a.length; _i++) {\n var filter = _a[_i];\n if (filter instanceof RelationFilter && filter.isInequality()) {\n return filter.field;\n }\n }\n return null;\n };\n Query.prototype.isDocumentQuery = function () {\n return DocumentKey.isDocumentKey(this.path) && this.filters.length === 0;\n };\n Query.prototype.matchesAncestor = function (doc) {\n var docPath = doc.key.path;\n if (DocumentKey.isDocumentKey(this.path)) {\n // exact match for document queries\n return this.path.isEqual(docPath);\n }\n else {\n // shallow ancestor queries by default\n return (this.path.isPrefixOf(docPath) && this.path.length === docPath.length - 1);\n }\n };\n /**\n * A document must have a value for every ordering clause in order to show up\n * in the results.\n */\n Query.prototype.matchesOrderBy = function (doc) {\n for (var _i = 0, _a = this.explicitOrderBy; _i < _a.length; _i++) {\n var orderBy = _a[_i];\n // order by key always matches\n if (!orderBy.field.isKeyField() &&\n doc.field(orderBy.field) === undefined) {\n return false;\n }\n }\n return true;\n };\n Query.prototype.matchesFilters = function (doc) {\n for (var _i = 0, _a = this.filters; _i < _a.length; _i++) {\n var filter = _a[_i];\n if (!filter.matches(doc)) {\n return false;\n }\n }\n return true;\n };\n /**\n * Makes sure a document is within the bounds, if provided.\n */\n Query.prototype.matchesBounds = function (doc) {\n if (this.startAt && !this.startAt.sortsBeforeDocument(this.orderBy, doc)) {\n return false;\n }\n if (this.endAt && this.endAt.sortsBeforeDocument(this.orderBy, doc)) {\n return false;\n }\n return true;\n };\n Query.prototype.assertValidBound = function (bound) {\n assert(bound.position.length <= this.orderBy.length, 'Bound is longer than orderBy');\n };\n return Query;\n}());\nexport { Query };\nvar RelationOp = /** @class */ (function () {\n function RelationOp(name) {\n this.name = name;\n }\n RelationOp.fromString = function (op) {\n switch (op) {\n case '<':\n return RelationOp.LESS_THAN;\n case '<=':\n return RelationOp.LESS_THAN_OR_EQUAL;\n case '==':\n return RelationOp.EQUAL;\n case '>=':\n return RelationOp.GREATER_THAN_OR_EQUAL;\n case '>':\n return RelationOp.GREATER_THAN;\n default:\n return fail('Unknown relation: ' + op);\n }\n };\n RelationOp.prototype.toString = function () {\n return this.name;\n };\n RelationOp.prototype.isEqual = function (other) {\n return this.name === other.name;\n };\n RelationOp.LESS_THAN = new RelationOp('<');\n RelationOp.LESS_THAN_OR_EQUAL = new RelationOp('<=');\n RelationOp.EQUAL = new RelationOp('==');\n RelationOp.GREATER_THAN = new RelationOp('>');\n RelationOp.GREATER_THAN_OR_EQUAL = new RelationOp('>=');\n return RelationOp;\n}());\nexport { RelationOp };\nvar RelationFilter = /** @class */ (function () {\n function RelationFilter(field, op, value) {\n this.field = field;\n this.op = op;\n this.value = value;\n }\n RelationFilter.prototype.matches = function (doc) {\n if (this.field.isKeyField()) {\n assert(this.value instanceof RefValue, 'Comparing on key, but filter value not a RefValue');\n var refValue = this.value;\n var comparison = DocumentKey.comparator(doc.key, refValue.key);\n return this.matchesComparison(comparison);\n }\n else {\n var val = doc.field(this.field);\n return val !== undefined && this.matchesValue(val);\n }\n };\n RelationFilter.prototype.matchesValue = function (value) {\n // Only compare types with matching backend order (such as double and int).\n if (this.value.typeOrder !== value.typeOrder) {\n return false;\n }\n return this.matchesComparison(value.compareTo(this.value));\n };\n RelationFilter.prototype.matchesComparison = function (comparison) {\n switch (this.op) {\n case RelationOp.LESS_THAN:\n return comparison < 0;\n case RelationOp.LESS_THAN_OR_EQUAL:\n return comparison <= 0;\n case RelationOp.EQUAL:\n return comparison === 0;\n case RelationOp.GREATER_THAN:\n return comparison > 0;\n case RelationOp.GREATER_THAN_OR_EQUAL:\n return comparison >= 0;\n default:\n return fail('Unknown relation op' + this.op);\n }\n };\n RelationFilter.prototype.isInequality = function () {\n return this.op !== RelationOp.EQUAL;\n };\n RelationFilter.prototype.canonicalId = function () {\n // TODO(b/29183165): Technically, this won't be unique if two values have\n // the same description, such as the int 3 and the string \"3\". So we should\n // add the types in here somehow, too.\n return (this.field.canonicalString() + this.op.toString() + this.value.toString());\n };\n RelationFilter.prototype.isEqual = function (other) {\n if (other instanceof RelationFilter) {\n return (this.op.isEqual(other.op) &&\n this.field.isEqual(other.field) &&\n this.value.isEqual(other.value));\n }\n else {\n return false;\n }\n };\n RelationFilter.prototype.toString = function () {\n return this.field.canonicalString() + \" \" + this.op + \" \" + this.value.value();\n };\n return RelationFilter;\n}());\nexport { RelationFilter };\n/**\n * Filter that matches 'null' values.\n */\nvar NullFilter = /** @class */ (function () {\n function NullFilter(field) {\n this.field = field;\n }\n NullFilter.prototype.matches = function (doc) {\n var val = doc.field(this.field);\n return val !== undefined && val.value() === null;\n };\n NullFilter.prototype.canonicalId = function () {\n return this.field.canonicalString() + ' IS null';\n };\n NullFilter.prototype.toString = function () {\n return this.field.canonicalString() + \" IS null\";\n };\n NullFilter.prototype.isEqual = function (other) {\n if (other instanceof NullFilter) {\n return this.field.isEqual(other.field);\n }\n else {\n return false;\n }\n };\n return NullFilter;\n}());\nexport { NullFilter };\n/**\n * Filter that matches 'NaN' values.\n */\nvar NanFilter = /** @class */ (function () {\n function NanFilter(field) {\n this.field = field;\n }\n NanFilter.prototype.matches = function (doc) {\n var val = doc.field(this.field).value();\n return typeof val === 'number' && isNaN(val);\n };\n NanFilter.prototype.canonicalId = function () {\n return this.field.canonicalString() + ' IS NaN';\n };\n NanFilter.prototype.toString = function () {\n return this.field.canonicalString() + \" IS NaN\";\n };\n NanFilter.prototype.isEqual = function (other) {\n if (other instanceof NanFilter) {\n return this.field.isEqual(other.field);\n }\n else {\n return false;\n }\n };\n return NanFilter;\n}());\nexport { NanFilter };\n/**\n * Creates a filter based on the provided arguments.\n */\nexport function fieldFilter(field, op, value) {\n if (value.isEqual(NullValue.INSTANCE)) {\n if (op !== RelationOp.EQUAL) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid query. You can only perform equals ' + 'comparisons on null.');\n }\n return new NullFilter(field);\n }\n else if (value.isEqual(DoubleValue.NAN)) {\n if (op !== RelationOp.EQUAL) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid query. You can only perform equals ' + 'comparisons on NaN.');\n }\n return new NanFilter(field);\n }\n else {\n return new RelationFilter(field, op, value);\n }\n}\n/**\n * The direction of sorting in an order by.\n */\nvar Direction = /** @class */ (function () {\n function Direction(name) {\n this.name = name;\n }\n Direction.prototype.toString = function () {\n return this.name;\n };\n Direction.ASCENDING = new Direction('asc');\n Direction.DESCENDING = new Direction('desc');\n return Direction;\n}());\nexport { Direction };\n/**\n * Represents a bound of a query.\n *\n * The bound is specified with the given components representing a position and\n * whether it's just before or just after the position (relative to whatever the\n * query order is).\n *\n * The position represents a logical index position for a query. It's a prefix\n * of values for the (potentially implicit) order by clauses of a query.\n *\n * Bound provides a function to determine whether a document comes before or\n * after a bound. This is influenced by whether the position is just before or\n * just after the provided values.\n */\nvar Bound = /** @class */ (function () {\n function Bound(position, before) {\n this.position = position;\n this.before = before;\n }\n Bound.prototype.canonicalId = function () {\n // TODO(b/29183165): Make this collision robust.\n var canonicalId = this.before ? 'b:' : 'a:';\n for (var _i = 0, _a = this.position; _i < _a.length; _i++) {\n var component = _a[_i];\n canonicalId += component.toString();\n }\n return canonicalId;\n };\n /**\n * Returns true if a document sorts before a bound using the provided sort\n * order.\n */\n Bound.prototype.sortsBeforeDocument = function (orderBy, doc) {\n assert(this.position.length <= orderBy.length, \"Bound has more components than query's orderBy\");\n var comparison = 0;\n for (var i = 0; i < this.position.length; i++) {\n var orderByComponent = orderBy[i];\n var component = this.position[i];\n if (orderByComponent.field.isKeyField()) {\n assert(component instanceof RefValue, 'Bound has a non-key value where the key path is being used.');\n comparison = DocumentKey.comparator(component.key, doc.key);\n }\n else {\n var docValue = doc.field(orderByComponent.field);\n assert(docValue !== undefined, 'Field should exist since document matched the orderBy already.');\n comparison = component.compareTo(docValue);\n }\n if (orderByComponent.dir === Direction.DESCENDING) {\n comparison = comparison * -1;\n }\n if (comparison !== 0) {\n break;\n }\n }\n return this.before ? comparison <= 0 : comparison < 0;\n };\n Bound.prototype.isEqual = function (other) {\n if (other === null) {\n return false;\n }\n if (this.before !== other.before ||\n this.position.length !== other.position.length) {\n return false;\n }\n for (var i = 0; i < this.position.length; i++) {\n var thisPosition = this.position[i];\n var otherPosition = other.position[i];\n return thisPosition.isEqual(otherPosition);\n }\n return true;\n };\n return Bound;\n}());\nexport { Bound };\n/**\n * An ordering on a field, in some Direction. Direction defaults to ASCENDING.\n */\nvar OrderBy = /** @class */ (function () {\n function OrderBy(field, dir) {\n this.field = field;\n if (dir === undefined) {\n dir = Direction.ASCENDING;\n }\n this.dir = dir;\n this.isKeyOrderBy = field.isKeyField();\n }\n OrderBy.prototype.compare = function (d1, d2) {\n var comparison = this.isKeyOrderBy\n ? Document.compareByKey(d1, d2)\n : Document.compareByField(this.field, d1, d2);\n switch (this.dir) {\n case Direction.ASCENDING:\n return comparison;\n case Direction.DESCENDING:\n return -1 * comparison;\n default:\n return fail('Unknown direction: ' + this.dir);\n }\n };\n OrderBy.prototype.canonicalId = function () {\n // TODO(b/29183165): Make this collision robust.\n return this.field.canonicalString() + this.dir.toString();\n };\n OrderBy.prototype.toString = function () {\n return this.field.canonicalString() + \" (\" + this.dir + \")\";\n };\n OrderBy.prototype.isEqual = function (other) {\n return this.dir === other.dir && this.field.isEqual(other.field);\n };\n return OrderBy;\n}());\nexport { OrderBy };\nvar KEY_ORDERING_ASC = new OrderBy(FieldPath.keyField(), Direction.ASCENDING);\nvar KEY_ORDERING_DESC = new OrderBy(FieldPath.keyField(), Direction.DESCENDING);\n\n//# sourceMappingURL=query.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SnapshotVersion } from '../core/snapshot_version';\nimport { emptyByteString } from '../platform/platform';\n/** An enumeration of the different purposes we have for queries. */\nexport var QueryPurpose;\n(function (QueryPurpose) {\n /** A regular, normal query. */\n QueryPurpose[QueryPurpose[\"Listen\"] = 0] = \"Listen\";\n /**\n * The query was used to refill a query after an existence filter mismatch.\n */\n QueryPurpose[QueryPurpose[\"ExistenceFilterMismatch\"] = 1] = \"ExistenceFilterMismatch\";\n /** The query was used to resolve a limbo document. */\n QueryPurpose[QueryPurpose[\"LimboResolution\"] = 2] = \"LimboResolution\";\n})(QueryPurpose || (QueryPurpose = {}));\n/**\n * An immutable set of metadata that the local store tracks for each query.\n */\nvar QueryData = /** @class */ (function () {\n function QueryData(\n /** The query being listened to. */\n query, \n /**\n * The target ID to which the query corresponds; Assigned by the\n * LocalStore for user listens and by the SyncEngine for limbo watches.\n */\n targetId, \n /** The purpose of the query. */\n purpose, \n /** The latest snapshot version seen for this target. */\n snapshotVersion, \n /**\n * An opaque, server-assigned token that allows watching a query to be\n * resumed after disconnecting without retransmitting all the data that\n * matches the query. The resume token essentially identifies a point in\n * time from which the server should resume sending results.\n */\n resumeToken) {\n if (snapshotVersion === void 0) { snapshotVersion = SnapshotVersion.MIN; }\n if (resumeToken === void 0) { resumeToken = emptyByteString(); }\n this.query = query;\n this.targetId = targetId;\n this.purpose = purpose;\n this.snapshotVersion = snapshotVersion;\n this.resumeToken = resumeToken;\n }\n /**\n * Creates a new query data instance with an updated snapshot version and\n * resume token.\n */\n QueryData.prototype.update = function (updated) {\n return new QueryData(this.query, this.targetId, this.purpose, updated.snapshotVersion, updated.resumeToken);\n };\n QueryData.prototype.isEqual = function (other) {\n return (this.targetId === other.targetId &&\n this.purpose === other.purpose &&\n this.snapshotVersion.isEqual(other.snapshotVersion) &&\n this.resumeToken === other.resumeToken &&\n this.query.isEqual(other.query));\n };\n return QueryData;\n}());\nexport { QueryData };\n\n//# sourceMappingURL=query_data.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { assert } from '../util/assert';\nimport { primitiveComparator } from '../util/misc';\n// A RegExp matching ISO 8601 UTC timestamps with optional fraction.\nvar isoRegExp = new RegExp(/^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(?:\\.(\\d+))?Z$/);\nvar Timestamp = /** @class */ (function () {\n function Timestamp(seconds, nanos) {\n this.seconds = seconds;\n this.nanos = nanos;\n assert(nanos >= 0, 'timestamp nanoseconds out of range: ' + nanos);\n assert(nanos < 1e9, 'timestamp nanoseconds out of range' + nanos);\n // Midnight at the beginning of 1/1/1 is the earliest Firestore supports.\n assert(seconds >= -62135596800, 'timestamp seconds out of range: ' + seconds);\n // This will break in the year 10,000.\n assert(seconds < 253402300800, 'timestamp seconds out of range' + seconds);\n }\n Timestamp.now = function () {\n return Timestamp.fromEpochMilliseconds(Date.now());\n };\n Timestamp.fromDate = function (date) {\n return Timestamp.fromEpochMilliseconds(date.getTime());\n };\n Timestamp.fromEpochMilliseconds = function (milliseconds) {\n var seconds = Math.floor(milliseconds / 1000);\n var nanos = (milliseconds - seconds * 1000) * 1e6;\n return new Timestamp(seconds, nanos);\n };\n Timestamp.fromISOString = function (utc) {\n // The date string can have higher precision (nanos) than the Date class\n // (millis), so we do some custom parsing here.\n // Parse the nanos right out of the string.\n var nanos = 0;\n var fraction = isoRegExp.exec(utc);\n assert(!!fraction, 'invalid timestamp: ' + utc);\n if (fraction[1]) {\n // Pad the fraction out to 9 digits (nanos).\n var nanoStr = fraction[1];\n nanoStr = (nanoStr + '000000000').substr(0, 9);\n nanos = Number(nanoStr);\n }\n // Parse the date to get the seconds.\n var date = new Date(utc);\n var seconds = Math.floor(date.getTime() / 1000);\n return new Timestamp(seconds, nanos);\n };\n Timestamp.prototype.toDate = function () {\n return new Date(this.toEpochMilliseconds());\n };\n Timestamp.prototype.toEpochMilliseconds = function () {\n return this.seconds * 1000 + this.nanos / 1e6;\n };\n Timestamp.prototype.compareTo = function (other) {\n if (this.seconds === other.seconds) {\n return primitiveComparator(this.nanos, other.nanos);\n }\n return primitiveComparator(this.seconds, other.seconds);\n };\n Timestamp.prototype.isEqual = function (other) {\n return other.seconds === this.seconds && other.nanos === this.nanos;\n };\n Timestamp.prototype.toString = function () {\n return 'Timestamp(seconds=' + this.seconds + ', nanos=' + this.nanos + ')';\n };\n return Timestamp;\n}());\nexport { Timestamp };\n\n//# sourceMappingURL=timestamp.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Timestamp } from './timestamp';\n/**\n * A version of a document in Firestore. This corresponds to the version\n * timestamp, such as update_time or read_time.\n */\nvar SnapshotVersion = /** @class */ (function () {\n function SnapshotVersion(timestamp) {\n this.timestamp = timestamp;\n }\n // TODO(b/34176344): Once we no longer need to use the old alpha protos,\n // delete this constructor and use a timestamp-backed version everywhere.\n SnapshotVersion.fromMicroseconds = function (value) {\n var seconds = Math.floor(value / 1e6);\n var nanos = (value % 1e6) * 1e3;\n return new SnapshotVersion(new Timestamp(seconds, nanos));\n };\n SnapshotVersion.fromTimestamp = function (value) {\n return new SnapshotVersion(value);\n };\n SnapshotVersion.forDeletedDoc = function () {\n return SnapshotVersion.MIN;\n };\n SnapshotVersion.prototype.compareTo = function (other) {\n return this.timestamp.compareTo(other.timestamp);\n };\n SnapshotVersion.prototype.isEqual = function (other) {\n return this.timestamp.isEqual(other.timestamp);\n };\n /** Returns a number representation of the version for use in spec tests. */\n SnapshotVersion.prototype.toMicroseconds = function () {\n // Convert to microseconds.\n return this.timestamp.seconds * 1e6 + this.timestamp.nanos / 1000;\n };\n SnapshotVersion.prototype.toString = function () {\n return 'SnapshotVersion(' + this.timestamp.toString() + ')';\n };\n SnapshotVersion.prototype.toTimestamp = function () {\n return this.timestamp;\n };\n SnapshotVersion.MIN = new SnapshotVersion(new Timestamp(0, 0));\n return SnapshotVersion;\n}());\nexport { SnapshotVersion };\n\n//# sourceMappingURL=snapshot_version.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { SnapshotVersion } from '../core/snapshot_version';\nimport { assert, fail } from '../util/assert';\nimport * as misc from '../util/misc';\nimport { Document, NoDocument } from './document';\nimport { ObjectValue, ServerTimestampValue } from './field_value';\n/**\n * Provides a set of fields that can be used to partially patch a document.\n * FieldMask is used in conjunction with ObjectValue.\n * Examples:\n * foo - Overwrites foo entirely with the provided value. If foo is not\n * present in the companion ObjectValue, the field is deleted.\n * foo.bar - Overwrites only the field bar of the object foo.\n * If foo is not an object, foo is replaced with an object\n * containing foo\n */\nvar FieldMask = /** @class */ (function () {\n function FieldMask(fields) {\n this.fields = fields;\n // TODO(dimond): validation of FieldMask\n }\n FieldMask.prototype.isEqual = function (other) {\n return misc.arrayEquals(this.fields, other.fields);\n };\n return FieldMask;\n}());\nexport { FieldMask };\n/** Transforms a value into a server-generated timestamp. */\nvar ServerTimestampTransform = /** @class */ (function () {\n function ServerTimestampTransform() {\n }\n ServerTimestampTransform.prototype.isEqual = function (other) {\n return other instanceof ServerTimestampTransform;\n };\n ServerTimestampTransform.instance = new ServerTimestampTransform();\n return ServerTimestampTransform;\n}());\nexport { ServerTimestampTransform };\n/** A field path and the TransformOperation to perform upon it. */\nvar FieldTransform = /** @class */ (function () {\n function FieldTransform(field, transform) {\n this.field = field;\n this.transform = transform;\n }\n FieldTransform.prototype.isEqual = function (other) {\n return (this.field.isEqual(other.field) && this.transform.isEqual(other.transform));\n };\n return FieldTransform;\n}());\nexport { FieldTransform };\n/** The result of successfully applying a mutation to the backend. */\nvar MutationResult = /** @class */ (function () {\n function MutationResult(\n /**\n * The version at which the mutation was committed or null for a delete.\n */\n version, \n /**\n * The resulting fields returned from the backend after a\n * TransformMutation has been committed. Contains one FieldValue for each\n * FieldTransform that was in the mutation.\n *\n * Will be null if the mutation was not a TransformMutation.\n */\n transformResults) {\n this.version = version;\n this.transformResults = transformResults;\n }\n return MutationResult;\n}());\nexport { MutationResult };\nexport var MutationType;\n(function (MutationType) {\n MutationType[MutationType[\"Set\"] = 0] = \"Set\";\n MutationType[MutationType[\"Patch\"] = 1] = \"Patch\";\n MutationType[MutationType[\"Transform\"] = 2] = \"Transform\";\n MutationType[MutationType[\"Delete\"] = 3] = \"Delete\";\n})(MutationType || (MutationType = {}));\n/**\n * Encodes a precondition for a mutation. This follows the model that the\n * backend accepts with the special case of an explicit \"empty\" precondition\n * (meaning no precondition).\n */\nvar Precondition = /** @class */ (function () {\n function Precondition(updateTime, exists) {\n this.updateTime = updateTime;\n this.exists = exists;\n assert(updateTime === undefined || exists === undefined, 'Precondition can specify \"exists\" or \"updateTime\" but not both');\n }\n /** Creates a new Precondition with an exists flag. */\n Precondition.exists = function (exists) {\n return new Precondition(undefined, exists);\n };\n /** Creates a new Precondition based on a version a document exists at. */\n Precondition.updateTime = function (version) {\n return new Precondition(version);\n };\n Object.defineProperty(Precondition.prototype, \"isNone\", {\n /** Returns whether this Precondition is empty. */\n get: function () {\n return this.updateTime === undefined && this.exists === undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Returns true if the preconditions is valid for the given document\n * (or null if no document is available).\n */\n Precondition.prototype.isValidFor = function (maybeDoc) {\n if (this.updateTime !== undefined) {\n return (maybeDoc instanceof Document &&\n maybeDoc.version.isEqual(this.updateTime));\n }\n else if (this.exists !== undefined) {\n if (this.exists) {\n return maybeDoc instanceof Document;\n }\n else {\n return maybeDoc === null || maybeDoc instanceof NoDocument;\n }\n }\n else {\n assert(this.isNone, 'Precondition should be empty');\n return true;\n }\n };\n Precondition.prototype.isEqual = function (other) {\n return (misc.equals(this.updateTime, other.updateTime) &&\n this.exists === other.exists);\n };\n Precondition.NONE = new Precondition();\n return Precondition;\n}());\nexport { Precondition };\n/**\n * A mutation describes a self-contained change to a document. Mutations can\n * create, replace, delete, and update subsets of documents.\n *\n * Mutations not only act on the value of the document but also it version.\n * In the case of Set, Patch, and Transform mutations we preserve the existing\n * version. In the case of Delete mutations, we reset the version to 0.\n *\n * Here's the expected transition table.\n *\n * MUTATION APPLIED TO RESULTS IN\n *\n * SetMutation Document(v3) Document(v3)\n * SetMutation NoDocument(v3) Document(v0)\n * SetMutation null Document(v0)\n * PatchMutation Document(v3) Document(v3)\n * PatchMutation NoDocument(v3) NoDocument(v3)\n * PatchMutation null null\n * TransformMutation Document(v3) Document(v3)\n * TransformMutation NoDocument(v3) NoDocument(v3)\n * TransformMutation null null\n * DeleteMutation Document(v3) NoDocument(v0)\n * DeleteMutation NoDocument(v3) NoDocument(v0)\n * DeleteMutation null NoDocument(v0)\n *\n * Note that TransformMutations don't create Documents (in the case of being\n * applied to a NoDocument), even though they would on the backend. This is\n * because the client always combines the TransformMutation with a SetMutation\n * or PatchMutation and we only want to apply the transform if the prior\n * mutation resulted in a Document (always true for a SetMutation, but not\n * necessarily for a PatchMutation).\n *\n * ## Subclassing Notes\n *\n * Subclasses of Mutation need to implement applyToRemoteDocument() and\n * applyToLocalView() to implement the actual behavior of applying the mutation\n * to some source document.\n */\nvar Mutation = /** @class */ (function () {\n function Mutation() {\n }\n Mutation.prototype.verifyKeyMatches = function (maybeDoc) {\n if (maybeDoc != null) {\n assert(maybeDoc.key.isEqual(this.key), 'Can only apply a mutation to a document with the same key');\n }\n };\n /**\n * Returns the version from the given document for use as the result of a\n * mutation. Mutations are defined to return the version of the base document\n * only if it is an existing document. Deleted and unknown documents have a\n * post-mutation version of SnapshotVersion.MIN.\n */\n Mutation.getPostMutationVersion = function (maybeDoc) {\n if (maybeDoc instanceof Document) {\n return maybeDoc.version;\n }\n else {\n return SnapshotVersion.MIN;\n }\n };\n return Mutation;\n}());\nexport { Mutation };\n/**\n * A mutation that creates or replaces the document at the given key with the\n * object value contents.\n */\nvar SetMutation = /** @class */ (function (_super) {\n __extends(SetMutation, _super);\n function SetMutation(key, value, precondition) {\n var _this = _super.call(this) || this;\n _this.key = key;\n _this.value = value;\n _this.precondition = precondition;\n _this.type = MutationType.Set;\n return _this;\n }\n SetMutation.prototype.applyToRemoteDocument = function (maybeDoc, mutationResult) {\n this.verifyKeyMatches(maybeDoc);\n assert(mutationResult.transformResults == null, 'Transform results received by SetMutation.');\n // Unlike applyToLocalView, if we're applying a mutation to a remote\n // document the server has accepted the mutation so the precondition must\n // have held.\n var version = Mutation.getPostMutationVersion(maybeDoc);\n return new Document(this.key, version, this.value, {\n hasLocalMutations: false\n });\n };\n SetMutation.prototype.applyToLocalView = function (maybeDoc, baseDoc, localWriteTime) {\n this.verifyKeyMatches(maybeDoc);\n if (!this.precondition.isValidFor(maybeDoc)) {\n return maybeDoc;\n }\n var version = Mutation.getPostMutationVersion(maybeDoc);\n return new Document(this.key, version, this.value, {\n hasLocalMutations: true\n });\n };\n SetMutation.prototype.isEqual = function (other) {\n return (other instanceof SetMutation &&\n this.key.isEqual(other.key) &&\n this.value.isEqual(other.value) &&\n this.precondition.isEqual(other.precondition));\n };\n return SetMutation;\n}(Mutation));\nexport { SetMutation };\n/**\n * A mutation that modifies fields of the document at the given key with the\n * given values. The values are applied through a field mask:\n *\n * * When a field is in both the mask and the values, the corresponding field\n * is updated.\n * * When a field is in neither the mask nor the values, the corresponding\n * field is unmodified.\n * * When a field is in the mask but not in the values, the corresponding field\n * is deleted.\n * * When a field is not in the mask but is in the values, the values map is\n * ignored.\n */\nvar PatchMutation = /** @class */ (function (_super) {\n __extends(PatchMutation, _super);\n function PatchMutation(key, data, fieldMask, precondition) {\n var _this = _super.call(this) || this;\n _this.key = key;\n _this.data = data;\n _this.fieldMask = fieldMask;\n _this.precondition = precondition;\n _this.type = MutationType.Patch;\n return _this;\n }\n PatchMutation.prototype.applyToRemoteDocument = function (maybeDoc, mutationResult) {\n this.verifyKeyMatches(maybeDoc);\n assert(mutationResult.transformResults == null, 'Transform results received by PatchMutation.');\n // TODO(mcg): Relax enforcement of this precondition\n //\n // We shouldn't actually enforce the precondition since it already passed on\n // the backend, but we may not have a local version of the document to\n // patch, so we use the precondition to prevent incorrectly putting a\n // partial document into our cache.\n if (!this.precondition.isValidFor(maybeDoc)) {\n return maybeDoc;\n }\n var version = Mutation.getPostMutationVersion(maybeDoc);\n var newData = this.patchDocument(maybeDoc);\n return new Document(this.key, version, newData, {\n hasLocalMutations: false\n });\n };\n PatchMutation.prototype.applyToLocalView = function (maybeDoc, baseDoc, localWriteTime) {\n this.verifyKeyMatches(maybeDoc);\n if (!this.precondition.isValidFor(maybeDoc)) {\n return maybeDoc;\n }\n var version = Mutation.getPostMutationVersion(maybeDoc);\n var newData = this.patchDocument(maybeDoc);\n return new Document(this.key, version, newData, {\n hasLocalMutations: true\n });\n };\n PatchMutation.prototype.isEqual = function (other) {\n return (other instanceof PatchMutation &&\n this.key.isEqual(other.key) &&\n this.fieldMask.isEqual(other.fieldMask) &&\n this.precondition.isEqual(other.precondition));\n };\n /**\n * Patches the data of document if available or creates a new document. Note\n * that this does not check whether or not the precondition of this patch\n * holds.\n */\n PatchMutation.prototype.patchDocument = function (maybeDoc) {\n var data;\n if (maybeDoc instanceof Document) {\n data = maybeDoc.data;\n }\n else {\n data = ObjectValue.EMPTY;\n }\n return this.patchObject(data);\n };\n PatchMutation.prototype.patchObject = function (data) {\n for (var _i = 0, _a = this.fieldMask.fields; _i < _a.length; _i++) {\n var fieldPath = _a[_i];\n var newValue = this.data.field(fieldPath);\n if (newValue !== undefined) {\n data = data.set(fieldPath, newValue);\n }\n else {\n data = data.delete(fieldPath);\n }\n }\n return data;\n };\n return PatchMutation;\n}(Mutation));\nexport { PatchMutation };\n/**\n * A mutation that modifies specific fields of the document with transform\n * operations. Currently the only supported transform is a server timestamp, but\n * IP Address, increment(n), etc. could be supported in the future.\n *\n * It is somewhat similar to a PatchMutation in that it patches specific fields\n * and has no effect when applied to a null or NoDocument (see comment on\n * Mutation for rationale).\n */\nvar TransformMutation = /** @class */ (function (_super) {\n __extends(TransformMutation, _super);\n function TransformMutation(key, fieldTransforms) {\n var _this = _super.call(this) || this;\n _this.key = key;\n _this.fieldTransforms = fieldTransforms;\n _this.type = MutationType.Transform;\n // NOTE: We set a precondition of exists: true as a safety-check, since we\n // always combine TransformMutations with a SetMutation or PatchMutation which\n // (if successful) should end up with an existing document.\n _this.precondition = Precondition.exists(true);\n return _this;\n }\n TransformMutation.prototype.applyToRemoteDocument = function (maybeDoc, mutationResult) {\n this.verifyKeyMatches(maybeDoc);\n assert(mutationResult.transformResults != null, 'Transform results missing for TransformMutation.');\n var transformResults = mutationResult.transformResults;\n // TODO(mcg): Relax enforcement of this precondition\n //\n // We shouldn't actually enforce the precondition since it already passed on\n // the backend, but we may not have a local version of the document to\n // patch, so we use the precondition to prevent incorrectly putting a\n // partial document into our cache.\n if (!this.precondition.isValidFor(maybeDoc)) {\n return maybeDoc;\n }\n var doc = this.requireDocument(maybeDoc);\n var newData = this.transformObject(doc.data, transformResults);\n return new Document(this.key, doc.version, newData, {\n hasLocalMutations: false\n });\n };\n TransformMutation.prototype.applyToLocalView = function (maybeDoc, baseDoc, localWriteTime) {\n this.verifyKeyMatches(maybeDoc);\n if (!this.precondition.isValidFor(maybeDoc)) {\n return maybeDoc;\n }\n var doc = this.requireDocument(maybeDoc);\n var transformResults = this.localTransformResults(localWriteTime, baseDoc);\n var newData = this.transformObject(doc.data, transformResults);\n return new Document(this.key, doc.version, newData, {\n hasLocalMutations: true\n });\n };\n TransformMutation.prototype.isEqual = function (other) {\n return (other instanceof TransformMutation &&\n this.key.isEqual(other.key) &&\n misc.arrayEquals(this.fieldTransforms, other.fieldTransforms) &&\n this.precondition.isEqual(other.precondition));\n };\n /**\n * Asserts that the given MaybeDocument is actually a Document and verifies\n * that it matches the key for this mutation. Since we only support\n * transformations with precondition exists this method is guaranteed to be\n * safe.\n */\n TransformMutation.prototype.requireDocument = function (maybeDoc) {\n assert(maybeDoc instanceof Document, 'Unknown MaybeDocument type ' + maybeDoc);\n var doc = maybeDoc;\n assert(doc.key.isEqual(this.key), 'Can only transform a document with the same key');\n return doc;\n };\n /**\n * Creates a list of \"transform results\" (a transform result is a field value\n * representing the result of applying a transform) for use when applying a\n * TransformMutation locally.\n *\n * @param localWriteTime The local time of the transform mutation (used to\n * generate ServerTimestampValues).\n * @param baseDoc The document prior to applying this mutation batch.\n * @return The transform results list.\n */\n TransformMutation.prototype.localTransformResults = function (localWriteTime, baseDoc) {\n var transformResults = [];\n for (var _i = 0, _a = this.fieldTransforms; _i < _a.length; _i++) {\n var fieldTransform = _a[_i];\n var transform = fieldTransform.transform;\n if (transform instanceof ServerTimestampTransform) {\n var previousValue = null;\n if (baseDoc instanceof Document) {\n previousValue = baseDoc.field(fieldTransform.field) || null;\n }\n transformResults.push(new ServerTimestampValue(localWriteTime, previousValue));\n }\n else {\n return fail('Encountered unknown transform: ' + transform);\n }\n }\n return transformResults;\n };\n TransformMutation.prototype.transformObject = function (data, transformResults) {\n assert(transformResults.length === this.fieldTransforms.length, 'TransformResults length mismatch.');\n for (var i = 0; i < this.fieldTransforms.length; i++) {\n var fieldTransform = this.fieldTransforms[i];\n var transform = fieldTransform.transform;\n var fieldPath = fieldTransform.field;\n if (transform instanceof ServerTimestampTransform) {\n data = data.set(fieldPath, transformResults[i]);\n }\n else {\n return fail('Encountered unknown transform: ' + transform);\n }\n }\n return data;\n };\n return TransformMutation;\n}(Mutation));\nexport { TransformMutation };\n/** A mutation that deletes the document at the given key. */\nvar DeleteMutation = /** @class */ (function (_super) {\n __extends(DeleteMutation, _super);\n function DeleteMutation(key, precondition) {\n var _this = _super.call(this) || this;\n _this.key = key;\n _this.precondition = precondition;\n _this.type = MutationType.Delete;\n return _this;\n }\n DeleteMutation.prototype.applyToRemoteDocument = function (maybeDoc, mutationResult) {\n this.verifyKeyMatches(maybeDoc);\n assert(mutationResult.transformResults == null, 'Transform results received by DeleteMutation.');\n // Unlike applyToLocalView, if we're applying a mutation to a remote\n // document the server has accepted the mutation so the precondition must\n // have held.\n return new NoDocument(this.key, SnapshotVersion.MIN);\n };\n DeleteMutation.prototype.applyToLocalView = function (maybeDoc, baseDoc, localWriteTime) {\n this.verifyKeyMatches(maybeDoc);\n if (!this.precondition.isValidFor(maybeDoc)) {\n return maybeDoc;\n }\n if (maybeDoc) {\n assert(maybeDoc.key.isEqual(this.key), 'Can only apply mutation to document with same key');\n }\n return new NoDocument(this.key, SnapshotVersion.forDeletedDoc());\n };\n DeleteMutation.prototype.isEqual = function (other) {\n return (other instanceof DeleteMutation &&\n this.key.isEqual(other.key) &&\n this.precondition.isEqual(other.precondition));\n };\n return DeleteMutation;\n}(Mutation));\nexport { DeleteMutation };\n\n//# sourceMappingURL=mutation.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { fail } from '../util/assert';\nimport { Code } from '../util/error';\nimport * as log from '../util/log';\n/**\n * Error Codes describing the different ways GRPC can fail. These are copied\n * directly from GRPC's sources here:\n *\n * https://github.com/grpc/grpc/blob/bceec94ea4fc5f0085d81235d8e1c06798dc341a/include/grpc%2B%2B/impl/codegen/status_code_enum.h\n *\n * Important! The names of these identifiers matter because the string forms\n * are used for reverse lookups from the webchannel stream. Do NOT change the\n * names of these identifiers.\n */\nvar RpcCode;\n(function (RpcCode) {\n RpcCode[RpcCode[\"OK\"] = 0] = \"OK\";\n RpcCode[RpcCode[\"CANCELLED\"] = 1] = \"CANCELLED\";\n RpcCode[RpcCode[\"UNKNOWN\"] = 2] = \"UNKNOWN\";\n RpcCode[RpcCode[\"INVALID_ARGUMENT\"] = 3] = \"INVALID_ARGUMENT\";\n RpcCode[RpcCode[\"DEADLINE_EXCEEDED\"] = 4] = \"DEADLINE_EXCEEDED\";\n RpcCode[RpcCode[\"NOT_FOUND\"] = 5] = \"NOT_FOUND\";\n RpcCode[RpcCode[\"ALREADY_EXISTS\"] = 6] = \"ALREADY_EXISTS\";\n RpcCode[RpcCode[\"PERMISSION_DENIED\"] = 7] = \"PERMISSION_DENIED\";\n RpcCode[RpcCode[\"UNAUTHENTICATED\"] = 16] = \"UNAUTHENTICATED\";\n RpcCode[RpcCode[\"RESOURCE_EXHAUSTED\"] = 8] = \"RESOURCE_EXHAUSTED\";\n RpcCode[RpcCode[\"FAILED_PRECONDITION\"] = 9] = \"FAILED_PRECONDITION\";\n RpcCode[RpcCode[\"ABORTED\"] = 10] = \"ABORTED\";\n RpcCode[RpcCode[\"OUT_OF_RANGE\"] = 11] = \"OUT_OF_RANGE\";\n RpcCode[RpcCode[\"UNIMPLEMENTED\"] = 12] = \"UNIMPLEMENTED\";\n RpcCode[RpcCode[\"INTERNAL\"] = 13] = \"INTERNAL\";\n RpcCode[RpcCode[\"UNAVAILABLE\"] = 14] = \"UNAVAILABLE\";\n RpcCode[RpcCode[\"DATA_LOSS\"] = 15] = \"DATA_LOSS\";\n})(RpcCode || (RpcCode = {}));\nexport function isPermanentError(code) {\n switch (code) {\n case Code.OK:\n return fail('Treated status OK as error');\n case Code.CANCELLED:\n case Code.UNKNOWN:\n case Code.DEADLINE_EXCEEDED:\n case Code.RESOURCE_EXHAUSTED:\n case Code.INTERNAL:\n case Code.UNAVAILABLE:\n // Unauthenticated means something went wrong with our token and we need\n // to retry with new credentials which will happen automatically.\n // TODO(b/37325376): Give up after second unauthenticated error.\n case Code.UNAUTHENTICATED:\n return false;\n case Code.INVALID_ARGUMENT:\n case Code.NOT_FOUND:\n case Code.ALREADY_EXISTS:\n case Code.PERMISSION_DENIED:\n case Code.FAILED_PRECONDITION:\n // Aborted might be retried in some scenarios, but that is dependant on\n // the context and should handled individually by the calling code.\n // See https://cloud.google.com/apis/design/errors.\n case Code.ABORTED:\n case Code.OUT_OF_RANGE:\n case Code.UNIMPLEMENTED:\n case Code.DATA_LOSS:\n return true;\n default:\n return fail('Unknown status code: ' + code);\n }\n}\n/**\n * Maps an error Code from a GRPC status identifier like 'NOT_FOUND'.\n *\n * @returns The Code equivalent to the given status string or undefined if\n * there is no match.\n */\nexport function mapCodeFromRpcStatus(status) {\n // tslint:disable-next-line:no-any lookup by string\n var code = RpcCode[status];\n if (code === undefined) {\n return undefined;\n }\n return mapCodeFromRpcCode(code);\n}\n/**\n * Maps an error Code from GRPC status code number, like 0, 1, or 14. These\n * are not the same as HTTP status codes.\n *\n * @returns The Code equivalent to the given GRPC status code. Fails if there\n * is no match.\n */\nexport function mapCodeFromRpcCode(code) {\n if (code === undefined) {\n // This shouldn't normally happen, but in certain error cases (like trying\n // to send invalid proto messages) we may get an error with no GRPC code.\n log.error('GRPC error has no .code');\n return Code.UNKNOWN;\n }\n switch (code) {\n case RpcCode.OK:\n return Code.OK;\n case RpcCode.CANCELLED:\n return Code.CANCELLED;\n case RpcCode.UNKNOWN:\n return Code.UNKNOWN;\n case RpcCode.DEADLINE_EXCEEDED:\n return Code.DEADLINE_EXCEEDED;\n case RpcCode.RESOURCE_EXHAUSTED:\n return Code.RESOURCE_EXHAUSTED;\n case RpcCode.INTERNAL:\n return Code.INTERNAL;\n case RpcCode.UNAVAILABLE:\n return Code.UNAVAILABLE;\n case RpcCode.UNAUTHENTICATED:\n return Code.UNAUTHENTICATED;\n case RpcCode.INVALID_ARGUMENT:\n return Code.INVALID_ARGUMENT;\n case RpcCode.NOT_FOUND:\n return Code.NOT_FOUND;\n case RpcCode.ALREADY_EXISTS:\n return Code.ALREADY_EXISTS;\n case RpcCode.PERMISSION_DENIED:\n return Code.PERMISSION_DENIED;\n case RpcCode.FAILED_PRECONDITION:\n return Code.FAILED_PRECONDITION;\n case RpcCode.ABORTED:\n return Code.ABORTED;\n case RpcCode.OUT_OF_RANGE:\n return Code.OUT_OF_RANGE;\n case RpcCode.UNIMPLEMENTED:\n return Code.UNIMPLEMENTED;\n case RpcCode.DATA_LOSS:\n return Code.DATA_LOSS;\n default:\n return fail('Unknown status code: ' + code);\n }\n}\n/**\n * Maps an RPC code from a Code. This is the reverse operation from\n * mapCodeFromRpcCode and should really only be used in tests.\n */\nexport function mapRpcCodeFromCode(code) {\n if (code === undefined) {\n return RpcCode.OK;\n }\n switch (code) {\n case Code.OK:\n return RpcCode.OK;\n case Code.CANCELLED:\n return RpcCode.CANCELLED;\n case Code.UNKNOWN:\n return RpcCode.UNKNOWN;\n case Code.DEADLINE_EXCEEDED:\n return RpcCode.DEADLINE_EXCEEDED;\n case Code.RESOURCE_EXHAUSTED:\n return RpcCode.RESOURCE_EXHAUSTED;\n case Code.INTERNAL:\n return RpcCode.INTERNAL;\n case Code.UNAVAILABLE:\n return RpcCode.UNAVAILABLE;\n case Code.UNAUTHENTICATED:\n return RpcCode.UNAUTHENTICATED;\n case Code.INVALID_ARGUMENT:\n return RpcCode.INVALID_ARGUMENT;\n case Code.NOT_FOUND:\n return RpcCode.NOT_FOUND;\n case Code.ALREADY_EXISTS:\n return RpcCode.ALREADY_EXISTS;\n case Code.PERMISSION_DENIED:\n return RpcCode.PERMISSION_DENIED;\n case Code.FAILED_PRECONDITION:\n return RpcCode.FAILED_PRECONDITION;\n case Code.ABORTED:\n return RpcCode.ABORTED;\n case Code.OUT_OF_RANGE:\n return RpcCode.OUT_OF_RANGE;\n case Code.UNIMPLEMENTED:\n return RpcCode.UNIMPLEMENTED;\n case Code.DATA_LOSS:\n return RpcCode.DATA_LOSS;\n default:\n return fail('Unknown status code: ' + code);\n }\n}\n/**\n * Converts an HTTP Status Code to the equivalent error code.\n *\n * @param status An HTTP Status Code, like 200, 404, 503, etc.\n * @returns The equivalent Code. Unknown status codes are mapped to\n * Code.UNKNOWN.\n */\nexport function mapCodeFromHttpStatus(status) {\n // The canonical error codes for Google APIs [1] specify mapping onto HTTP\n // status codes but the mapping is not bijective. In each case of ambiguity\n // this function chooses a primary error.\n //\n // [1]\n // https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto\n switch (status) {\n case 200:// OK\n return Code.OK;\n case 400:// Bad Request\n return Code.INVALID_ARGUMENT;\n // Other possibilities based on the forward mapping\n // return Code.FAILED_PRECONDITION;\n // return Code.OUT_OF_RANGE;\n case 401:// Unauthorized\n return Code.UNAUTHENTICATED;\n case 403:// Forbidden\n return Code.PERMISSION_DENIED;\n case 404:// Not Found\n return Code.NOT_FOUND;\n case 409:// Conflict\n return Code.ABORTED;\n // Other possibilities:\n // return Code.ALREADY_EXISTS;\n case 416:// Range Not Satisfiable\n return Code.OUT_OF_RANGE;\n case 429:// Too Many Requests\n return Code.RESOURCE_EXHAUSTED;\n case 499:// Client Closed Request\n return Code.CANCELLED;\n case 500:// Internal Server Error\n return Code.UNKNOWN;\n // Other possibilities:\n // return Code.INTERNAL;\n // return Code.DATA_LOSS;\n case 501:// Unimplemented\n return Code.UNIMPLEMENTED;\n case 503:// Service Unavailable\n return Code.UNAVAILABLE;\n case 504:// Gateway Timeout\n return Code.DEADLINE_EXCEEDED;\n default:\n if (status >= 200 && status < 300)\n return Code.OK;\n if (status >= 400 && status < 500)\n return Code.FAILED_PRECONDITION;\n if (status >= 500 && status < 600)\n return Code.INTERNAL;\n return Code.UNKNOWN;\n }\n}\n\n//# sourceMappingURL=rpc_error.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar ExistenceFilter = /** @class */ (function () {\n // TODO(b/33078163): just use simplest form of existence filter for now\n function ExistenceFilter(count) {\n this.count = count;\n }\n ExistenceFilter.prototype.isEqual = function (other) {\n return other && other.count === this.count;\n };\n return ExistenceFilter;\n}());\nexport { ExistenceFilter };\n\n//# sourceMappingURL=existence_filter.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SortedMap } from './sorted_map';\n/**\n * SortedSet is an immutable (copy-on-write) collection that holds elements\n * in order specified by the provided comparator.\n *\n * NOTE: if provided comparator returns 0 for two elements, we consider them to\n * be equal!\n */\nvar SortedSet = /** @class */ (function () {\n function SortedSet(comparator) {\n this.comparator = comparator;\n this.data = new SortedMap(this.comparator);\n }\n /**\n * Creates a SortedSet from the keys of the map.\n * This is currently implemented as an O(n) copy.\n */\n SortedSet.fromMapKeys = function (map) {\n var keys = new SortedSet(map.comparator);\n map.forEach(function (key) {\n keys = keys.add(key);\n });\n return keys;\n };\n SortedSet.prototype.has = function (elem) {\n return this.data.get(elem) !== null;\n };\n SortedSet.prototype.first = function () {\n return this.data.minKey();\n };\n SortedSet.prototype.last = function () {\n return this.data.maxKey();\n };\n Object.defineProperty(SortedSet.prototype, \"size\", {\n get: function () {\n return this.data.size;\n },\n enumerable: true,\n configurable: true\n });\n SortedSet.prototype.indexOf = function (elem) {\n return this.data.indexOf(elem);\n };\n /** Iterates elements in order defined by \"comparator\" */\n SortedSet.prototype.forEach = function (cb) {\n this.data.inorderTraversal(function (k, v) {\n cb(k);\n return false;\n });\n };\n /** Iterates over `elem`s such that: range[0] <= elem < range[1]. */\n SortedSet.prototype.forEachInRange = function (range, cb) {\n var iter = this.data.getIteratorFrom(range[0]);\n while (iter.hasNext()) {\n var elem = iter.getNext();\n if (this.comparator(elem.key, range[1]) >= 0)\n return;\n cb(elem.key);\n }\n };\n /**\n * Iterates over `elem`s such that: start <= elem until false is returned.\n */\n SortedSet.prototype.forEachWhile = function (cb, start) {\n var iter;\n if (start !== undefined) {\n iter = this.data.getIteratorFrom(start);\n }\n else {\n iter = this.data.getIterator();\n }\n while (iter.hasNext()) {\n var elem = iter.getNext();\n var result = cb(elem.key);\n if (!result)\n return;\n }\n };\n /** Finds the least element greater than or equal to `elem`. */\n SortedSet.prototype.firstAfterOrEqual = function (elem) {\n var iter = this.data.getIteratorFrom(elem);\n return iter.hasNext() ? iter.getNext().key : null;\n };\n /** Inserts or updates an element */\n SortedSet.prototype.add = function (elem) {\n return this.copy(this.data.remove(elem).insert(elem, true));\n };\n /** Deletes an element */\n SortedSet.prototype.delete = function (elem) {\n if (!this.has(elem))\n return this;\n return this.copy(this.data.remove(elem));\n };\n SortedSet.prototype.isEmpty = function () {\n return this.data.isEmpty();\n };\n SortedSet.prototype.unionWith = function (other) {\n var result = this;\n other.forEach(function (elem) {\n result = result.add(elem);\n });\n return result;\n };\n SortedSet.prototype.isEqual = function (other) {\n if (!(other instanceof SortedSet))\n return false;\n if (this.size !== other.size)\n return false;\n var thisIt = this.data.getIterator();\n var otherIt = other.data.getIterator();\n while (thisIt.hasNext()) {\n var thisElem = thisIt.getNext().key;\n var otherElem = otherIt.getNext().key;\n if (this.comparator(thisElem, otherElem) !== 0)\n return false;\n }\n return true;\n };\n SortedSet.prototype.toString = function () {\n var result = [];\n this.forEach(function (elem) { return result.push(elem); });\n return 'SortedSet(' + result.toString() + ')';\n };\n SortedSet.prototype.copy = function (data) {\n var result = new SortedSet(this.comparator);\n result.data = data;\n return result;\n };\n return SortedSet;\n}());\nexport { SortedSet };\n\n//# sourceMappingURL=sorted_set.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SortedMap } from '../util/sorted_map';\nimport { SortedSet } from '../util/sorted_set';\nimport { DocumentKey } from './document_key';\nvar EMPTY_MAYBE_DOCUMENT_MAP = new SortedMap(DocumentKey.comparator);\nexport function maybeDocumentMap() {\n return EMPTY_MAYBE_DOCUMENT_MAP;\n}\nvar EMPTY_DOCUMENT_MAP = new SortedMap(DocumentKey.comparator);\nexport function documentMap() {\n return EMPTY_DOCUMENT_MAP;\n}\nvar EMPTY_DOCUMENT_VERSION_MAP = new SortedMap(DocumentKey.comparator);\nexport function documentVersionMap() {\n return EMPTY_DOCUMENT_VERSION_MAP;\n}\nvar EMPTY_DOCUMENT_KEY_SET = new SortedSet(DocumentKey.comparator);\nexport function documentKeySet() {\n return EMPTY_DOCUMENT_KEY_SET;\n}\n\n//# sourceMappingURL=collections.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SnapshotVersion } from '../core/snapshot_version';\nimport { documentKeySet } from '../model/collections';\nimport { emptyByteString } from '../platform/platform';\n/**\n * An event from the RemoteStore. It is split into targetChanges (changes to the\n * state or the set of documents in our watched targets) and documentUpdates\n * (changes to the actual documents).\n */\nvar RemoteEvent = /** @class */ (function () {\n function RemoteEvent(\n /**\n * The snapshot version this event brings us up to, or MIN if not set.\n */\n snapshotVersion, \n /**\n * A map from target to changes to the target. See TargetChange.\n */\n targetChanges, \n /**\n * A set of which documents have changed or been deleted, along with the\n * doc's new values (if not deleted).\n */\n documentUpdates) {\n this.snapshotVersion = snapshotVersion;\n this.targetChanges = targetChanges;\n this.documentUpdates = documentUpdates;\n }\n RemoteEvent.prototype.addDocumentUpdate = function (doc) {\n this.documentUpdates = this.documentUpdates.insert(doc.key, doc);\n };\n RemoteEvent.prototype.handleExistenceFilterMismatch = function (targetId) {\n /*\n * An existence filter mismatch will reset the query and we need to reset\n * the mapping to contain no documents and an empty resume token.\n *\n * Note:\n * * The reset mapping is empty, specifically forcing the consumer of the\n * change to forget all keys for this targetID;\n * * The resume snapshot for this target must be reset\n * * The target must be unacked because unwatching and rewatching\n * introduces a race for changes.\n */\n this.targetChanges[targetId] = {\n mapping: new ResetMapping(),\n snapshotVersion: SnapshotVersion.MIN,\n currentStatusUpdate: CurrentStatusUpdate.MarkNotCurrent,\n resumeToken: emptyByteString()\n };\n };\n return RemoteEvent;\n}());\nexport { RemoteEvent };\n/**\n * Represents an update to the current status of a target, either explicitly\n * having no new state, or the new value to set. Note \"current\" has special\n * meaning for in the RPC protocol that implies that a target is both up-to-date\n * and consistent with the rest of the watch stream.\n */\nexport var CurrentStatusUpdate;\n(function (CurrentStatusUpdate) {\n /** The current status is not affected and should not be modified. */\n CurrentStatusUpdate[CurrentStatusUpdate[\"None\"] = 0] = \"None\";\n /** The target must be marked as no longer \"current\". */\n CurrentStatusUpdate[CurrentStatusUpdate[\"MarkNotCurrent\"] = 1] = \"MarkNotCurrent\";\n /** The target must be marked as \"current\". */\n CurrentStatusUpdate[CurrentStatusUpdate[\"MarkCurrent\"] = 2] = \"MarkCurrent\";\n})(CurrentStatusUpdate || (CurrentStatusUpdate = {}));\nvar EMPTY_KEY_SET = documentKeySet();\nvar ResetMapping = /** @class */ (function () {\n function ResetMapping() {\n this.docs = EMPTY_KEY_SET;\n }\n Object.defineProperty(ResetMapping.prototype, \"documents\", {\n get: function () {\n return this.docs;\n },\n enumerable: true,\n configurable: true\n });\n ResetMapping.prototype.add = function (key) {\n this.docs = this.docs.add(key);\n };\n ResetMapping.prototype.delete = function (key) {\n this.docs = this.docs.delete(key);\n };\n ResetMapping.prototype.isEqual = function (other) {\n return other !== null && this.docs.isEqual(other.docs);\n };\n return ResetMapping;\n}());\nexport { ResetMapping };\nvar UpdateMapping = /** @class */ (function () {\n function UpdateMapping() {\n this.addedDocuments = EMPTY_KEY_SET;\n this.removedDocuments = EMPTY_KEY_SET;\n }\n UpdateMapping.prototype.applyToKeySet = function (keys) {\n var result = keys;\n this.addedDocuments.forEach(function (key) { return (result = result.add(key)); });\n this.removedDocuments.forEach(function (key) { return (result = result.delete(key)); });\n return result;\n };\n UpdateMapping.prototype.add = function (key) {\n this.addedDocuments = this.addedDocuments.add(key);\n this.removedDocuments = this.removedDocuments.delete(key);\n };\n UpdateMapping.prototype.delete = function (key) {\n this.addedDocuments = this.addedDocuments.delete(key);\n this.removedDocuments = this.removedDocuments.add(key);\n };\n UpdateMapping.prototype.isEqual = function (other) {\n return (other !== null &&\n this.addedDocuments.isEqual(other.addedDocuments) &&\n this.removedDocuments.isEqual(other.removedDocuments));\n };\n return UpdateMapping;\n}());\nexport { UpdateMapping };\n\n//# sourceMappingURL=remote_event.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { maybeDocumentMap } from '../model/collections';\nimport { emptyByteString } from '../platform/platform';\nimport { assert, fail } from '../util/assert';\nimport * as objUtils from '../util/obj';\nimport { CurrentStatusUpdate, RemoteEvent, ResetMapping, UpdateMapping } from './remote_event';\n/**\n * Represents a changed document and a list of target ids to which this change\n * applies.\n *\n * If document has been deleted NoDocument will be provided.\n */\nvar DocumentWatchChange = /** @class */ (function () {\n function DocumentWatchChange(\n /** The new document applies to all of these targets. */\n updatedTargetIds, \n /** The new document is removed from all of these targets. */\n removedTargetIds, \n /** The key of the document for this change. */\n key, \n /**\n * The new document or NoDocument if it was deleted. Is null if the\n * document went out of view without the server sending a new document.\n */\n newDoc) {\n this.updatedTargetIds = updatedTargetIds;\n this.removedTargetIds = removedTargetIds;\n this.key = key;\n this.newDoc = newDoc;\n }\n return DocumentWatchChange;\n}());\nexport { DocumentWatchChange };\nvar ExistenceFilterChange = /** @class */ (function () {\n function ExistenceFilterChange(targetId, existenceFilter) {\n this.targetId = targetId;\n this.existenceFilter = existenceFilter;\n }\n return ExistenceFilterChange;\n}());\nexport { ExistenceFilterChange };\nexport var WatchTargetChangeState;\n(function (WatchTargetChangeState) {\n WatchTargetChangeState[WatchTargetChangeState[\"NoChange\"] = 0] = \"NoChange\";\n WatchTargetChangeState[WatchTargetChangeState[\"Added\"] = 1] = \"Added\";\n WatchTargetChangeState[WatchTargetChangeState[\"Removed\"] = 2] = \"Removed\";\n WatchTargetChangeState[WatchTargetChangeState[\"Current\"] = 3] = \"Current\";\n WatchTargetChangeState[WatchTargetChangeState[\"Reset\"] = 4] = \"Reset\";\n})(WatchTargetChangeState || (WatchTargetChangeState = {}));\nvar WatchTargetChange = /** @class */ (function () {\n function WatchTargetChange(\n /** What kind of change occurred to the watch target. */\n state, \n /** The target IDs that were added/removed/set. */\n targetIds, \n /**\n * An opaque, server-assigned token that allows watching a query to be\n * resumed after disconnecting without retransmitting all the data that\n * matches the query. The resume token essentially identifies a point in\n * time from which the server should resume sending results.\n */\n resumeToken, \n /** An RPC error indicating why the watch failed. */\n cause) {\n if (resumeToken === void 0) { resumeToken = emptyByteString(); }\n if (cause === void 0) { cause = null; }\n this.state = state;\n this.targetIds = targetIds;\n this.resumeToken = resumeToken;\n this.cause = cause;\n }\n return WatchTargetChange;\n}());\nexport { WatchTargetChange };\n/**\n * A helper class to accumulate watch changes into a RemoteEvent and other\n * target information.\n */\nvar WatchChangeAggregator = /** @class */ (function () {\n function WatchChangeAggregator(snapshotVersion, listenTargets, pendingTargetResponses) {\n this.snapshotVersion = snapshotVersion;\n this.listenTargets = listenTargets;\n /** The existence filter - if any - for the given target IDs. */\n this.existenceFilters = {};\n /** Keeps track of the current target mappings */\n this.targetChanges = {};\n /** Keeps track of document to update */\n this.documentUpdates = maybeDocumentMap();\n /** Whether this aggregator was frozen and can no longer be modified */\n this.frozen = false;\n this.pendingTargetResponses = objUtils.shallowCopy(pendingTargetResponses);\n }\n /** Aggregates a watch change into the current state */\n WatchChangeAggregator.prototype.add = function (watchChange) {\n assert(!this.frozen, 'Trying to modify frozen WatchChangeAggregator.');\n if (watchChange instanceof DocumentWatchChange) {\n this.addDocumentChange(watchChange);\n }\n else if (watchChange instanceof WatchTargetChange) {\n this.addTargetChange(watchChange);\n }\n else if (watchChange instanceof ExistenceFilterChange) {\n this.addExistenceFilterChange(watchChange);\n }\n else {\n fail('Unknown watch change: ' + watchChange);\n }\n };\n /** Aggregates all provided watch changes to the current state in order */\n WatchChangeAggregator.prototype.addChanges = function (watchChanges) {\n var _this = this;\n assert(!this.frozen, 'Trying to modify frozen WatchChangeAggregator.');\n watchChanges.forEach(function (change) { return _this.add(change); });\n };\n /**\n * Converts the current state into a remote event with the snapshot version\n * provided via the constructor.\n */\n WatchChangeAggregator.prototype.createRemoteEvent = function () {\n var _this = this;\n var targetChanges = this.targetChanges;\n // Remove all the non-active targets from the remote event.\n objUtils.forEachNumber(this.targetChanges, function (targetId) {\n if (!_this.isActiveTarget(targetId)) {\n delete targetChanges[targetId];\n }\n });\n // Mark this aggregator as frozen so no further modifications are made\n this.frozen = true;\n return new RemoteEvent(this.snapshotVersion, targetChanges, this.documentUpdates);\n };\n WatchChangeAggregator.prototype.ensureTargetChange = function (targetId) {\n var change = this.targetChanges[targetId];\n if (!change) {\n // Create an UpdateMapping by default, since resets are always explicit.\n change = {\n currentStatusUpdate: CurrentStatusUpdate.None,\n snapshotVersion: this.snapshotVersion,\n mapping: new UpdateMapping(),\n resumeToken: emptyByteString()\n };\n this.targetChanges[targetId] = change;\n }\n return change;\n };\n /**\n * We need to wait for watch to ack targets before we process those events,\n * so to know if a target is active, there must be no pending acks we're\n * waiting for and it must be in the current list of targets that the client\n * cares about.\n *\n * This method is visible for testing.\n */\n WatchChangeAggregator.prototype.isActiveTarget = function (targetId) {\n return (!objUtils.contains(this.pendingTargetResponses, targetId) &&\n objUtils.contains(this.listenTargets, targetId));\n };\n WatchChangeAggregator.prototype.addDocumentChange = function (docChange) {\n var relevant = false;\n for (var _i = 0, _a = docChange.updatedTargetIds; _i < _a.length; _i++) {\n var targetId = _a[_i];\n if (this.isActiveTarget(targetId)) {\n var change = this.ensureTargetChange(targetId);\n change.mapping.add(docChange.key);\n relevant = true;\n }\n }\n for (var _b = 0, _c = docChange.removedTargetIds; _b < _c.length; _b++) {\n var targetId = _c[_b];\n if (this.isActiveTarget(targetId)) {\n var change = this.ensureTargetChange(targetId);\n change.mapping.delete(docChange.key);\n relevant = true;\n }\n }\n // Only update the document if there is a new document to replace to an\n // active target that is being listened to, this might be just a target\n // update instead.\n if (docChange.newDoc && relevant) {\n this.documentUpdates = this.documentUpdates.insert(docChange.key, docChange.newDoc);\n }\n };\n WatchChangeAggregator.prototype.addTargetChange = function (targetChange) {\n var _this = this;\n targetChange.targetIds.forEach(function (targetId) {\n var change = _this.ensureTargetChange(targetId);\n switch (targetChange.state) {\n case WatchTargetChangeState.NoChange:\n if (_this.isActiveTarget(targetId)) {\n // Creating the change above satisfies the semantics of no-change.\n applyResumeToken(change, targetChange.resumeToken);\n }\n break;\n case WatchTargetChangeState.Added:\n // We need to decrement the number of pending acks needed from watch\n // for this targetId.\n _this.recordTargetResponse(targetId);\n if (!objUtils.contains(_this.pendingTargetResponses, targetId)) {\n // We have a freshly added target, so we need to reset any state\n // that we had previously This can happen e.g. when remove and add\n // back a target for existence filter mismatches.\n change.mapping = new UpdateMapping();\n change.currentStatusUpdate = CurrentStatusUpdate.None;\n delete _this.existenceFilters[targetId];\n }\n applyResumeToken(change, targetChange.resumeToken);\n break;\n case WatchTargetChangeState.Removed:\n // We need to keep track of removed targets to we can\n // post-filter and remove any target changes.\n // We need to decrement the number of pending acks needed from watch\n // for this targetId.\n _this.recordTargetResponse(targetId);\n assert(!targetChange.cause, 'WatchChangeAggregator does not handle errored targets');\n break;\n case WatchTargetChangeState.Current:\n if (_this.isActiveTarget(targetId)) {\n change.currentStatusUpdate = CurrentStatusUpdate.MarkCurrent;\n applyResumeToken(change, targetChange.resumeToken);\n }\n break;\n case WatchTargetChangeState.Reset:\n if (_this.isActiveTarget(targetId)) {\n // Overwrite any existing target mapping with a reset\n // mapping. Every subsequent update will modify the reset\n // mapping, not an update mapping.\n change.mapping = new ResetMapping();\n applyResumeToken(change, targetChange.resumeToken);\n }\n break;\n default:\n fail('Unknown target watch change state: ' + targetChange.state);\n }\n });\n };\n /**\n * Record that we get a watch target add/remove by decrementing the number of\n * pending target responses that we have.\n */\n WatchChangeAggregator.prototype.recordTargetResponse = function (targetId) {\n var newCount = (this.pendingTargetResponses[targetId] || 0) - 1;\n if (newCount === 0) {\n delete this.pendingTargetResponses[targetId];\n }\n else {\n this.pendingTargetResponses[targetId] = newCount;\n }\n };\n WatchChangeAggregator.prototype.addExistenceFilterChange = function (change) {\n if (this.isActiveTarget(change.targetId)) {\n this.existenceFilters[change.targetId] = change.existenceFilter;\n }\n };\n return WatchChangeAggregator;\n}());\nexport { WatchChangeAggregator };\n/**\n * Applies the resume token to the TargetChange, but only when it has a new\n * value. null and empty resumeTokens are discarded.\n */\nfunction applyResumeToken(change, resumeToken) {\n if (resumeToken.length > 0) {\n change.resumeToken = resumeToken;\n }\n}\n\n//# sourceMappingURL=watch_change.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Blob } from '../api/blob';\nimport { GeoPoint } from '../api/geo_point';\nimport { DatabaseId } from '../core/database_info';\nimport { Bound, Direction, NanFilter, NullFilter, OrderBy, Query, RelationFilter, RelationOp } from '../core/query';\nimport { SnapshotVersion } from '../core/snapshot_version';\nimport { Timestamp } from '../core/timestamp';\nimport { QueryPurpose } from '../local/query_data';\nimport { Document, NoDocument } from '../model/document';\nimport { DocumentKey } from '../model/document_key';\nimport * as fieldValue from '../model/field_value';\nimport { DeleteMutation, FieldMask, FieldTransform, MutationResult, PatchMutation, Precondition, ServerTimestampTransform, SetMutation, TransformMutation } from '../model/mutation';\nimport { FieldPath, ResourcePath } from '../model/path';\nimport { assert, fail } from '../util/assert';\nimport { Code, FirestoreError } from '../util/error';\nimport * as obj from '../util/obj';\nimport * as typeUtils from '../util/types';\nimport { ExistenceFilter } from './existence_filter';\nimport { mapCodeFromRpcCode, mapRpcCodeFromCode } from './rpc_error';\nimport { DocumentWatchChange, ExistenceFilterChange, WatchTargetChange, WatchTargetChangeState } from './watch_change';\nvar DIRECTIONS = (function () {\n var dirs = {};\n dirs[Direction.ASCENDING.name] = 'ASCENDING';\n dirs[Direction.DESCENDING.name] = 'DESCENDING';\n return dirs;\n})();\nvar OPERATORS = (function () {\n var ops = {};\n ops[RelationOp.LESS_THAN.name] = 'LESS_THAN';\n ops[RelationOp.LESS_THAN_OR_EQUAL.name] = 'LESS_THAN_OR_EQUAL';\n ops[RelationOp.GREATER_THAN.name] = 'GREATER_THAN';\n ops[RelationOp.GREATER_THAN_OR_EQUAL.name] = 'GREATER_THAN_OR_EQUAL';\n ops[RelationOp.EQUAL.name] = 'EQUAL';\n return ops;\n})();\nfunction assertPresent(value, description) {\n assert(!typeUtils.isNullOrUndefined(value), description + ' is missing');\n}\nfunction parseInt64(value) {\n // TODO(bjornick): Handle int64 greater than 53 bits.\n if (typeof value === 'number') {\n return value;\n }\n else if (typeof value === 'string') {\n return Number(value);\n }\n else {\n return fail(\"can't parse \" + value);\n }\n}\n/**\n * Generates JsonObject values for the Datastore API suitable for sending to\n * either GRPC stub methods or via the JSON/HTTP REST API.\n * TODO(klimt): We can remove the databaseId argument if we keep the full\n * resource name in documents.\n */\nvar JsonProtoSerializer = /** @class */ (function () {\n function JsonProtoSerializer(databaseId, options) {\n this.databaseId = databaseId;\n this.options = options;\n }\n JsonProtoSerializer.prototype.emptyByteString = function () {\n if (this.options.useProto3Json) {\n return '';\n }\n else {\n return new Uint8Array(0);\n }\n };\n JsonProtoSerializer.prototype.unsafeCastProtoByteString = function (byteString) {\n // byteStrings can be either string or UInt8Array, but the typings say\n // it's always a string. Cast as string to avoid type check failing\n return byteString;\n };\n JsonProtoSerializer.prototype.fromRpcStatus = function (status) {\n var code = status.code === undefined\n ? Code.UNKNOWN\n : mapCodeFromRpcCode(status.code);\n return new FirestoreError(code, status.message || '');\n };\n /**\n * Returns a value for a number (or undefined) that's appropriate to put into\n * a google.protobuf.Int32Value proto.\n * DO NOT USE THIS FOR ANYTHING ELSE.\n * This method cheats. It's typed as returning \"number\" because that's what\n * our generated proto interfaces say Int32Value must be. But GRPC actually\n * expects a { value: } struct.\n */\n JsonProtoSerializer.prototype.toInt32Value = function (val) {\n if (!typeUtils.isNullOrUndefined(val)) {\n // tslint:disable-next-line:no-any We need to match generated Proto types.\n return { value: val };\n }\n else {\n return undefined;\n }\n };\n /**\n * Returns a number (or null) from a google.protobuf.Int32Value proto.\n * DO NOT USE THIS FOR ANYTHING ELSE.\n * This method cheats. It's typed as accepting \"number\" because that's what\n * our generated proto interfaces say Int32Value must be, but it actually\n * accepts { value: number } to match our serialization in toInt32Value().\n */\n JsonProtoSerializer.prototype.fromInt32Value = function (val) {\n var result;\n if (typeof val === 'object') {\n // tslint:disable-next-line:no-any We need to match generated Proto types.\n result = val.value;\n }\n else {\n // We accept raw numbers (without the {value: ... } wrapper) for\n // compatibility with legacy persisted data.\n result = val;\n }\n return typeUtils.isNullOrUndefined(result) ? null : result;\n };\n /**\n * Returns a value for a Date that's appropriate to put into a proto.\n * DO NOT USE THIS FOR ANYTHING ELSE.\n * This method cheats. It's typed as returning \"string\" because that's what\n * our generated proto interfaces say dates must be. But it's easier and safer\n * to actually return a Timestamp proto.\n */\n JsonProtoSerializer.prototype.toTimestamp = function (timestamp) {\n return {\n seconds: timestamp.seconds,\n nanos: timestamp.nanos\n // tslint:disable-next-line:no-any\n };\n };\n JsonProtoSerializer.prototype.fromTimestamp = function (date) {\n // The json interface (for the browser) will return an iso timestamp string,\n // while the proto js library (for node) will return a\n // google.protobuf.Timestamp instance.\n if (typeof date === 'string') {\n // TODO(b/37282237): Use strings for Proto3 timestamps\n // assert(this.options.useProto3Json,\n // 'The timestamp string format requires Proto3.');\n return Timestamp.fromISOString(date);\n }\n else {\n assert(!!date, 'Cannot deserialize null or undefined timestamp.');\n // TODO(b/37282237): Use strings for Proto3 timestamps\n // assert(!this.options.useProto3Json,\n // 'The timestamp instance format requires Proto JS.');\n var seconds = parseInt64(date.seconds || '0');\n var nanos = date.nanos || 0;\n return new Timestamp(seconds, nanos);\n }\n };\n /**\n * Returns a value for bytes that's appropriate to put in a proto.\n * DO NOT USE THIS FOR ANYTHING ELSE.\n * This method cheats. It's typed as returning \"string\" because that's what\n * our generated proto interfaces say bytes must be. But it should return\n * an Uint8Array in Node.\n */\n JsonProtoSerializer.prototype.toBytes = function (bytes) {\n if (this.options.useProto3Json) {\n return bytes.toBase64();\n }\n else {\n // The typings say it's a string, but it needs to be a Uint8Array in Node.\n return this.unsafeCastProtoByteString(bytes.toUint8Array());\n }\n };\n /**\n * Parse the blob from the protos into the internal Blob class. Note that the\n * typings assume all blobs are strings, but they are actually Uint8Arrays\n * on Node.\n */\n JsonProtoSerializer.prototype.fromBlob = function (blob) {\n if (typeof blob === 'string') {\n assert(this.options.useProto3Json, 'Expected bytes to be passed in as Uint8Array, but got a string instead.');\n return Blob.fromBase64String(blob);\n }\n else {\n assert(!this.options.useProto3Json, 'Expected bytes to be passed in as string, but got something else instead.');\n return Blob.fromUint8Array(blob);\n }\n };\n JsonProtoSerializer.prototype.toVersion = function (version) {\n return this.toTimestamp(version.toTimestamp());\n };\n JsonProtoSerializer.prototype.fromVersion = function (version) {\n assert(!!version, \"Trying to deserialize version that isn't set\");\n return SnapshotVersion.fromTimestamp(this.fromTimestamp(version));\n };\n JsonProtoSerializer.prototype.toResourceName = function (databaseId, path) {\n return this.fullyQualifiedPrefixPath(databaseId)\n .child('documents')\n .child(path)\n .canonicalString();\n };\n JsonProtoSerializer.prototype.fromResourceName = function (name) {\n var resource = ResourcePath.fromString(name);\n assert(this.isValidResourceName(resource), 'Tried to deserialize invalid key ' + resource.toString());\n return resource;\n };\n JsonProtoSerializer.prototype.toName = function (key) {\n return this.toResourceName(this.databaseId, key.path);\n };\n JsonProtoSerializer.prototype.fromName = function (name) {\n var resource = this.fromResourceName(name);\n assert(resource.get(1) === this.databaseId.projectId, 'Tried to deserialize key from different project: ' +\n resource.get(1) +\n ' vs ' +\n this.databaseId.projectId);\n assert((!resource.get(3) && !this.databaseId.database) ||\n resource.get(3) === this.databaseId.database, 'Tried to deserialize key from different database: ' +\n resource.get(3) +\n ' vs ' +\n this.databaseId.database);\n return new DocumentKey(this.extractLocalPathFromResourceName(resource));\n };\n JsonProtoSerializer.prototype.toQueryPath = function (path) {\n if (path.length === 0) {\n // If the path is empty, the backend requires we leave off the /documents\n // at the end.\n return this.encodedDatabaseId;\n }\n return this.toResourceName(this.databaseId, path);\n };\n JsonProtoSerializer.prototype.fromQueryPath = function (name) {\n var resourceName = this.fromResourceName(name);\n if (resourceName.length === 4) {\n return ResourcePath.EMPTY_PATH;\n }\n return this.extractLocalPathFromResourceName(resourceName);\n };\n Object.defineProperty(JsonProtoSerializer.prototype, \"encodedDatabaseId\", {\n get: function () {\n var path = new ResourcePath([\n 'projects',\n this.databaseId.projectId,\n 'databases',\n this.databaseId.database\n ]);\n return path.canonicalString();\n },\n enumerable: true,\n configurable: true\n });\n JsonProtoSerializer.prototype.fullyQualifiedPrefixPath = function (databaseId) {\n return new ResourcePath([\n 'projects',\n databaseId.projectId,\n 'databases',\n databaseId.database\n ]);\n };\n JsonProtoSerializer.prototype.extractLocalPathFromResourceName = function (resourceName) {\n assert(resourceName.length > 4 && resourceName.get(4) === 'documents', 'tried to deserialize invalid key ' + resourceName.toString());\n return resourceName.popFirst(5);\n };\n JsonProtoSerializer.prototype.isValidResourceName = function (path) {\n // Resource names have at least 4 components (project ID, database ID)\n return (path.length >= 4 &&\n path.get(0) === 'projects' &&\n path.get(2) === 'databases');\n };\n JsonProtoSerializer.prototype.toValue = function (val) {\n if (val instanceof fieldValue.NullValue) {\n return { nullValue: 'NULL_VALUE' };\n }\n else if (val instanceof fieldValue.BooleanValue) {\n return { booleanValue: val.value() };\n }\n else if (val instanceof fieldValue.IntegerValue) {\n return { integerValue: '' + val.value() };\n }\n else if (val instanceof fieldValue.DoubleValue) {\n var doubleValue = val.value();\n if (this.options.useProto3Json) {\n // Proto 3 let's us encode NaN and Infinity as string values as\n // expected by the backend. This is currently not checked by our unit\n // tests because they rely on protobuf.js.\n if (isNaN(doubleValue)) {\n return { doubleValue: 'NaN' };\n }\n else if (doubleValue === Infinity) {\n return { doubleValue: 'Infinity' };\n }\n else if (doubleValue === -Infinity) {\n return { doubleValue: '-Infinity' };\n }\n }\n return { doubleValue: val.value() };\n }\n else if (val instanceof fieldValue.StringValue) {\n return { stringValue: val.value() };\n }\n else if (val instanceof fieldValue.ObjectValue) {\n return { mapValue: this.toMapValue(val) };\n }\n else if (val instanceof fieldValue.ArrayValue) {\n return { arrayValue: this.toArrayValue(val) };\n }\n else if (val instanceof fieldValue.TimestampValue) {\n return {\n timestampValue: this.toTimestamp(val.internalValue)\n };\n }\n else if (val instanceof fieldValue.GeoPointValue) {\n return {\n geoPointValue: {\n latitude: val.value().latitude,\n longitude: val.value().longitude\n }\n };\n }\n else if (val instanceof fieldValue.BlobValue) {\n return {\n bytesValue: this.toBytes(val.value())\n };\n }\n else if (val instanceof fieldValue.RefValue) {\n return {\n referenceValue: this.toResourceName(val.databaseId, val.key.path)\n };\n }\n else {\n return fail('Unknown FieldValue ' + JSON.stringify(val));\n }\n };\n JsonProtoSerializer.prototype.fromValue = function (obj) {\n var _this = this;\n // tslint:disable-next-line:no-any\n var type = obj['value_type'];\n if (hasTag(obj, type, 'nullValue')) {\n return fieldValue.NullValue.INSTANCE;\n }\n else if (hasTag(obj, type, 'booleanValue')) {\n return fieldValue.BooleanValue.of(obj.booleanValue);\n }\n else if (hasTag(obj, type, 'integerValue')) {\n return new fieldValue.IntegerValue(parseInt64(obj.integerValue));\n }\n else if (hasTag(obj, type, 'doubleValue')) {\n if (this.options.useProto3Json) {\n // Proto 3 uses the string values 'NaN' and 'Infinity'.\n if (obj.doubleValue === 'NaN') {\n return fieldValue.DoubleValue.NAN;\n }\n else if (obj.doubleValue === 'Infinity') {\n return fieldValue.DoubleValue.POSITIVE_INFINITY;\n }\n else if (obj.doubleValue === '-Infinity') {\n return fieldValue.DoubleValue.NEGATIVE_INFINITY;\n }\n }\n return new fieldValue.DoubleValue(obj.doubleValue);\n }\n else if (hasTag(obj, type, 'stringValue')) {\n return new fieldValue.StringValue(obj.stringValue);\n }\n else if (hasTag(obj, type, 'mapValue')) {\n return this.fromFields(obj.mapValue.fields || {});\n }\n else if (hasTag(obj, type, 'arrayValue')) {\n // \"values\" is not present if the array is empty\n assertPresent(obj.arrayValue, 'arrayValue');\n var values = obj.arrayValue.values || [];\n return new fieldValue.ArrayValue(values.map(function (v) { return _this.fromValue(v); }));\n }\n else if (hasTag(obj, type, 'timestampValue')) {\n assertPresent(obj.timestampValue, 'timestampValue');\n return new fieldValue.TimestampValue(this.fromTimestamp(obj.timestampValue));\n }\n else if (hasTag(obj, type, 'geoPointValue')) {\n assertPresent(obj.geoPointValue, 'geoPointValue');\n var latitude = obj.geoPointValue.latitude || 0;\n var longitude = obj.geoPointValue.longitude || 0;\n return new fieldValue.GeoPointValue(new GeoPoint(latitude, longitude));\n }\n else if (hasTag(obj, type, 'bytesValue')) {\n assertPresent(obj.bytesValue, 'bytesValue');\n var blob = this.fromBlob(obj.bytesValue);\n return new fieldValue.BlobValue(blob);\n }\n else if (hasTag(obj, type, 'referenceValue')) {\n assertPresent(obj.referenceValue, 'referenceValue');\n var resourceName = this.fromResourceName(obj.referenceValue);\n var dbId = new DatabaseId(resourceName.get(1), resourceName.get(3));\n var key = new DocumentKey(this.extractLocalPathFromResourceName(resourceName));\n return new fieldValue.RefValue(dbId, key);\n }\n else {\n return fail('Unknown Value proto ' + JSON.stringify(obj));\n }\n };\n /** Creates an api.Document from key and fields (but no create/update time) */\n JsonProtoSerializer.prototype.toMutationDocument = function (key, fields) {\n return {\n name: this.toName(key),\n fields: this.toFields(fields)\n };\n };\n JsonProtoSerializer.prototype.toDocument = function (document) {\n assert(!document.hasLocalMutations, \"Can't serialize documents with mutations.\");\n return {\n name: this.toName(document.key),\n fields: this.toFields(document.data),\n updateTime: this.toTimestamp(document.version.toTimestamp())\n };\n };\n JsonProtoSerializer.prototype.fromDocument = function (document) {\n return new Document(this.fromName(document.name), this.fromVersion(document.updateTime), this.fromFields(document.fields || {}), { hasLocalMutations: false });\n };\n JsonProtoSerializer.prototype.toFields = function (fields) {\n var _this = this;\n var result = {};\n fields.forEach(function (key, value) {\n result[key] = _this.toValue(value);\n });\n return result;\n };\n JsonProtoSerializer.prototype.fromFields = function (object) {\n var _this = this;\n // Proto map gets mapped to Object, so cast it.\n var map = object;\n var result = fieldValue.ObjectValue.EMPTY;\n obj.forEach(map, function (key, value) {\n result = result.set(new FieldPath([key]), _this.fromValue(value));\n });\n return result;\n };\n JsonProtoSerializer.prototype.toMapValue = function (map) {\n return {\n fields: this.toFields(map)\n };\n };\n JsonProtoSerializer.prototype.toArrayValue = function (array) {\n var _this = this;\n var result = [];\n array.forEach(function (value) {\n result.push(_this.toValue(value));\n });\n return { values: result };\n };\n JsonProtoSerializer.prototype.fromFound = function (doc) {\n assert(!!doc.found, 'Tried to deserialize a found document from a missing document.');\n assertPresent(doc.found.name, 'doc.found.name');\n assertPresent(doc.found.updateTime, 'doc.found.updateTime');\n var key = this.fromName(doc.found.name);\n var version = this.fromVersion(doc.found.updateTime);\n var fields = this.fromFields(doc.found.fields || {});\n return new Document(key, version, fields, { hasLocalMutations: false });\n };\n JsonProtoSerializer.prototype.fromMissing = function (result) {\n assert(!!result.missing, 'Tried to deserialize a missing document from a found document.');\n assert(!!result.readTime, 'Tried to deserialize a missing document without a read time.');\n var key = this.fromName(result.missing);\n var version = this.fromVersion(result.readTime);\n return new NoDocument(key, version);\n };\n JsonProtoSerializer.prototype.fromMaybeDocument = function (result) {\n // tslint:disable-next-line:no-any\n var type = result['result'];\n if (hasTag(result, type, 'found')) {\n return this.fromFound(result);\n }\n else if (hasTag(result, type, 'missing')) {\n return this.fromMissing(result);\n }\n return fail('invalid batch get response: ' + JSON.stringify(result));\n };\n JsonProtoSerializer.prototype.toWatchTargetChangeState = function (state) {\n switch (state) {\n case WatchTargetChangeState.Added:\n return 'ADD';\n case WatchTargetChangeState.Current:\n return 'CURRENT';\n case WatchTargetChangeState.NoChange:\n return 'NO_CHANGE';\n case WatchTargetChangeState.Removed:\n return 'REMOVE';\n case WatchTargetChangeState.Reset:\n return 'RESET';\n default:\n return fail('Unknown WatchTargetChangeState: ' + state);\n }\n };\n JsonProtoSerializer.prototype.toTestWatchChange = function (watchChange) {\n if (watchChange instanceof ExistenceFilterChange) {\n return {\n filter: {\n count: watchChange.existenceFilter.count,\n targetId: watchChange.targetId\n }\n };\n }\n if (watchChange instanceof DocumentWatchChange) {\n if (watchChange.newDoc instanceof Document) {\n var doc = watchChange.newDoc;\n return {\n documentChange: {\n document: {\n name: this.toName(doc.key),\n fields: this.toFields(doc.data),\n updateTime: this.toVersion(doc.version)\n },\n targetIds: watchChange.updatedTargetIds,\n removedTargetIds: watchChange.removedTargetIds\n }\n };\n }\n else if (watchChange.newDoc instanceof NoDocument) {\n var doc = watchChange.newDoc;\n return {\n documentDelete: {\n document: this.toName(doc.key),\n readTime: this.toVersion(doc.version),\n removedTargetIds: watchChange.removedTargetIds\n }\n };\n }\n else if (watchChange.newDoc === null) {\n return {\n documentRemove: {\n document: this.toName(watchChange.key),\n removedTargetIds: watchChange.removedTargetIds\n }\n };\n }\n }\n if (watchChange instanceof WatchTargetChange) {\n var cause = undefined;\n if (watchChange.cause) {\n cause = {\n code: mapRpcCodeFromCode(watchChange.cause.code),\n message: watchChange.cause.message\n };\n }\n return {\n targetChange: {\n targetChangeType: this.toWatchTargetChangeState(watchChange.state),\n targetIds: watchChange.targetIds,\n resumeToken: this.unsafeCastProtoByteString(watchChange.resumeToken),\n cause: cause\n }\n };\n }\n return fail('Unrecognized watch change: ' + JSON.stringify(watchChange));\n };\n JsonProtoSerializer.prototype.fromWatchChange = function (change) {\n // tslint:disable-next-line:no-any\n var type = change['response_type'];\n var watchChange;\n if (hasTag(change, type, 'targetChange')) {\n assertPresent(change.targetChange, 'targetChange');\n // proto3 default value is unset in JSON (undefined), so use 'NO_CHANGE'\n // if unset\n var state = this.fromWatchTargetChangeState(change.targetChange.targetChangeType || 'NO_CHANGE');\n var targetIds = change.targetChange.targetIds || [];\n var resumeToken = change.targetChange.resumeToken || this.emptyByteString();\n var causeProto = change.targetChange.cause;\n var cause = causeProto && this.fromRpcStatus(causeProto);\n watchChange = new WatchTargetChange(state, targetIds, resumeToken, cause || null);\n }\n else if (hasTag(change, type, 'documentChange')) {\n assertPresent(change.documentChange, 'documentChange');\n assertPresent(change.documentChange.document, 'documentChange.name');\n assertPresent(change.documentChange.document.name, 'documentChange.document.name');\n assertPresent(change.documentChange.document.updateTime, 'documentChange.document.updateTime');\n var entityChange = change.documentChange;\n var key = this.fromName(entityChange.document.name);\n var version = this.fromVersion(entityChange.document.updateTime);\n var fields = this.fromFields(entityChange.document.fields || {});\n var doc = new Document(key, version, fields, {\n hasLocalMutations: false\n });\n var updatedTargetIds = entityChange.targetIds || [];\n var removedTargetIds = entityChange.removedTargetIds || [];\n watchChange = new DocumentWatchChange(updatedTargetIds, removedTargetIds, doc.key, doc);\n }\n else if (hasTag(change, type, 'documentDelete')) {\n assertPresent(change.documentDelete, 'documentDelete');\n assertPresent(change.documentDelete.document, 'documentDelete.document');\n var docDelete = change.documentDelete;\n var key = this.fromName(docDelete.document);\n var version = docDelete.readTime\n ? this.fromVersion(docDelete.readTime)\n : SnapshotVersion.forDeletedDoc();\n var doc = new NoDocument(key, version);\n var removedTargetIds = docDelete.removedTargetIds || [];\n watchChange = new DocumentWatchChange([], removedTargetIds, doc.key, doc);\n }\n else if (hasTag(change, type, 'documentRemove')) {\n assertPresent(change.documentRemove, 'documentRemove');\n assertPresent(change.documentRemove.document, 'documentRemove');\n var docRemove = change.documentRemove;\n var key = this.fromName(docRemove.document);\n var removedTargetIds = docRemove.removedTargetIds || [];\n watchChange = new DocumentWatchChange([], removedTargetIds, key, null);\n }\n else if (hasTag(change, type, 'filter')) {\n // TODO(dimond): implement existence filter parsing with strategy.\n assertPresent(change.filter, 'filter');\n assertPresent(change.filter.targetId, 'filter.targetId');\n var filter = change.filter;\n var count = filter.count || 0;\n var existenceFilter = new ExistenceFilter(count);\n var targetId = filter.targetId;\n watchChange = new ExistenceFilterChange(targetId, existenceFilter);\n }\n else {\n return fail('Unknown change type ' + JSON.stringify(change));\n }\n return watchChange;\n };\n JsonProtoSerializer.prototype.fromWatchTargetChangeState = function (state) {\n if (state === 'NO_CHANGE') {\n return WatchTargetChangeState.NoChange;\n }\n else if (state === 'ADD') {\n return WatchTargetChangeState.Added;\n }\n else if (state === 'REMOVE') {\n return WatchTargetChangeState.Removed;\n }\n else if (state === 'CURRENT') {\n return WatchTargetChangeState.Current;\n }\n else if (state === 'RESET') {\n return WatchTargetChangeState.Reset;\n }\n else {\n return fail('Got unexpected TargetChange.state: ' + state);\n }\n };\n JsonProtoSerializer.prototype.versionFromListenResponse = function (change) {\n // We have only reached a consistent snapshot for the entire stream if there\n // is a read_time set and it applies to all targets (i.e. the list of\n // targets is empty). The backend is guaranteed to send such responses.\n // tslint:disable-next-line:no-any\n var type = change['response_type'];\n if (!hasTag(change, type, 'targetChange')) {\n return SnapshotVersion.MIN;\n }\n var targetChange = change.targetChange;\n if (targetChange.targetIds && targetChange.targetIds.length) {\n return SnapshotVersion.MIN;\n }\n if (!targetChange.readTime) {\n return SnapshotVersion.MIN;\n }\n return this.fromVersion(targetChange.readTime);\n };\n JsonProtoSerializer.prototype.toMutation = function (mutation) {\n var _this = this;\n var result;\n if (mutation instanceof SetMutation) {\n result = {\n update: this.toMutationDocument(mutation.key, mutation.value)\n };\n }\n else if (mutation instanceof DeleteMutation) {\n result = { delete: this.toName(mutation.key) };\n }\n else if (mutation instanceof PatchMutation) {\n result = {\n update: this.toMutationDocument(mutation.key, mutation.data),\n updateMask: this.toDocumentMask(mutation.fieldMask)\n };\n }\n else if (mutation instanceof TransformMutation) {\n result = {\n transform: {\n document: this.toName(mutation.key),\n fieldTransforms: mutation.fieldTransforms.map(function (transform) {\n return _this.toFieldTransform(transform);\n })\n }\n };\n }\n else {\n return fail('Unknown mutation type ' + mutation.type);\n }\n if (!mutation.precondition.isNone) {\n result.currentDocument = this.toPrecondition(mutation.precondition);\n }\n return result;\n };\n JsonProtoSerializer.prototype.fromMutation = function (proto) {\n var _this = this;\n var precondition = proto.currentDocument\n ? this.fromPrecondition(proto.currentDocument)\n : Precondition.NONE;\n if (proto.update) {\n assertPresent(proto.update.name, 'name');\n var key = this.fromName(proto.update.name);\n var value = this.fromFields(proto.update.fields || {});\n if (proto.updateMask) {\n var fieldMask = this.fromDocumentMask(proto.updateMask);\n return new PatchMutation(key, value, fieldMask, precondition);\n }\n else {\n return new SetMutation(key, value, precondition);\n }\n }\n else if (proto.delete) {\n var key = this.fromName(proto.delete);\n return new DeleteMutation(key, precondition);\n }\n else if (proto.transform) {\n var key = this.fromName(proto.transform.document);\n var fieldTransforms = proto.transform.fieldTransforms.map(function (transform) {\n return _this.fromFieldTransform(transform);\n });\n assert(precondition.exists === true, 'Transforms only support precondition \"exists == true\"');\n return new TransformMutation(key, fieldTransforms);\n }\n else {\n return fail('unknown mutation proto: ' + JSON.stringify(proto));\n }\n };\n JsonProtoSerializer.prototype.toPrecondition = function (precondition) {\n assert(!precondition.isNone, \"Can't serialize an empty precondition\");\n if (precondition.updateTime !== undefined) {\n return {\n updateTime: this.toVersion(precondition.updateTime)\n };\n }\n else if (precondition.exists !== undefined) {\n return { exists: precondition.exists };\n }\n else {\n return fail('Unknown precondition');\n }\n };\n JsonProtoSerializer.prototype.fromPrecondition = function (precondition) {\n if (precondition.updateTime !== undefined) {\n return Precondition.updateTime(this.fromVersion(precondition.updateTime));\n }\n else if (precondition.exists !== undefined) {\n return Precondition.exists(precondition.exists);\n }\n else {\n return Precondition.NONE;\n }\n };\n JsonProtoSerializer.prototype.fromWriteResult = function (proto) {\n var _this = this;\n // NOTE: Deletes don't have an updateTime.\n var version = proto.updateTime\n ? this.fromVersion(proto.updateTime)\n : null;\n var transformResults = null;\n if (proto.transformResults && proto.transformResults.length > 0) {\n transformResults = proto.transformResults.map(function (result) {\n return _this.fromValue(result);\n });\n }\n return new MutationResult(version, transformResults);\n };\n JsonProtoSerializer.prototype.fromWriteResults = function (protos) {\n var _this = this;\n return (protos || []).map(function (proto) { return _this.fromWriteResult(proto); });\n };\n JsonProtoSerializer.prototype.toFieldTransform = function (fieldTransform) {\n assert(fieldTransform.transform instanceof ServerTimestampTransform, 'Unknown transform: ' + fieldTransform.transform);\n return {\n fieldPath: fieldTransform.field.canonicalString(),\n setToServerValue: 'REQUEST_TIME'\n };\n };\n JsonProtoSerializer.prototype.fromFieldTransform = function (proto) {\n assert(proto.setToServerValue === 'REQUEST_TIME', 'Unknown transform proto: ' + JSON.stringify(proto));\n var fieldPath = FieldPath.fromServerFormat(proto.fieldPath);\n return new FieldTransform(fieldPath, ServerTimestampTransform.instance);\n };\n JsonProtoSerializer.prototype.toDocumentsTarget = function (query) {\n return { documents: [this.toQueryPath(query.path)] };\n };\n JsonProtoSerializer.prototype.fromDocumentsTarget = function (documentsTarget) {\n var count = documentsTarget.documents.length;\n assert(count === 1, 'DocumentsTarget contained other than 1 document: ' + count);\n var name = documentsTarget.documents[0];\n return Query.atPath(this.fromQueryPath(name));\n };\n JsonProtoSerializer.prototype.toQueryTarget = function (query) {\n // Dissect the path into parent, collectionId, and optional key filter.\n var result = { structuredQuery: {} };\n if (query.path.isEmpty()) {\n result.parent = this.toQueryPath(ResourcePath.EMPTY_PATH);\n }\n else {\n var path = query.path;\n assert(path.length % 2 !== 0, 'Document queries with filters are not supported.');\n result.parent = this.toQueryPath(path.popLast());\n result.structuredQuery.from = [{ collectionId: path.lastSegment() }];\n }\n var where = this.toFilter(query.filters);\n if (where) {\n result.structuredQuery.where = where;\n }\n var orderBy = this.toOrder(query.orderBy);\n if (orderBy) {\n result.structuredQuery.orderBy = orderBy;\n }\n var limit = this.toInt32Value(query.limit);\n if (limit !== undefined) {\n result.structuredQuery.limit = limit;\n }\n if (query.startAt) {\n result.structuredQuery.startAt = this.toCursor(query.startAt);\n }\n if (query.endAt) {\n result.structuredQuery.endAt = this.toCursor(query.endAt);\n }\n return result;\n };\n JsonProtoSerializer.prototype.fromQueryTarget = function (target) {\n var path = this.fromQueryPath(target.parent);\n var query = target.structuredQuery;\n var fromCount = query.from ? query.from.length : 0;\n if (fromCount > 0) {\n assert(fromCount === 1, 'StructuredQuery.from with more than one collection is not supported.');\n var from = query.from[0];\n path = path.child(from.collectionId);\n }\n var filterBy = [];\n if (query.where) {\n filterBy = this.fromFilter(query.where);\n }\n var orderBy = [];\n if (query.orderBy) {\n orderBy = this.fromOrder(query.orderBy);\n }\n var limit = null;\n if (query.limit) {\n limit = this.fromInt32Value(query.limit);\n }\n var startAt = null;\n if (query.startAt) {\n startAt = this.fromCursor(query.startAt);\n }\n var endAt = null;\n if (query.endAt) {\n endAt = this.fromCursor(query.endAt);\n }\n return new Query(path, orderBy, filterBy, limit, startAt, endAt);\n };\n JsonProtoSerializer.prototype.toListenRequestLabels = function (queryData) {\n var value = this.toLabel(queryData.purpose);\n if (value == null) {\n return null;\n }\n else {\n return {\n 'goog-listen-tags': value\n };\n }\n };\n JsonProtoSerializer.prototype.toLabel = function (purpose) {\n switch (purpose) {\n case QueryPurpose.Listen:\n return null;\n case QueryPurpose.ExistenceFilterMismatch:\n return 'existence-filter-mismatch';\n case QueryPurpose.LimboResolution:\n return 'limbo-document';\n default:\n return fail('Unrecognized query purpose: ' + purpose);\n }\n };\n JsonProtoSerializer.prototype.toTarget = function (queryData) {\n var result;\n var query = queryData.query;\n if (query.isDocumentQuery()) {\n result = { documents: this.toDocumentsTarget(query) };\n }\n else {\n result = { query: this.toQueryTarget(query) };\n }\n result.targetId = queryData.targetId;\n if (queryData.resumeToken.length > 0) {\n result.resumeToken = this.unsafeCastProtoByteString(queryData.resumeToken);\n }\n return result;\n };\n JsonProtoSerializer.prototype.toFilter = function (filters) {\n var _this = this;\n if (filters.length === 0)\n return;\n var protos = filters.map(function (filter) {\n return filter instanceof RelationFilter\n ? _this.toRelationFilter(filter)\n : _this.toUnaryFilter(filter);\n });\n if (protos.length === 1) {\n return protos[0];\n }\n return { compositeFilter: { op: 'AND', filters: protos } };\n };\n JsonProtoSerializer.prototype.fromFilter = function (filter) {\n var _this = this;\n if (!filter) {\n return [];\n }\n else if (filter.unaryFilter !== undefined) {\n return [this.fromUnaryFilter(filter)];\n }\n else if (filter.fieldFilter !== undefined) {\n return [this.fromRelationFilter(filter)];\n }\n else if (filter.compositeFilter !== undefined) {\n return filter.compositeFilter.filters\n .map(function (f) { return _this.fromFilter(f); })\n .reduce(function (accum, current) { return accum.concat(current); });\n }\n else {\n return fail('Unknown filter: ' + JSON.stringify(filter));\n }\n };\n JsonProtoSerializer.prototype.toOrder = function (orderBys) {\n var _this = this;\n if (orderBys.length === 0)\n return;\n return orderBys.map(function (order) { return _this.toPropertyOrder(order); });\n };\n JsonProtoSerializer.prototype.fromOrder = function (orderBys) {\n var _this = this;\n return orderBys.map(function (order) { return _this.fromPropertyOrder(order); });\n };\n JsonProtoSerializer.prototype.toCursor = function (cursor) {\n var _this = this;\n return {\n before: cursor.before,\n values: cursor.position.map(function (component) { return _this.toValue(component); })\n };\n };\n JsonProtoSerializer.prototype.fromCursor = function (cursor) {\n var _this = this;\n var before = !!cursor.before;\n var position = cursor.values.map(function (component) { return _this.fromValue(component); });\n return new Bound(position, before);\n };\n // visible for testing\n JsonProtoSerializer.prototype.toDirection = function (dir) {\n return DIRECTIONS[dir.name];\n };\n // visible for testing\n JsonProtoSerializer.prototype.fromDirection = function (dir) {\n switch (dir) {\n case 'ASCENDING':\n return Direction.ASCENDING;\n case 'DESCENDING':\n return Direction.DESCENDING;\n default:\n return undefined;\n }\n };\n // visible for testing\n JsonProtoSerializer.prototype.toOperatorName = function (op) {\n return OPERATORS[op.name];\n };\n JsonProtoSerializer.prototype.fromOperatorName = function (op) {\n switch (op) {\n case 'EQUAL':\n return RelationOp.EQUAL;\n case 'GREATER_THAN':\n return RelationOp.GREATER_THAN;\n case 'GREATER_THAN_OR_EQUAL':\n return RelationOp.GREATER_THAN_OR_EQUAL;\n case 'LESS_THAN':\n return RelationOp.LESS_THAN;\n case 'LESS_THAN_OR_EQUAL':\n return RelationOp.LESS_THAN_OR_EQUAL;\n case 'OPERATOR_UNSPECIFIED':\n return fail('Unspecified relation');\n default:\n return fail('Unknown relation');\n }\n };\n JsonProtoSerializer.prototype.toFieldPathReference = function (path) {\n return { fieldPath: path.canonicalString() };\n };\n JsonProtoSerializer.prototype.fromFieldPathReference = function (fieldReference) {\n return FieldPath.fromServerFormat(fieldReference.fieldPath);\n };\n // visible for testing\n JsonProtoSerializer.prototype.toPropertyOrder = function (orderBy) {\n return {\n field: this.toFieldPathReference(orderBy.field),\n direction: this.toDirection(orderBy.dir)\n };\n };\n JsonProtoSerializer.prototype.fromPropertyOrder = function (orderBy) {\n return new OrderBy(this.fromFieldPathReference(orderBy.field), this.fromDirection(orderBy.direction));\n };\n // visible for testing\n JsonProtoSerializer.prototype.toRelationFilter = function (filter) {\n if (filter instanceof RelationFilter) {\n return {\n fieldFilter: {\n field: this.toFieldPathReference(filter.field),\n op: this.toOperatorName(filter.op),\n value: this.toValue(filter.value)\n }\n };\n }\n else {\n return fail('Unrecognized filter: ' + JSON.stringify(filter));\n }\n };\n JsonProtoSerializer.prototype.fromRelationFilter = function (filter) {\n return new RelationFilter(this.fromFieldPathReference(filter.fieldFilter.field), this.fromOperatorName(filter.fieldFilter.op), this.fromValue(filter.fieldFilter.value));\n };\n // visible for testing\n JsonProtoSerializer.prototype.toUnaryFilter = function (filter) {\n if (filter instanceof NanFilter) {\n return {\n unaryFilter: {\n field: this.toFieldPathReference(filter.field),\n op: 'IS_NAN'\n }\n };\n }\n else if (filter instanceof NullFilter) {\n return {\n unaryFilter: {\n field: this.toFieldPathReference(filter.field),\n op: 'IS_NULL'\n }\n };\n }\n else {\n return fail('Unrecognized filter: ' + JSON.stringify(filter));\n }\n };\n JsonProtoSerializer.prototype.fromUnaryFilter = function (filter) {\n switch (filter.unaryFilter.op) {\n case 'IS_NAN':\n var nanField = this.fromFieldPathReference(filter.unaryFilter.field);\n return new NanFilter(nanField);\n case 'IS_NULL':\n var nullField = this.fromFieldPathReference(filter.unaryFilter.field);\n return new NullFilter(nullField);\n case 'OPERATOR_UNSPECIFIED':\n return fail('Unspecified filter');\n default:\n return fail('Unknown filter');\n }\n };\n JsonProtoSerializer.prototype.toDocumentMask = function (fieldMask) {\n return {\n fieldPaths: fieldMask.fields.map(function (field) { return field.canonicalString(); })\n };\n };\n JsonProtoSerializer.prototype.fromDocumentMask = function (proto) {\n var paths = proto.fieldPaths || [];\n var fields = paths.map(function (path) { return FieldPath.fromServerFormat(path); });\n return new FieldMask(fields);\n };\n return JsonProtoSerializer;\n}());\nexport { JsonProtoSerializer };\n/**\n * Checks for a specific oneof tag in a protocol buffer message.\n *\n * This intentionally accommodates two distinct cases:\n *\n * 1) Messages containing a type tag: these are the format produced by GRPC in\n * return values. These may contain default-value mappings for all tags in the\n * oneof but the type tag specifies which one was actually set.\n *\n * 2) Messages that don't contain a type tag: these are the format required by\n * GRPC as inputs. If we emitted objects with type tags, ProtoBuf.js would\n * choke claiming that the tags aren't fields in the Message.\n *\n * Allowing both formats here makes the serializer able to consume the outputs\n * it produces: for all messages it supports, fromX(toX(value)) == value.\n *\n * Note that case 2 suffers from ambiguity: if multiple tags are present\n * without a type tag then the callers are structured in such a way that the\n * first invocation will win. Since we only parse in this mode when parsing\n * the output of a serialize method this works, but it's not a general\n * solution.\n *\n * Unfortunately there is no general solution here because proto3 makes it\n * impossible to distinguish unset from explicitly set fields: both have the\n * default value for the type. Without the type tag but multiple value tags\n * it's possible to have default values for each tag in the oneof and not be\n * able to know which was actually in effect.\n */\nfunction hasTag(obj, type, tag) {\n return type === tag || (!type && tag in obj);\n}\n\n//# sourceMappingURL=serializer.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { assert } from '../util/assert';\n/**\n * Provides a simple helper class that implements the Stream interface to\n * bridge to other implementations that are streams but do not implement the\n * interface. The stream callbacks are invoked with the callOn... methods.\n */\nvar StreamBridge = /** @class */ (function () {\n function StreamBridge(args) {\n this.sendFn = args.sendFn;\n this.closeFn = args.closeFn;\n }\n StreamBridge.prototype.onOpen = function (callback) {\n assert(!this.wrappedOnOpen, 'Called onOpen on stream twice!');\n this.wrappedOnOpen = callback;\n };\n StreamBridge.prototype.onClose = function (callback) {\n assert(!this.wrappedOnClose, 'Called onClose on stream twice!');\n this.wrappedOnClose = callback;\n };\n StreamBridge.prototype.onMessage = function (callback) {\n assert(!this.wrappedOnMessage, 'Called onMessage on stream twice!');\n this.wrappedOnMessage = callback;\n };\n StreamBridge.prototype.close = function () {\n this.closeFn();\n };\n StreamBridge.prototype.send = function (msg) {\n this.sendFn(msg);\n };\n StreamBridge.prototype.callOnOpen = function () {\n assert(this.wrappedOnOpen !== undefined, 'Cannot call onOpen because no callback was set');\n this.wrappedOnOpen();\n };\n StreamBridge.prototype.callOnClose = function (err) {\n assert(this.wrappedOnClose !== undefined, 'Cannot call onClose because no callback was set');\n this.wrappedOnClose(err);\n };\n StreamBridge.prototype.callOnMessage = function (msg) {\n assert(this.wrappedOnMessage !== undefined, 'Cannot call onMessage because no callback was set');\n this.wrappedOnMessage(msg);\n };\n return StreamBridge;\n}());\nexport { StreamBridge };\n\n//# sourceMappingURL=stream_bridge.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ErrorCode, EventType, WebChannel, XhrIoPool, createWebChannelTransport } from '@firebase/webchannel-wrapper';\nimport { SDK_VERSION } from '../core/version';\nimport { mapCodeFromHttpStatus, mapCodeFromRpcStatus } from '../remote/rpc_error';\nimport { StreamBridge } from '../remote/stream_bridge';\nimport { assert, fail } from '../util/assert';\nimport { Code, FirestoreError } from '../util/error';\nimport * as log from '../util/log';\nvar LOG_TAG = 'Connection';\nvar RPC_STREAM_SERVICE = 'google.firestore.v1beta1.Firestore';\nvar RPC_URL_VERSION = 'v1beta1';\n/** Maps RPC names to the corresponding REST endpoint name. */\nvar RPC_NAME_REST_MAPPING = {\n BatchGetDocuments: 'batchGet',\n Commit: 'commit'\n};\n// TODO(b/38203344): The SDK_VERSION is set independently from Firebase because\n// we are doing out-of-band releases. Once we release as part of Firebase, we\n// should use the Firebase version instead.\nvar X_GOOG_API_CLIENT_VALUE = 'gl-js/ fire/' + SDK_VERSION;\nvar XHR_TIMEOUT_SECS = 15;\nvar WebChannelConnection = /** @class */ (function () {\n function WebChannelConnection(info) {\n this.databaseId = info.databaseId;\n this.pool = new XhrIoPool();\n var proto = info.ssl ? 'https' : 'http';\n this.baseUrl = proto + '://' + info.host;\n }\n /**\n * Modifies the headers for a request, adding any authorization token if\n * present and any additional headers for the request.\n */\n WebChannelConnection.prototype.modifyHeadersForRequest = function (headers, token) {\n if (token) {\n for (var header in token.authHeaders) {\n if (token.authHeaders.hasOwnProperty(header)) {\n headers[header] = token.authHeaders[header];\n }\n }\n }\n headers['X-Goog-Api-Client'] = X_GOOG_API_CLIENT_VALUE;\n // This header is used to improve routing and project isolation by the\n // backend.\n headers['google-cloud-resource-prefix'] =\n \"projects/\" + this.databaseId.projectId + \"/\" +\n (\"databases/\" + this.databaseId.database);\n };\n WebChannelConnection.prototype.invokeRPC = function (rpcName, request, token) {\n var _this = this;\n var url = this.makeUrl(rpcName);\n return new Promise(function (resolve, reject) {\n // tslint:disable-next-line:no-any XhrIoPool doesn't have TS typings.\n _this.pool.getObject(function (xhr) {\n xhr.listenOnce(EventType.COMPLETE, function () {\n try {\n switch (xhr.getLastErrorCode()) {\n case ErrorCode.NO_ERROR:\n var json = xhr.getResponseJson();\n log.debug(LOG_TAG, 'XHR received:', JSON.stringify(json));\n resolve(json);\n break;\n case ErrorCode.TIMEOUT:\n log.debug(LOG_TAG, 'RPC \"' + rpcName + '\" timed out');\n reject(new FirestoreError(Code.DEADLINE_EXCEEDED, 'Request time out'));\n break;\n case ErrorCode.HTTP_ERROR:\n var status_1 = xhr.getStatus();\n log.debug(LOG_TAG, 'RPC \"' + rpcName + '\" failed with status:', status_1, 'response text:', xhr.getResponseText());\n if (status_1 > 0) {\n reject(new FirestoreError(mapCodeFromHttpStatus(status_1), 'Server responded with status ' + xhr.getStatusText()));\n }\n else {\n // If we received an HTTP_ERROR but there's no status code,\n // it's most probably a connection issue\n log.debug(LOG_TAG, 'RPC \"' + rpcName + '\" failed');\n reject(new FirestoreError(Code.UNAVAILABLE, 'Connection failed.'));\n }\n break;\n default:\n fail('RPC \"' +\n rpcName +\n '\" failed with unanticipated ' +\n 'webchannel error ' +\n xhr.getLastErrorCode() +\n ': ' +\n xhr.getLastError() +\n ', giving up.');\n }\n }\n finally {\n log.debug(LOG_TAG, 'RPC \"' + rpcName + '\" completed.');\n _this.pool.releaseObject(xhr);\n }\n });\n var requestString = JSON.stringify(request);\n log.debug(LOG_TAG, 'XHR sending: ', url + ' ' + requestString);\n // Content-Type: text/plain will avoid preflight requests which might\n // mess with CORS and redirects by proxies. If we add custom headers\n // we will need to change this code to potentially use the\n // $httpOverwrite parameter supported by ESF to avoid\n // triggering preflight requests.\n var headers = { 'Content-Type': 'text/plain' };\n _this.modifyHeadersForRequest(headers, token);\n xhr.send(url, 'POST', requestString, headers, XHR_TIMEOUT_SECS);\n });\n });\n };\n WebChannelConnection.prototype.invokeStreamingRPC = function (rpcName, request, token) {\n // The REST API automatically aggregates all of the streamed results, so we\n // can just use the normal invoke() method.\n return this.invokeRPC(rpcName, request, token);\n };\n WebChannelConnection.prototype.openStream = function (rpcName, token) {\n var urlParts = [\n this.baseUrl,\n '/',\n RPC_STREAM_SERVICE,\n '/',\n rpcName,\n '/channel'\n ];\n var webchannelTransport = createWebChannelTransport();\n var request = {\n // Background channel test avoids the initial two test calls and decreases\n // initial cold start time.\n // TODO(dimond): wenboz@ mentioned this might affect use with proxies and\n // we should monitor closely for any reports.\n backgroundChannelTest: true,\n // Required for backend stickiness, routing behavior is based on this\n // parameter.\n httpSessionIdParam: 'gsessionid',\n initMessageHeaders: {},\n // Send our custom headers as a '$httpHeaders=' url param to avoid CORS\n // preflight round-trip. This is formally defined here:\n // https://github.com/google/closure-library/blob/b0e1815b13fb92a46d7c9b3c30de5d6a396a3245/closure/goog/net/rpc/httpcors.js#L40\n httpHeadersOverwriteParam: '$httpHeaders',\n sendRawJson: true,\n supportsCrossDomainXhr: true\n };\n this.modifyHeadersForRequest(request.initMessageHeaders, token);\n var url = urlParts.join('');\n log.debug(LOG_TAG, 'Creating WebChannel: ' + url + ' ' + request);\n // tslint:disable-next-line:no-any Because listen isn't defined on it.\n var channel = webchannelTransport.createWebChannel(url, request);\n // WebChannel supports sending the first message with the handshake - saving\n // a network round trip. However, it will have to call send in the same\n // JS event loop as open. In order to enforce this, we delay actually\n // opening the WebChannel until send is called. Whether we have called\n // open is tracked with this variable.\n var opened = false;\n // A flag to determine whether the stream was closed (by us or through an\n // error/close event) to avoid delivering multiple close events or sending\n // on a closed stream\n var closed = false;\n var streamBridge = new StreamBridge({\n sendFn: function (msg) {\n if (!closed) {\n if (!opened) {\n log.debug(LOG_TAG, 'Opening WebChannel transport.');\n channel.open();\n opened = true;\n }\n log.debug(LOG_TAG, 'WebChannel sending:', msg);\n channel.send(msg);\n }\n else {\n log.debug(LOG_TAG, 'Not sending because WebChannel is closed:', msg);\n }\n },\n closeFn: function () { return channel.close(); }\n });\n // Closure events are guarded and exceptions are swallowed, so catch any\n // exception and rethrow using a setTimeout so they become visible again.\n // Note that eventually this function could go away if we are confident\n // enough the code is exception free.\n var unguardedEventListen = function (type, fn) {\n // TODO(dimond): closure typing seems broken because WebChannel does\n // not implement goog.events.Listenable\n channel.listen(type, function (param) {\n try {\n fn(param);\n }\n catch (e) {\n setTimeout(function () {\n throw e;\n }, 0);\n }\n });\n };\n unguardedEventListen(WebChannel.EventType.OPEN, function () {\n if (!closed) {\n log.debug(LOG_TAG, 'WebChannel transport opened.');\n }\n });\n unguardedEventListen(WebChannel.EventType.CLOSE, function () {\n if (!closed) {\n closed = true;\n log.debug(LOG_TAG, 'WebChannel transport closed');\n streamBridge.callOnClose();\n }\n });\n unguardedEventListen(WebChannel.EventType.ERROR, function (err) {\n if (!closed) {\n closed = true;\n log.debug(LOG_TAG, 'WebChannel transport errored:', err);\n streamBridge.callOnClose(new FirestoreError(Code.UNAVAILABLE, 'The operation could not be completed'));\n }\n });\n unguardedEventListen(WebChannel.EventType.MESSAGE, function (msg) {\n if (!closed) {\n var msgData = msg.data[0];\n assert(!!msgData, 'Got a webchannel message without data.');\n // TODO(b/35143891): There is a bug in One Platform that caused errors\n // (and only errors) to be wrapped in an extra array. To be forward\n // compatible with the bug we need to check either condition. The latter\n // can be removed once the fix has been rolled out.\n var error = \n // tslint:disable-next-line:no-any msgData.error is not typed.\n msgData.error || (msgData[0] && msgData[0].error);\n if (error) {\n log.debug(LOG_TAG, 'WebChannel received error:', error);\n // error.status will be a string like 'OK' or 'NOT_FOUND'.\n var status_2 = error.status;\n var code = mapCodeFromRpcStatus(status_2);\n var message = error.message;\n if (code === undefined) {\n code = Code.INTERNAL;\n message =\n 'Unknown error status: ' +\n status_2 +\n ' with message ' +\n error.message;\n }\n // Mark closed so no further events are propagated\n closed = true;\n streamBridge.callOnClose(new FirestoreError(code, message));\n channel.close();\n }\n else {\n log.debug(LOG_TAG, 'WebChannel received:', msgData);\n streamBridge.callOnMessage(msgData);\n }\n }\n });\n setTimeout(function () {\n // Technically we could/should wait for the WebChannel opened event,\n // but because we want to send the first message with the WebChannel\n // handshake we pretend the channel opened here (asynchronously), and\n // then delay the actual open until the first message is sent.\n streamBridge.callOnOpen();\n }, 0);\n return streamBridge;\n };\n // visible for testing\n WebChannelConnection.prototype.makeUrl = function (rpcName) {\n var urlRpcName = RPC_NAME_REST_MAPPING[rpcName];\n assert(urlRpcName !== undefined, 'Unknown REST mapping for: ' + rpcName);\n var url = [this.baseUrl, '/', RPC_URL_VERSION];\n url.push('/projects/');\n url.push(this.databaseId.projectId);\n url.push('/databases/');\n url.push(this.databaseId.database);\n url.push('/documents');\n url.push(':');\n url.push(urlRpcName);\n return url.join('');\n };\n return WebChannelConnection;\n}());\nexport { WebChannelConnection };\n\n//# sourceMappingURL=webchannel_connection.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { JsonProtoSerializer } from '../remote/serializer';\nimport { WebChannelConnection } from './webchannel_connection';\nvar BrowserPlatform = /** @class */ (function () {\n function BrowserPlatform() {\n this.emptyByteString = '';\n this.base64Available = typeof atob !== 'undefined';\n }\n BrowserPlatform.prototype.loadConnection = function (databaseInfo) {\n return Promise.resolve(new WebChannelConnection(databaseInfo));\n };\n BrowserPlatform.prototype.newSerializer = function (databaseId) {\n return new JsonProtoSerializer(databaseId, { useProto3Json: true });\n };\n BrowserPlatform.prototype.formatJSON = function (value) {\n return JSON.stringify(value);\n };\n BrowserPlatform.prototype.atob = function (encoded) {\n return atob(encoded);\n };\n BrowserPlatform.prototype.btoa = function (raw) {\n return btoa(raw);\n };\n return BrowserPlatform;\n}());\nexport { BrowserPlatform };\n\n//# sourceMappingURL=browser_platform.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { PlatformSupport } from '../platform/platform';\nimport { BrowserPlatform } from './browser_platform';\n/**\n * This code needs to run before Firestore is used. This can be achieved in\n * several ways:\n * 1) Through the JSCompiler compiling this code and then (automatically)\n * executing it before exporting the Firestore symbols.\n * 2) Through importing this module first in a Firestore main module\n */\nPlatformSupport.setPlatform(new BrowserPlatform());\n\n//# sourceMappingURL=browser_init.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FieldPath as InternalFieldPath } from '../model/path';\nimport { Code, FirestoreError } from '../util/error';\nimport { invalidClassError, validateArgType, validateNamedArrayAtLeastNumberOfElements } from '../util/input_validation';\n// The objects that are a part of this API are exposed to third-parties as\n// compiled javascript so we want to flag our private members with a leading\n// underscore to discourage their use.\n// tslint:disable:strip-private-property-underscore\n/**\n * A FieldPath refers to a field in a document. The path may consist of a single\n * field name (referring to a top-level field in the document), or a list of\n * field names (referring to a nested field in the document).\n */\nvar FieldPath = /** @class */ (function () {\n /**\n * Creates a FieldPath from the provided field names. If more than one field\n * name is provided, the path will point to a nested field in a document.\n *\n * @param fieldNames A list of field names.\n */\n function FieldPath() {\n var fieldNames = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fieldNames[_i] = arguments[_i];\n }\n validateNamedArrayAtLeastNumberOfElements('FieldPath', fieldNames, 'fieldNames', 1);\n for (var i = 0; i < fieldNames.length; ++i) {\n validateArgType('FieldPath', 'string', i, fieldNames[i]);\n if (fieldNames[i].length === 0) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Invalid field name at argument $(i + 1). \" +\n 'Field names must not be empty.');\n }\n }\n this._internalPath = new InternalFieldPath(fieldNames);\n }\n FieldPath.documentId = function () {\n return FieldPath._DOCUMENT_ID;\n };\n FieldPath.prototype.isEqual = function (other) {\n if (!(other instanceof FieldPath)) {\n throw invalidClassError('isEqual', 'FieldPath', 1, other);\n }\n return this._internalPath.isEqual(other._internalPath);\n };\n /**\n * Internal Note: The backend doesn't technically support querying by\n * document ID. Instead it queries by the entire document name (full path\n * included), but in the cases we currently support documentId(), the net\n * effect is the same.\n */\n FieldPath._DOCUMENT_ID = new FieldPath(InternalFieldPath.keyField().canonicalString());\n return FieldPath;\n}());\nexport { FieldPath };\n/**\n * Matches any characters in a field path string that are reserved.\n */\nvar RESERVED = new RegExp('[~\\\\*/\\\\[\\\\]]');\n/**\n * Parses a field path string into a FieldPath, treating dots as separators.\n */\nexport function fromDotSeparatedString(path) {\n var found = path.search(RESERVED);\n if (found >= 0) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Invalid field path (\" + path + \"). Paths must not contain \" +\n \"'~', '*', '/', '[', or ']'\");\n }\n try {\n return new (FieldPath.bind.apply(FieldPath, [void 0].concat(path.split('.'))))();\n }\n catch (e) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Invalid field path (\" + path + \"). Paths must not be empty, \" +\n \"begin with '.', end with '.', or contain '..'\");\n }\n}\n\n//# sourceMappingURL=field_path.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Describes the online state of the Firestore client. Note that this does not\n * indicate whether or not the remote store is trying to connect or not. This is\n * primarily used by the View / EventManager code to change their behavior while\n * offline (e.g. get() calls shouldn't wait for data from the server and\n * snapshot events should set metadata.isFromCache=true).\n */\nexport var OnlineState;\n(function (OnlineState) {\n /**\n * The Firestore client is in an unknown online state. This means the client\n * is either not actively trying to establish a connection or it is currently\n * trying to establish a connection, but it has not succeeded or failed yet.\n * Higher-level components should not operate in offline mode.\n */\n OnlineState[OnlineState[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * The client is connected and the connections are healthy. This state is\n * reached after a successful connection and there has been at least one\n * successful message received from the backends.\n */\n OnlineState[OnlineState[\"Healthy\"] = 1] = \"Healthy\";\n /**\n * The client is either trying to establish a connection but failing, or it\n * has been explicitly marked offline via a call to disableNetwork().\n * Higher-level components should operate in offline mode.\n */\n OnlineState[OnlineState[\"Failed\"] = 2] = \"Failed\";\n})(OnlineState || (OnlineState = {}));\n\n//# sourceMappingURL=types.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DocumentKey } from '../model/document_key';\nimport { fail } from '../util/assert';\nimport { SortedMap } from '../util/sorted_map';\nexport var ChangeType;\n(function (ChangeType) {\n ChangeType[ChangeType[\"Added\"] = 0] = \"Added\";\n ChangeType[ChangeType[\"Removed\"] = 1] = \"Removed\";\n ChangeType[ChangeType[\"Modified\"] = 2] = \"Modified\";\n ChangeType[ChangeType[\"Metadata\"] = 3] = \"Metadata\";\n})(ChangeType || (ChangeType = {}));\nexport var SyncState;\n(function (SyncState) {\n SyncState[SyncState[\"Local\"] = 0] = \"Local\";\n SyncState[SyncState[\"Synced\"] = 1] = \"Synced\";\n})(SyncState || (SyncState = {}));\n/**\n * DocumentChangeSet keeps track of a set of changes to docs in a query, merging\n * duplicate events for the same doc.\n */\nvar DocumentChangeSet = /** @class */ (function () {\n function DocumentChangeSet() {\n this.changeMap = new SortedMap(DocumentKey.comparator);\n }\n DocumentChangeSet.prototype.track = function (change) {\n var key = change.doc.key;\n var oldChange = this.changeMap.get(key);\n if (!oldChange) {\n this.changeMap = this.changeMap.insert(key, change);\n return;\n }\n // Merge the new change with the existing change.\n if (change.type !== ChangeType.Added &&\n oldChange.type === ChangeType.Metadata) {\n this.changeMap = this.changeMap.insert(key, change);\n }\n else if (change.type === ChangeType.Metadata &&\n oldChange.type !== ChangeType.Removed) {\n this.changeMap = this.changeMap.insert(key, {\n type: oldChange.type,\n doc: change.doc\n });\n }\n else if (change.type === ChangeType.Modified &&\n oldChange.type === ChangeType.Modified) {\n this.changeMap = this.changeMap.insert(key, {\n type: ChangeType.Modified,\n doc: change.doc\n });\n }\n else if (change.type === ChangeType.Modified &&\n oldChange.type === ChangeType.Added) {\n this.changeMap = this.changeMap.insert(key, {\n type: ChangeType.Added,\n doc: change.doc\n });\n }\n else if (change.type === ChangeType.Removed &&\n oldChange.type === ChangeType.Added) {\n this.changeMap = this.changeMap.remove(key);\n }\n else if (change.type === ChangeType.Removed &&\n oldChange.type === ChangeType.Modified) {\n this.changeMap = this.changeMap.insert(key, {\n type: ChangeType.Removed,\n doc: oldChange.doc\n });\n }\n else if (change.type === ChangeType.Added &&\n oldChange.type === ChangeType.Removed) {\n this.changeMap = this.changeMap.insert(key, {\n type: ChangeType.Modified,\n doc: change.doc\n });\n }\n else {\n // This includes these cases, which don't make sense:\n // Added->Added\n // Removed->Removed\n // Modified->Added\n // Removed->Modified\n // Metadata->Added\n // Removed->Metadata\n fail('unsupported combination of changes: ' +\n JSON.stringify(change) +\n ' after ' +\n JSON.stringify(oldChange));\n }\n };\n DocumentChangeSet.prototype.getChanges = function () {\n var changes = [];\n this.changeMap.inorderTraversal(function (key, change) {\n changes.push(change);\n });\n return changes;\n };\n return DocumentChangeSet;\n}());\nexport { DocumentChangeSet };\nvar ViewSnapshot = /** @class */ (function () {\n function ViewSnapshot(query, docs, oldDocs, docChanges, fromCache, hasPendingWrites, syncStateChanged) {\n this.query = query;\n this.docs = docs;\n this.oldDocs = oldDocs;\n this.docChanges = docChanges;\n this.fromCache = fromCache;\n this.hasPendingWrites = hasPendingWrites;\n this.syncStateChanged = syncStateChanged;\n }\n ViewSnapshot.prototype.isEqual = function (other) {\n if (this.fromCache !== other.fromCache ||\n this.hasPendingWrites !== other.hasPendingWrites ||\n this.syncStateChanged !== other.syncStateChanged ||\n !this.query.isEqual(other.query) ||\n !this.docs.isEqual(other.docs) ||\n !this.oldDocs.isEqual(other.oldDocs)) {\n return false;\n }\n var changes = this.docChanges;\n var otherChanges = other.docChanges;\n if (changes.length !== otherChanges.length) {\n return false;\n }\n for (var i = 0; i < changes.length; i++) {\n if (changes[i].type !== otherChanges[i].type ||\n !changes[i].doc.isEqual(otherChanges[i].doc)) {\n return false;\n }\n }\n return true;\n };\n return ViewSnapshot;\n}());\nexport { ViewSnapshot };\n\n//# sourceMappingURL=view_snapshot.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar RESERVED_BITS = 1;\nvar GeneratorIds;\n(function (GeneratorIds) {\n GeneratorIds[GeneratorIds[\"LocalStore\"] = 0] = \"LocalStore\";\n GeneratorIds[GeneratorIds[\"SyncEngine\"] = 1] = \"SyncEngine\";\n})(GeneratorIds || (GeneratorIds = {}));\n/**\n * TargetIdGenerator generates monotonically increasing integer IDs. There are\n * separate generators for different scopes. While these generators will operate\n * independently of each other, they are scoped, such that no two generators\n * will ever produce the same ID. This is useful, because sometimes the backend\n * may group IDs from separate parts of the client into the same ID space.\n */\nvar TargetIdGenerator = /** @class */ (function () {\n function TargetIdGenerator(generatorId, initAfter) {\n if (initAfter === void 0) { initAfter = 0; }\n this.generatorId = generatorId;\n // Replace the generator part of initAfter with this generator's ID.\n var afterWithoutGenerator = (initAfter >> RESERVED_BITS) << RESERVED_BITS;\n var afterGenerator = initAfter - afterWithoutGenerator;\n if (afterGenerator >= generatorId) {\n // For example, if:\n // this.generatorId = 0b0000\n // after = 0b1011\n // afterGenerator = 0b0001\n // Then:\n // previous = 0b1010\n // next = 0b1100\n this.previousId = afterWithoutGenerator | this.generatorId;\n }\n else {\n // For example, if:\n // this.generatorId = 0b0001\n // after = 0b1010\n // afterGenerator = 0b0000\n // Then:\n // previous = 0b1001\n // next = 0b1011\n this.previousId =\n (afterWithoutGenerator | this.generatorId) - (1 << RESERVED_BITS);\n }\n }\n TargetIdGenerator.prototype.next = function () {\n this.previousId += 1 << RESERVED_BITS;\n return this.previousId;\n };\n TargetIdGenerator.forLocalStore = function (initAfter) {\n if (initAfter === void 0) { initAfter = 0; }\n return new TargetIdGenerator(GeneratorIds.LocalStore, initAfter);\n };\n TargetIdGenerator.forSyncEngine = function () {\n return new TargetIdGenerator(GeneratorIds.SyncEngine);\n };\n return TargetIdGenerator;\n}());\nexport { TargetIdGenerator };\n\n//# sourceMappingURL=target_id_generator.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SortedMap } from '../util/sorted_map';\nimport { documentMap } from './collections';\nimport { DocumentKey } from './document_key';\n/**\n * DocumentSet is an immutable (copy-on-write) collection that holds documents\n * in order specified by the provided comparator. We always add a document key\n * comparator on top of what is provided to guarantee document equality based on\n * the key.\n */\nvar DocumentSet = /** @class */ (function () {\n /** The default ordering is by key if the comparator is omitted */\n function DocumentSet(comp) {\n // We are adding document key comparator to the end as it's the only\n // guaranteed unique property of a document.\n if (comp) {\n this.comparator = function (d1, d2) {\n return comp(d1, d2) || DocumentKey.comparator(d1.key, d2.key);\n };\n }\n else {\n this.comparator = function (d1, d2) {\n return DocumentKey.comparator(d1.key, d2.key);\n };\n }\n this.keyedMap = documentMap();\n this.sortedSet = new SortedMap(this.comparator);\n }\n /**\n * Returns an empty copy of the existing DocumentSet, using the same\n * comparator.\n */\n DocumentSet.emptySet = function (oldSet) {\n return new DocumentSet(oldSet.comparator);\n };\n DocumentSet.prototype.has = function (key) {\n return this.keyedMap.get(key) != null;\n };\n DocumentSet.prototype.get = function (key) {\n return this.keyedMap.get(key);\n };\n DocumentSet.prototype.first = function () {\n return this.sortedSet.minKey();\n };\n DocumentSet.prototype.last = function () {\n return this.sortedSet.maxKey();\n };\n DocumentSet.prototype.isEmpty = function () {\n return this.sortedSet.isEmpty();\n };\n /**\n * Returns the index of the provided key in the document set, or -1 if the\n * document key is not present in the set;\n */\n DocumentSet.prototype.indexOf = function (key) {\n var doc = this.keyedMap.get(key);\n return doc ? this.sortedSet.indexOf(doc) : -1;\n };\n Object.defineProperty(DocumentSet.prototype, \"size\", {\n get: function () {\n return this.sortedSet.size;\n },\n enumerable: true,\n configurable: true\n });\n /** Iterates documents in order defined by \"comparator\" */\n DocumentSet.prototype.forEach = function (cb) {\n this.sortedSet.inorderTraversal(function (k, v) {\n cb(k);\n return false;\n });\n };\n /** Inserts or updates a document with the same key */\n DocumentSet.prototype.add = function (doc) {\n // First remove the element if we have it.\n var set = this.delete(doc.key);\n return set.copy(set.keyedMap.insert(doc.key, doc), set.sortedSet.insert(doc, null));\n };\n /** Deletes a document with a given key */\n DocumentSet.prototype.delete = function (key) {\n var doc = this.get(key);\n if (!doc) {\n return this;\n }\n return this.copy(this.keyedMap.remove(key), this.sortedSet.remove(doc));\n };\n DocumentSet.prototype.isEqual = function (other) {\n if (!(other instanceof DocumentSet))\n return false;\n if (this.size !== other.size)\n return false;\n var thisIt = this.sortedSet.getIterator();\n var otherIt = other.sortedSet.getIterator();\n while (thisIt.hasNext()) {\n var thisDoc = thisIt.getNext().key;\n var otherDoc = otherIt.getNext().key;\n if (!thisDoc.isEqual(otherDoc))\n return false;\n }\n return true;\n };\n DocumentSet.prototype.toString = function () {\n var docStrings = [];\n this.forEach(function (doc) {\n docStrings.push(doc.toString());\n });\n if (docStrings.length === 0) {\n return 'DocumentSet ()';\n }\n else {\n return 'DocumentSet (\\n ' + docStrings.join(' \\n') + '\\n)';\n }\n };\n DocumentSet.prototype.copy = function (keyedMap, sortedSet) {\n var newSet = new DocumentSet();\n newSet.comparator = this.comparator;\n newSet.keyedMap = keyedMap;\n newSet.sortedSet = sortedSet;\n return newSet;\n };\n return DocumentSet;\n}());\nexport { DocumentSet };\n\n//# sourceMappingURL=document_set.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as objUtil from './obj';\n/**\n * A map implementation that uses objects as keys. Objects must implement the\n * Equatable interface and must be immutable. Entries in the map are stored\n * together with the key being produced from the mapKeyFn. This map\n * automatically handles collisions of keys.\n */\nvar ObjectMap = /** @class */ (function () {\n function ObjectMap(mapKeyFn) {\n this.mapKeyFn = mapKeyFn;\n /**\n * The inner map for a key -> value pair. Due to the possibility of\n * collisions we keep a list of entries that we do a linear search through\n * to find an actual match. Note that collisions should be rare, so we still\n * expect near constant time lookups in practice.\n */\n this.inner = {};\n }\n /** Get a value for this key, or undefined if it does not exist. */\n ObjectMap.prototype.get = function (key) {\n var id = this.mapKeyFn(key);\n var matches = this.inner[id];\n if (matches === undefined) {\n return undefined;\n }\n for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n var _a = matches_1[_i], otherKey = _a[0], value = _a[1];\n if (otherKey.isEqual(key)) {\n return value;\n }\n }\n return undefined;\n };\n ObjectMap.prototype.has = function (key) {\n return this.get(key) !== undefined;\n };\n /** Put this key and value in the map. */\n ObjectMap.prototype.set = function (key, value) {\n var id = this.mapKeyFn(key);\n var matches = this.inner[id];\n if (matches === undefined) {\n this.inner[id] = [[key, value]];\n return;\n }\n for (var i = 0; i < matches.length; i++) {\n if (matches[i][0].isEqual(key)) {\n matches[i] = [key, value];\n return;\n }\n }\n matches.push([key, value]);\n };\n /**\n * Remove this key from the map. Returns a boolean if anything was deleted.\n */\n ObjectMap.prototype.delete = function (key) {\n var id = this.mapKeyFn(key);\n var matches = this.inner[id];\n if (matches === undefined) {\n return false;\n }\n for (var i = 0; i < matches.length; i++) {\n if (matches[i][0].isEqual(key)) {\n if (matches.length === 1) {\n delete this.inner[id];\n }\n else {\n matches.splice(i, 1);\n }\n return true;\n }\n }\n return false;\n };\n ObjectMap.prototype.forEach = function (fn) {\n objUtil.forEach(this.inner, function (_, entries) {\n for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n var _a = entries_1[_i], k = _a[0], v = _a[1];\n fn(k, v);\n }\n });\n };\n ObjectMap.prototype.isEmpty = function () {\n return objUtil.isEmpty(this.inner);\n };\n return ObjectMap;\n}());\nexport { ObjectMap };\n\n//# sourceMappingURL=obj_map.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { OnlineState } from './types';\nimport { ChangeType, ViewSnapshot } from './view_snapshot';\nimport { DocumentSet } from '../model/document_set';\nimport { assert } from '../util/assert';\nimport { ObjectMap } from '../util/obj_map';\n/**\n * Holds the listeners and the last received ViewSnapshot for a query being\n * tracked by EventManager.\n */\nvar QueryListenersInfo = /** @class */ (function () {\n function QueryListenersInfo() {\n this.listeners = [];\n }\n return QueryListenersInfo;\n}());\n/**\n * EventManager is responsible for mapping queries to query event emitters.\n * It handles \"fan-out\". -- Identical queries will re-use the same watch on the\n * backend.\n */\nvar EventManager = /** @class */ (function () {\n function EventManager(syncEngine) {\n this.syncEngine = syncEngine;\n this.queries = new ObjectMap(function (q) {\n return q.canonicalId();\n });\n this.onlineState = OnlineState.Unknown;\n this.syncEngine.subscribe(this.onChange.bind(this), this.onError.bind(this));\n }\n EventManager.prototype.listen = function (listener) {\n var query = listener.query;\n var firstListen = false;\n var queryInfo = this.queries.get(query);\n if (!queryInfo) {\n firstListen = true;\n queryInfo = new QueryListenersInfo();\n this.queries.set(query, queryInfo);\n }\n queryInfo.listeners.push(listener);\n listener.applyOnlineStateChange(this.onlineState);\n if (queryInfo.viewSnap)\n listener.onViewSnapshot(queryInfo.viewSnap);\n if (firstListen) {\n return this.syncEngine.listen(query).then(function (targetId) {\n queryInfo.targetId = targetId;\n return targetId;\n });\n }\n else {\n return Promise.resolve(queryInfo.targetId);\n }\n };\n EventManager.prototype.unlisten = function (listener) {\n var query = listener.query;\n var lastListen = false;\n var queryInfo = this.queries.get(query);\n if (queryInfo) {\n var i = queryInfo.listeners.indexOf(listener);\n if (i >= 0) {\n queryInfo.listeners.splice(i, 1);\n lastListen = queryInfo.listeners.length === 0;\n }\n }\n if (lastListen) {\n this.queries.delete(query);\n return this.syncEngine.unlisten(query);\n }\n else {\n return Promise.resolve();\n }\n };\n EventManager.prototype.onChange = function (viewSnaps) {\n for (var _i = 0, viewSnaps_1 = viewSnaps; _i < viewSnaps_1.length; _i++) {\n var viewSnap = viewSnaps_1[_i];\n var query = viewSnap.query;\n var queryInfo = this.queries.get(query);\n if (queryInfo) {\n for (var _a = 0, _b = queryInfo.listeners; _a < _b.length; _a++) {\n var listener = _b[_a];\n listener.onViewSnapshot(viewSnap);\n }\n queryInfo.viewSnap = viewSnap;\n }\n }\n };\n EventManager.prototype.onError = function (query, error) {\n var queryInfo = this.queries.get(query);\n if (queryInfo) {\n for (var _i = 0, _a = queryInfo.listeners; _i < _a.length; _i++) {\n var listener = _a[_i];\n listener.onError(error);\n }\n }\n // Remove all listeners. NOTE: We don't need to call syncEngine.unlisten()\n // after an error.\n this.queries.delete(query);\n };\n EventManager.prototype.applyOnlineStateChange = function (onlineState) {\n this.onlineState = onlineState;\n this.queries.forEach(function (_, queryInfo) {\n for (var _i = 0, _a = queryInfo.listeners; _i < _a.length; _i++) {\n var listener = _a[_i];\n listener.applyOnlineStateChange(onlineState);\n }\n });\n };\n return EventManager;\n}());\nexport { EventManager };\n/**\n * QueryListener takes a series of internal view snapshots and determines\n * when to raise the event.\n *\n * It uses an Observer to dispatch events.\n */\nvar QueryListener = /** @class */ (function () {\n function QueryListener(query, queryObserver, options) {\n this.query = query;\n this.queryObserver = queryObserver;\n /**\n * Initial snapshots (e.g. from cache) may not be propagated to the wrapped\n * observer. This flag is set to true once we've actually raised an event.\n */\n this.raisedInitialEvent = false;\n this.onlineState = OnlineState.Unknown;\n this.options = options || {};\n }\n QueryListener.prototype.onViewSnapshot = function (snap) {\n assert(snap.docChanges.length > 0 || snap.syncStateChanged, 'We got a new snapshot with no changes?');\n if (!this.options.includeDocumentMetadataChanges) {\n // Remove the metadata only changes.\n var docChanges = [];\n for (var _i = 0, _a = snap.docChanges; _i < _a.length; _i++) {\n var docChange = _a[_i];\n if (docChange.type !== ChangeType.Metadata) {\n docChanges.push(docChange);\n }\n }\n snap = new ViewSnapshot(snap.query, snap.docs, snap.oldDocs, docChanges, snap.fromCache, snap.hasPendingWrites, snap.syncStateChanged);\n }\n if (!this.raisedInitialEvent) {\n if (this.shouldRaiseInitialEvent(snap, this.onlineState)) {\n this.raiseInitialEvent(snap);\n }\n }\n else if (this.shouldRaiseEvent(snap)) {\n this.queryObserver.next(snap);\n }\n this.snap = snap;\n };\n QueryListener.prototype.onError = function (error) {\n this.queryObserver.error(error);\n };\n QueryListener.prototype.applyOnlineStateChange = function (onlineState) {\n this.onlineState = onlineState;\n if (this.snap &&\n !this.raisedInitialEvent &&\n this.shouldRaiseInitialEvent(this.snap, onlineState)) {\n this.raiseInitialEvent(this.snap);\n }\n };\n QueryListener.prototype.shouldRaiseInitialEvent = function (snap, onlineState) {\n assert(!this.raisedInitialEvent, 'Determining whether to raise first event but already had first event');\n // Always raise the first event when we're synced\n if (!snap.fromCache) {\n return true;\n }\n // NOTE: We consider OnlineState.Unknown as online (it should become Failed\n // or Online if we wait long enough).\n var maybeOnline = onlineState !== OnlineState.Failed;\n // Don't raise the event if we're online, aren't synced yet (checked\n // above) and are waiting for a sync.\n if (this.options.waitForSyncWhenOnline && maybeOnline) {\n assert(snap.fromCache, 'Waiting for sync, but snapshot is not from cache');\n return false;\n }\n // Raise data from cache if we have any documents or we are offline\n return !snap.docs.isEmpty() || onlineState === OnlineState.Failed;\n };\n QueryListener.prototype.shouldRaiseEvent = function (snap) {\n // We don't need to handle includeDocumentMetadataChanges here because\n // the Metadata only changes have already been stripped out if needed.\n // At this point the only changes we will see are the ones we should\n // propagate.\n if (snap.docChanges.length > 0) {\n return true;\n }\n var hasPendingWritesChanged = this.snap && this.snap.hasPendingWrites !== snap.hasPendingWrites;\n if (snap.syncStateChanged || hasPendingWritesChanged) {\n return this.options.includeQueryMetadataChanges === true;\n }\n // Generally we should have hit one of the cases above, but it's possible\n // to get here if there were only metadata docChanges and they got\n // stripped out.\n return false;\n };\n QueryListener.prototype.raiseInitialEvent = function (snap) {\n assert(!this.raisedInitialEvent, 'Trying to raise initial events for second time');\n snap = new ViewSnapshot(snap.query, snap.docs, DocumentSet.emptySet(snap.docs), QueryListener.getInitialViewChanges(snap), snap.fromCache, snap.hasPendingWrites, true);\n this.raisedInitialEvent = true;\n this.queryObserver.next(snap);\n };\n /** Returns changes as if all documents in the snap were added. */\n QueryListener.getInitialViewChanges = function (snap) {\n var result = [];\n snap.docs.forEach(function (doc) {\n result.push({ type: ChangeType.Added, doc: doc });\n });\n return result;\n };\n return QueryListener;\n}());\nexport { QueryListener };\n\n//# sourceMappingURL=event_manager.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { fail } from '../util/assert';\n/**\n * PersistencePromise<> is essentially a re-implementation of Promise<> except\n * it has a .next() method instead of .then() and .next() and .catch() callbacks\n * are executed synchronously when a PersistencePromise resolves rather than\n * asynchronously (Promise<> implementations use setImmediate() or similar).\n *\n * This is necessary to interoperate with IndexedDB which will automatically\n * commit transactions if control is returned to the event loop without\n * synchronously initiating another operation on the transaction.\n *\n * NOTE: .then() and .catch() only allow a single consumer, unlike normal\n * Promises.\n */\nvar PersistencePromise = /** @class */ (function () {\n function PersistencePromise(callback) {\n var _this = this;\n // NOTE: next/catchCallback will always point to our own wrapper functions,\n // not the user's raw next() or catch() callbacks.\n // tslint:disable-next-line:no-any Accept any result type for the next call in the Promise chain.\n this.nextCallback = null;\n // tslint:disable-next-line:no-any Accept any result type for the error handler.\n this.catchCallback = null;\n // When the operation resolves, we'll set result or error and mark isDone.\n this.result = undefined;\n this.error = undefined;\n this.isDone = false;\n // Set to true when .then() or .catch() are called and prevents additional\n // chaining.\n this.callbackAttached = false;\n callback(function (value) {\n _this.isDone = true;\n _this.result = value;\n if (_this.nextCallback) {\n // value should be defined unless T is Void, but we can't express\n // that in the type system.\n _this.nextCallback(value);\n }\n }, function (error) {\n _this.isDone = true;\n _this.error = error;\n if (_this.catchCallback) {\n _this.catchCallback(error);\n }\n });\n }\n PersistencePromise.prototype.catch = function (fn) {\n return this.next(undefined, fn);\n };\n PersistencePromise.prototype.next = function (nextFn, catchFn) {\n var _this = this;\n if (this.callbackAttached) {\n fail('Called next() or catch() twice for PersistencePromise');\n }\n this.callbackAttached = true;\n if (this.isDone) {\n if (!this.error) {\n return this.wrapSuccess(nextFn, this.result);\n }\n else {\n return this.wrapFailure(catchFn, this.error);\n }\n }\n else {\n return new PersistencePromise(function (resolve, reject) {\n _this.nextCallback = function (value) {\n _this.wrapSuccess(nextFn, value).next(resolve, reject);\n };\n _this.catchCallback = function (error) {\n _this.wrapFailure(catchFn, error).next(resolve, reject);\n };\n });\n }\n };\n PersistencePromise.prototype.toPromise = function () {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.next(resolve, reject);\n });\n };\n PersistencePromise.prototype.wrapUserFunction = function (fn) {\n try {\n var result = fn();\n if (result instanceof PersistencePromise) {\n return result;\n }\n else {\n return PersistencePromise.resolve(result);\n }\n }\n catch (e) {\n return PersistencePromise.reject(e);\n }\n };\n PersistencePromise.prototype.wrapSuccess = function (nextFn, value) {\n if (nextFn) {\n return this.wrapUserFunction(function () { return nextFn(value); });\n }\n else {\n // If there's no nextFn, then R must be the same as T but we\n // can't express that in the type system.\n // tslint:disable-next-line:no-any\n return PersistencePromise.resolve(value);\n }\n };\n PersistencePromise.prototype.wrapFailure = function (catchFn, error) {\n if (catchFn) {\n return this.wrapUserFunction(function () { return catchFn(error); });\n }\n else {\n return PersistencePromise.reject(error);\n }\n };\n PersistencePromise.resolve = function (result) {\n return new PersistencePromise(function (resolve, reject) {\n resolve(result);\n });\n };\n PersistencePromise.reject = function (error) {\n return new PersistencePromise(function (resolve, reject) {\n reject(error);\n });\n };\n PersistencePromise.waitFor = function (\n // tslint:disable-next-line:no-any Accept all Promise types in waitFor().\n all) {\n return all.reduce(function (promise, nextPromise, idx) {\n return promise.next(function () {\n return nextPromise;\n });\n }, PersistencePromise.resolve());\n };\n PersistencePromise.map = function (all) {\n var results = [];\n var first = true;\n // initial is ignored, so we can cheat on the type.\n // tslint:disable-next-line:no-any\n var initial = PersistencePromise.resolve(null);\n return all\n .reduce(function (promise, nextPromise) {\n return promise.next(function (result) {\n if (!first) {\n results.push(result);\n }\n first = false;\n return nextPromise;\n });\n }, initial)\n .next(function (result) {\n results.push(result);\n return results;\n });\n };\n return PersistencePromise;\n}());\nexport { PersistencePromise };\n\n//# sourceMappingURL=persistence_promise.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { documentKeySet } from '../model/collections';\nimport { PersistencePromise } from './persistence_promise';\n/**\n * A garbage collector implementation that eagerly collects documents as soon as\n * they're no longer referenced in any of its registered GarbageSources.\n *\n * This implementation keeps track of a set of keys that are potentially garbage\n * without keeping an exact reference count. During collectGarbage, the\n * collector verifies that all potential garbage keys actually have no\n * references by consulting its list of garbage sources.\n */\nvar EagerGarbageCollector = /** @class */ (function () {\n function EagerGarbageCollector() {\n this.isEager = true;\n /**\n * The garbage collectible sources to double-check during garbage collection.\n */\n this.sources = [];\n /**\n * A set of potentially garbage keys.\n * PORTING NOTE: This would be a mutable set if Javascript had one.\n */\n this.potentialGarbage = documentKeySet();\n }\n EagerGarbageCollector.prototype.addGarbageSource = function (garbageSource) {\n this.sources.push(garbageSource);\n garbageSource.setGarbageCollector(this);\n };\n EagerGarbageCollector.prototype.removeGarbageSource = function (garbageSource) {\n this.sources.splice(this.sources.indexOf(garbageSource), 1);\n garbageSource.setGarbageCollector(null);\n };\n EagerGarbageCollector.prototype.addPotentialGarbageKey = function (key) {\n this.potentialGarbage = this.potentialGarbage.add(key);\n };\n EagerGarbageCollector.prototype.collectGarbage = function (txn) {\n var _this = this;\n var promises = [];\n var garbageKeys = documentKeySet();\n this.potentialGarbage.forEach(function (key) {\n var hasRefsPromise = _this.documentHasAnyReferences(txn, key);\n promises.push(hasRefsPromise.next(function (hasRefs) {\n // If there are no references, get the key.\n if (!hasRefs) {\n garbageKeys = garbageKeys.add(key);\n }\n return PersistencePromise.resolve();\n }));\n });\n // Clear locally retained potential keys and returned confirmed garbage.\n this.potentialGarbage = documentKeySet();\n return PersistencePromise.waitFor(promises).next(function () { return garbageKeys; });\n };\n EagerGarbageCollector.prototype.documentHasAnyReferences = function (txn, key) {\n var initial = PersistencePromise.resolve(false);\n return this.sources\n .map(function (source) { return function () { return source.containsKey(txn, key); }; })\n .reduce(function (promise, nextPromise) {\n return promise.next(function (result) {\n if (result) {\n return PersistencePromise.resolve(true);\n }\n else {\n return nextPromise();\n }\n });\n }, initial);\n };\n return EagerGarbageCollector;\n}());\nexport { EagerGarbageCollector };\n\n//# sourceMappingURL=eager_garbage_collector.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ChangeType } from '../core/view_snapshot';\nimport { documentKeySet } from '../model/collections';\n/**\n * A set of changes to what documents are currently in view and out of view for\n * a given query. These changes are sent to the LocalStore by the View (via\n * the SyncEngine) and are used to pin / unpin documents as appropriate.\n */\nvar LocalViewChanges = /** @class */ (function () {\n function LocalViewChanges(query, addedKeys, removedKeys) {\n this.query = query;\n this.addedKeys = addedKeys;\n this.removedKeys = removedKeys;\n }\n LocalViewChanges.fromSnapshot = function (viewSnapshot) {\n var addedKeys = documentKeySet();\n var removedKeys = documentKeySet();\n for (var _i = 0, _a = viewSnapshot.docChanges; _i < _a.length; _i++) {\n var docChange = _a[_i];\n switch (docChange.type) {\n case ChangeType.Added:\n addedKeys = addedKeys.add(docChange.doc.key);\n break;\n case ChangeType.Removed:\n removedKeys = removedKeys.add(docChange.doc.key);\n break;\n default:\n }\n }\n return new LocalViewChanges(viewSnapshot.query, addedKeys, removedKeys);\n };\n return LocalViewChanges;\n}());\nexport { LocalViewChanges };\n\n//# sourceMappingURL=local_view_changes.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { documentKeySet } from '../model/collections';\nimport { DocumentKey } from '../model/document_key';\nimport { primitiveComparator } from '../util/misc';\nimport { SortedSet } from '../util/sorted_set';\nimport { PersistencePromise } from './persistence_promise';\n/**\n * A collection of references to a document from some kind of numbered entity\n * (either a target ID or batch ID). As references are added to or removed from\n * the set corresponding events are emitted to a registered garbage collector.\n *\n * Each reference is represented by a DocumentReference object. Each of them\n * contains enough information to uniquely identify the reference. They are all\n * stored primarily in a set sorted by key. A document is considered garbage if\n * there's no references in that set (this can be efficiently checked thanks to\n * sorting by key).\n *\n * ReferenceSet also keeps a secondary set that contains references sorted by\n * IDs. This one is used to efficiently implement removal of all references by\n * some target ID.\n */\nvar ReferenceSet = /** @class */ (function () {\n function ReferenceSet() {\n // A set of outstanding references to a document sorted by key.\n this.refsByKey = new SortedSet(DocReference.compareByKey);\n // A set of outstanding references to a document sorted by target id.\n this.refsByTarget = new SortedSet(DocReference.compareByTargetId);\n /** Keeps track of keys that have references */\n this.garbageCollector = null;\n }\n /** Returns true if the reference set contains no references. */\n ReferenceSet.prototype.isEmpty = function () {\n return this.refsByKey.isEmpty();\n };\n /** Adds a reference to the given document key for the given ID. */\n ReferenceSet.prototype.addReference = function (key, id) {\n var ref = new DocReference(key, id);\n this.refsByKey = this.refsByKey.add(ref);\n this.refsByTarget = this.refsByTarget.add(ref);\n };\n /** Add references to the given document keys for the given ID. */\n ReferenceSet.prototype.addReferences = function (keys, id) {\n var _this = this;\n keys.forEach(function (key) { return _this.addReference(key, id); });\n };\n /**\n * Removes a reference to the given document key for the given\n * ID.\n */\n ReferenceSet.prototype.removeReference = function (key, id) {\n this.removeRef(new DocReference(key, id));\n };\n ReferenceSet.prototype.removeReferences = function (keys, id) {\n var _this = this;\n keys.forEach(function (key) { return _this.removeReference(key, id); });\n };\n /**\n * Clears all references with a given ID. Calls removeRef() for each key\n * removed.\n */\n ReferenceSet.prototype.removeReferencesForId = function (id) {\n var _this = this;\n var emptyKey = DocumentKey.EMPTY;\n var startRef = new DocReference(emptyKey, id);\n var endRef = new DocReference(emptyKey, id + 1);\n this.refsByTarget.forEachInRange([startRef, endRef], function (ref) {\n _this.removeRef(ref);\n });\n };\n ReferenceSet.prototype.removeAllReferences = function () {\n var _this = this;\n this.refsByKey.forEach(function (ref) { return _this.removeRef(ref); });\n };\n ReferenceSet.prototype.removeRef = function (ref) {\n this.refsByKey = this.refsByKey.delete(ref);\n this.refsByTarget = this.refsByTarget.delete(ref);\n if (this.garbageCollector !== null) {\n this.garbageCollector.addPotentialGarbageKey(ref.key);\n }\n };\n ReferenceSet.prototype.referencesForId = function (id) {\n var emptyKey = DocumentKey.EMPTY;\n var startRef = new DocReference(emptyKey, id);\n var endRef = new DocReference(emptyKey, id + 1);\n var keys = documentKeySet();\n this.refsByTarget.forEachInRange([startRef, endRef], function (ref) {\n keys = keys.add(ref.key);\n });\n return keys;\n };\n ReferenceSet.prototype.setGarbageCollector = function (garbageCollector) {\n this.garbageCollector = garbageCollector;\n };\n ReferenceSet.prototype.containsKey = function (txn, key) {\n var ref = new DocReference(key, 0);\n var firstRef = this.refsByKey.firstAfterOrEqual(ref);\n return PersistencePromise.resolve(firstRef !== null && key.isEqual(firstRef.key));\n };\n return ReferenceSet;\n}());\nexport { ReferenceSet };\nvar DocReference = /** @class */ (function () {\n function DocReference(key, targetOrBatchId) {\n this.key = key;\n this.targetOrBatchId = targetOrBatchId;\n }\n /** Compare by key then by ID */\n DocReference.compareByKey = function (left, right) {\n return (DocumentKey.comparator(left.key, right.key) ||\n primitiveComparator(left.targetOrBatchId, right.targetOrBatchId));\n };\n /** Compare by ID then by key */\n DocReference.compareByTargetId = function (left, right) {\n return (primitiveComparator(left.targetOrBatchId, right.targetOrBatchId) ||\n DocumentKey.comparator(left.key, right.key));\n };\n return DocReference;\n}());\nexport { DocReference };\n\n//# sourceMappingURL=reference_set.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { documentKeySet } from '../model/collections';\nimport { Document } from '../model/document';\nimport { DocumentSet } from '../model/document_set';\nimport { CurrentStatusUpdate, ResetMapping, UpdateMapping } from '../remote/remote_event';\nimport { assert, fail } from '../util/assert';\nimport { OnlineState } from './types';\nimport { ChangeType, DocumentChangeSet, SyncState, ViewSnapshot } from './view_snapshot';\nvar AddedLimboDocument = /** @class */ (function () {\n function AddedLimboDocument(key) {\n this.key = key;\n }\n return AddedLimboDocument;\n}());\nexport { AddedLimboDocument };\nvar RemovedLimboDocument = /** @class */ (function () {\n function RemovedLimboDocument(key) {\n this.key = key;\n }\n return RemovedLimboDocument;\n}());\nexport { RemovedLimboDocument };\n/**\n * View is responsible for computing the final merged truth of what docs are in\n * a query. It gets notified of local and remote changes to docs, and applies\n * the query filters and limits to determine the most correct possible results.\n */\nvar View = /** @class */ (function () {\n function View(query, \n /** Documents included in the remote target */\n syncedDocuments) {\n this.query = query;\n this.syncedDocuments = syncedDocuments;\n this.syncState = null;\n /**\n * A flag whether the view is current with the backend. A view is considered\n * current after it has seen the current flag from the backend and did not\n * lose consistency within the watch stream (e.g. because of an existence\n * filter mismatch).\n */\n this.current = false;\n /** Documents in the view but not in the remote target */\n this.limboDocuments = documentKeySet();\n /** Document Keys that have local changes */\n this.mutatedKeys = documentKeySet();\n this.documentSet = new DocumentSet(query.docComparator.bind(query));\n }\n /**\n * Iterates over a set of doc changes, applies the query limit, and computes\n * what the new results should be, what the changes were, and whether we may\n * need to go back to the local cache for more results. Does not make any\n * changes to the view.\n * @param docChanges The doc changes to apply to this view.\n * @param previousChanges If this is being called with a refill, then start\n * with this set of docs and changes instead of the current view.\n * @return a new set of docs, changes, and refill flag.\n */\n View.prototype.computeDocChanges = function (docChanges, previousChanges) {\n var _this = this;\n var changeSet = previousChanges\n ? previousChanges.changeSet\n : new DocumentChangeSet();\n var oldDocumentSet = previousChanges\n ? previousChanges.documentSet\n : this.documentSet;\n var newMutatedKeys = previousChanges\n ? previousChanges.mutatedKeys\n : this.mutatedKeys;\n var newDocumentSet = oldDocumentSet;\n var needsRefill = false;\n // Track the last doc in a (full) limit. This is necessary, because some\n // update (a delete, or an update moving a doc past the old limit) might\n // mean there is some other document in the local cache that either should\n // come (1) between the old last limit doc and the new last document, in the\n // case of updates, or (2) after the new last document, in the case of\n // deletes. So we keep this doc at the old limit to compare the updates to.\n //\n // Note that this should never get used in a refill (when previousChanges is\n // set), because there will only be adds -- no deletes or updates.\n var lastDocInLimit = this.query.hasLimit() && oldDocumentSet.size === this.query.limit\n ? oldDocumentSet.last()\n : null;\n docChanges.inorderTraversal(function (key, newMaybeDoc) {\n var oldDoc = oldDocumentSet.get(key);\n var newDoc = newMaybeDoc instanceof Document ? newMaybeDoc : null;\n if (newDoc) {\n assert(key.isEqual(newDoc.key), 'Mismatching keys found in document changes: ' +\n key +\n ' != ' +\n newDoc.key);\n newDoc = _this.query.matches(newDoc) ? newDoc : null;\n }\n if (newDoc) {\n newDocumentSet = newDocumentSet.add(newDoc);\n if (newDoc.hasLocalMutations) {\n newMutatedKeys = newMutatedKeys.add(key);\n }\n else {\n newMutatedKeys = newMutatedKeys.delete(key);\n }\n }\n else {\n newDocumentSet = newDocumentSet.delete(key);\n newMutatedKeys = newMutatedKeys.delete(key);\n }\n // Calculate change\n if (oldDoc && newDoc) {\n var docsEqual = oldDoc.data.isEqual(newDoc.data);\n if (!docsEqual ||\n oldDoc.hasLocalMutations !== newDoc.hasLocalMutations) {\n // only report a change if document actually changed\n if (docsEqual) {\n changeSet.track({ type: ChangeType.Metadata, doc: newDoc });\n }\n else {\n changeSet.track({ type: ChangeType.Modified, doc: newDoc });\n }\n if (lastDocInLimit &&\n _this.query.docComparator(newDoc, lastDocInLimit) > 0) {\n // This doc moved from inside the limit to after the limit.\n // That means there may be some doc in the local cache that's\n // actually less than this one.\n needsRefill = true;\n }\n }\n }\n else if (!oldDoc && newDoc) {\n changeSet.track({ type: ChangeType.Added, doc: newDoc });\n }\n else if (oldDoc && !newDoc) {\n changeSet.track({ type: ChangeType.Removed, doc: oldDoc });\n if (lastDocInLimit) {\n // A doc was removed from a full limit query. We'll need to\n // requery from the local cache to see if we know about some other\n // doc that should be in the results.\n needsRefill = true;\n }\n }\n });\n if (this.query.hasLimit()) {\n // TODO(klimt): Make DocumentSet size be constant time.\n while (newDocumentSet.size > this.query.limit) {\n var oldDoc = newDocumentSet.last();\n newDocumentSet = newDocumentSet.delete(oldDoc.key);\n changeSet.track({ type: ChangeType.Removed, doc: oldDoc });\n }\n }\n assert(!needsRefill || !previousChanges, 'View was refilled using docs that themselves needed refilling.');\n return {\n documentSet: newDocumentSet,\n changeSet: changeSet,\n needsRefill: needsRefill,\n mutatedKeys: newMutatedKeys\n };\n };\n /**\n * Updates the view with the given ViewDocumentChanges and updates limbo docs\n * and sync state from the given (optional) target change.\n * @param docChanges The set of changes to make to the view's docs.\n * @param targetChange A target change to apply for computing limbo docs and\n * sync state.\n * @return A new ViewChange with the given docs, changes, and sync state.\n */\n View.prototype.applyChanges = function (docChanges, targetChange) {\n var _this = this;\n assert(!docChanges.needsRefill, 'Cannot apply changes that need a refill');\n var oldDocs = this.documentSet;\n this.documentSet = docChanges.documentSet;\n this.mutatedKeys = docChanges.mutatedKeys;\n // Sort changes based on type and query comparator\n var changes = docChanges.changeSet.getChanges();\n changes.sort(function (c1, c2) {\n return (compareChangeType(c1.type, c2.type) ||\n _this.query.docComparator(c1.doc, c2.doc));\n });\n this.applyTargetChange(targetChange);\n var limboChanges = this.updateLimboDocuments();\n var synced = this.limboDocuments.size === 0 && this.current;\n var newSyncState = synced ? SyncState.Synced : SyncState.Local;\n var syncStateChanged = newSyncState !== this.syncState;\n this.syncState = newSyncState;\n if (changes.length === 0 && !syncStateChanged) {\n // no changes\n return { limboChanges: limboChanges };\n }\n else {\n var snap = new ViewSnapshot(this.query, docChanges.documentSet, oldDocs, changes, newSyncState === SyncState.Local, !docChanges.mutatedKeys.isEmpty(), syncStateChanged);\n return {\n snapshot: snap,\n limboChanges: limboChanges\n };\n }\n };\n /**\n * Applies an OnlineState change to the view, potentially generating a\n * ViewChange if the view's syncState changes as a result.\n */\n View.prototype.applyOnlineStateChange = function (onlineState) {\n if (this.current && onlineState === OnlineState.Failed) {\n // If we're offline, set `current` to false and then call applyChanges()\n // to refresh our syncState and generate a ViewChange as appropriate. We\n // are guaranteed to get a new TargetChange that sets `current` back to\n // true once the client is back online.\n this.current = false;\n return this.applyChanges({\n documentSet: this.documentSet,\n changeSet: new DocumentChangeSet(),\n mutatedKeys: this.mutatedKeys,\n needsRefill: false\n });\n }\n else {\n // No effect, just return a no-op ViewChange.\n return { limboChanges: [] };\n }\n };\n /**\n * Returns whether the doc for the given key should be in limbo.\n */\n View.prototype.shouldBeInLimbo = function (key) {\n // If the remote end says it's part of this query, it's not in limbo.\n if (this.syncedDocuments.has(key)) {\n return false;\n }\n // The local store doesn't think it's a result, so it shouldn't be in limbo.\n if (!this.documentSet.has(key)) {\n return false;\n }\n // If there are local changes to the doc, they might explain why the server\n // doesn't know that it's part of the query. So don't put it in limbo.\n // TODO(klimt): Ideally, we would only consider changes that might actually\n // affect this specific query.\n if (this.documentSet.get(key).hasLocalMutations) {\n return false;\n }\n // Everything else is in limbo.\n return true;\n };\n /**\n * Updates syncedDocuments, current, and limbo docs based on the given change.\n * Returns the list of changes to which docs are in limbo.\n */\n View.prototype.applyTargetChange = function (targetChange) {\n if (targetChange) {\n var targetMapping = targetChange.mapping;\n if (targetMapping instanceof ResetMapping) {\n this.syncedDocuments = targetMapping.documents;\n }\n else if (targetMapping instanceof UpdateMapping) {\n this.syncedDocuments = targetMapping.applyToKeySet(this.syncedDocuments);\n }\n switch (targetChange.currentStatusUpdate) {\n case CurrentStatusUpdate.MarkCurrent:\n this.current = true;\n break;\n case CurrentStatusUpdate.MarkNotCurrent:\n this.current = false;\n break;\n case CurrentStatusUpdate.None:\n break;\n default:\n fail('Unknown current status update: ' + targetChange.currentStatusUpdate);\n }\n }\n };\n View.prototype.updateLimboDocuments = function () {\n var _this = this;\n // We can only determine limbo documents when we're in-sync with the server.\n if (!this.current) {\n return [];\n }\n // TODO(klimt): Do this incrementally so that it's not quadratic when\n // updating many documents.\n var oldLimboDocuments = this.limboDocuments;\n this.limboDocuments = documentKeySet();\n this.documentSet.forEach(function (doc) {\n if (_this.shouldBeInLimbo(doc.key)) {\n _this.limboDocuments = _this.limboDocuments.add(doc.key);\n }\n });\n // Diff the new limbo docs with the old limbo docs.\n var changes = [];\n oldLimboDocuments.forEach(function (key) {\n if (!_this.limboDocuments.has(key)) {\n changes.push(new RemovedLimboDocument(key));\n }\n });\n this.limboDocuments.forEach(function (key) {\n if (!oldLimboDocuments.has(key)) {\n changes.push(new AddedLimboDocument(key));\n }\n });\n return changes;\n };\n return View;\n}());\nexport { View };\nfunction compareChangeType(c1, c2) {\n var order = function (change) {\n switch (change) {\n case ChangeType.Added:\n return 1;\n case ChangeType.Modified:\n return 2;\n case ChangeType.Metadata:\n // A metadata change is converted to a modified change at the public\n // api layer. Since we sort by document key and then change type,\n // metadata and modified changes must be sorted equivalently.\n return 2;\n case ChangeType.Removed:\n return 0;\n default:\n return fail('Unknown ChangeType: ' + change);\n }\n };\n return order(c1) - order(c2);\n}\n\n//# sourceMappingURL=view.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { EagerGarbageCollector } from '../local/eager_garbage_collector';\nimport { LocalViewChanges } from '../local/local_view_changes';\nimport { QueryData, QueryPurpose } from '../local/query_data';\nimport { ReferenceSet } from '../local/reference_set';\nimport { NoDocument } from '../model/document';\nimport { DocumentKey } from '../model/document_key';\nimport { CurrentStatusUpdate, RemoteEvent } from '../remote/remote_event';\nimport { assert, fail } from '../util/assert';\nimport * as log from '../util/log';\nimport { primitiveComparator } from '../util/misc';\nimport * as objUtils from '../util/obj';\nimport { ObjectMap } from '../util/obj_map';\nimport { SortedMap } from '../util/sorted_map';\nimport { isNullOrUndefined } from '../util/types';\nimport { Query } from './query';\nimport { SnapshotVersion } from './snapshot_version';\nimport { TargetIdGenerator } from './target_id_generator';\nimport { AddedLimboDocument, RemovedLimboDocument, View } from './view';\nvar LOG_TAG = 'SyncEngine';\n/**\n * QueryView contains all of the data that SyncEngine needs to keep track of for\n * a particular query.\n */\nvar QueryView = /** @class */ (function () {\n function QueryView(\n /**\n * The query itself.\n */\n query, \n /**\n * The target number created by the client that is used in the watch\n * stream to identify this query.\n */\n targetId, \n /**\n * An identifier from the datastore backend that indicates the last state\n * of the results that was received. This can be used to indicate where\n * to continue receiving new doc changes for the query.\n */\n resumeToken, \n /**\n * The view is responsible for computing the final merged truth of what\n * docs are in the query. It gets notified of local and remote changes,\n * and applies the query filters and limits to determine the most correct\n * possible results.\n */\n view) {\n this.query = query;\n this.targetId = targetId;\n this.resumeToken = resumeToken;\n this.view = view;\n }\n return QueryView;\n}());\n/**\n * SyncEngine is the central controller in the client SDK architecture. It is\n * the glue code between the EventManager, LocalStore, and RemoteStore. Some of\n * SyncEngine's responsibilities include:\n * 1. Coordinating client requests and remote events between the EventManager\n * and the local and remote data stores.\n * 2. Managing a View object for each query, providing the unified view between\n * the local and remote data stores.\n * 3. Notifying the RemoteStore when the LocalStore has new mutations in its\n * queue that need sending to the backend.\n *\n * The SyncEngine’s methods should only ever be called by methods running in the\n * global async queue.\n */\nvar SyncEngine = /** @class */ (function () {\n function SyncEngine(localStore, remoteStore, currentUser) {\n this.localStore = localStore;\n this.remoteStore = remoteStore;\n this.currentUser = currentUser;\n this.viewHandler = null;\n this.errorHandler = null;\n this.queryViewsByQuery = new ObjectMap(function (q) {\n return q.canonicalId();\n });\n this.queryViewsByTarget = {};\n this.limboTargetsByKey = new SortedMap(DocumentKey.comparator);\n this.limboKeysByTarget = {};\n this.limboDocumentRefs = new ReferenceSet();\n this.limboCollector = new EagerGarbageCollector();\n /** Stores user completion handlers, indexed by User and BatchId. */\n this.mutationUserCallbacks = {};\n this.targetIdGenerator = TargetIdGenerator.forSyncEngine();\n }\n /** Subscribes view and error handler. Can be called only once. */\n SyncEngine.prototype.subscribe = function (viewHandler, errorHandler) {\n assert(viewHandler !== null && errorHandler !== null, 'View and error handlers cannot be null');\n assert(this.viewHandler === null && this.errorHandler === null, 'SyncEngine already has a subscriber.');\n this.viewHandler = viewHandler;\n this.errorHandler = errorHandler;\n this.limboCollector.addGarbageSource(this.limboDocumentRefs);\n };\n /**\n * Initiates the new listen, resolves promise when listen enqueued to the\n * server. All the subsequent view snapshots or errors are sent to the\n * subscribed handlers. Returns the targetId of the query.\n */\n SyncEngine.prototype.listen = function (query) {\n var _this = this;\n this.assertSubscribed('listen()');\n assert(!this.queryViewsByQuery.has(query), 'We already listen to the query: ' + query);\n return this.localStore.allocateQuery(query).then(function (queryData) {\n return _this.localStore\n .executeQuery(query)\n .then(function (docs) {\n return _this.localStore\n .remoteDocumentKeys(queryData.targetId)\n .then(function (remoteKeys) {\n var view = new View(query, remoteKeys);\n var viewDocChanges = view.computeDocChanges(docs);\n var viewChange = view.applyChanges(viewDocChanges);\n assert(viewChange.limboChanges.length === 0, 'View returned limbo docs before target ack from the server.');\n assert(!!viewChange.snapshot, 'applyChanges for new view should always return a snapshot');\n var data = new QueryView(query, queryData.targetId, queryData.resumeToken, view);\n _this.queryViewsByQuery.set(query, data);\n _this.queryViewsByTarget[queryData.targetId] = data;\n _this.viewHandler([viewChange.snapshot]);\n _this.remoteStore.listen(queryData);\n });\n })\n .then(function () {\n return queryData.targetId;\n });\n });\n };\n /** Stops listening to the query. */\n SyncEngine.prototype.unlisten = function (query) {\n var _this = this;\n this.assertSubscribed('unlisten()');\n var queryView = this.queryViewsByQuery.get(query);\n assert(!!queryView, 'Trying to unlisten on query not found:' + query);\n return this.localStore.releaseQuery(query).then(function () {\n _this.remoteStore.unlisten(queryView.targetId);\n return _this.removeAndCleanupQuery(queryView).then(function () {\n return _this.localStore.collectGarbage();\n });\n });\n };\n /**\n * Initiates the write of local mutation batch which involves adding the\n * writes to the mutation queue, notifying the remote store about new\n * mutations and raising events for any changes this write caused.\n *\n * The promise returned by this call is resolved when the above steps\n * have completed, *not* when the write was acked by the backend. The\n * userCallback is resolved once the write was acked/rejected by the\n * backend (or failed locally for any other reason).\n */\n SyncEngine.prototype.write = function (batch, userCallback) {\n var _this = this;\n this.assertSubscribed('write()');\n return this.localStore\n .localWrite(batch)\n .then(function (result) {\n _this.addMutationCallback(result.batchId, userCallback);\n return _this.emitNewSnapsAndNotifyLocalStore(result.changes);\n })\n .then(function () {\n return _this.remoteStore.fillWritePipeline();\n });\n };\n // TODO(klimt): Wrap the given error in a standard Firestore error object.\n SyncEngine.prototype.wrapUpdateFunctionError = function (error) {\n return error;\n };\n /**\n * Takes an updateFunction in which a set of reads and writes can be performed\n * atomically. In the updateFunction, the client can read and write values\n * using the supplied transaction object. After the updateFunction, all\n * changes will be committed. If some other client has changed any of the data\n * referenced, then the updateFunction will be called again. If the\n * updateFunction still fails after the given number of retries, then the\n * transaction will be rejection.\n *\n * The transaction object passed to the updateFunction contains methods for\n * accessing documents and collections. Unlike other datastore access, data\n * accessed with the transaction will not reflect local changes that have not\n * been committed. For this reason, it is required that all reads are\n * performed before any writes. Transactions must be performed while online.\n *\n * The promise returned is resolved when the transaction is fully committed.\n */\n SyncEngine.prototype.runTransaction = function (updateFunction, retries) {\n var _this = this;\n if (retries === void 0) { retries = 5; }\n assert(retries >= 0, 'Got negative number of retries for transaction.');\n var transaction = this.remoteStore.createTransaction();\n var wrappedUpdateFunction = function () {\n try {\n var userPromise = updateFunction(transaction);\n if (isNullOrUndefined(userPromise) ||\n !userPromise.catch ||\n !userPromise.then) {\n return Promise.reject(Error('Transaction callback must return a Promise'));\n }\n return userPromise.catch(function (e) {\n return Promise.reject(_this.wrapUpdateFunctionError(e));\n });\n }\n catch (e) {\n return Promise.reject(_this.wrapUpdateFunctionError(e));\n }\n };\n return wrappedUpdateFunction().then(function (result) {\n return transaction\n .commit()\n .then(function () {\n return result;\n })\n .catch(function (error) {\n if (retries === 0) {\n return Promise.reject(error);\n }\n // TODO(klimt): Put in a retry delay?\n return _this.runTransaction(updateFunction, retries - 1);\n });\n });\n };\n SyncEngine.prototype.applyRemoteEvent = function (remoteEvent) {\n var _this = this;\n this.assertSubscribed('applyRemoteEvent()');\n // Make sure limbo documents are deleted if there were no results\n objUtils.forEachNumber(remoteEvent.targetChanges, function (targetId, targetChange) {\n var limboKey = _this.limboKeysByTarget[targetId];\n if (limboKey &&\n targetChange.currentStatusUpdate ===\n CurrentStatusUpdate.MarkCurrent &&\n !remoteEvent.documentUpdates.get(limboKey)) {\n // When listening to a query the server responds with a snapshot\n // containing documents matching the query and a current marker\n // telling us we're now in sync. It's possible for these to arrive\n // as separate remote events or as a single remote event.\n // For a document query, there will be no documents sent in the\n // response if the document doesn't exist.\n //\n // If the snapshot arrives separately from the current marker,\n // we handle it normally and updateTrackedLimbos will resolve the\n // limbo status of the document, removing it from limboDocumentRefs.\n // This works because clients only initiate limbo resolution when\n // a target is current and because all current targets are\n // always at a consistent snapshot.\n //\n // However, if the document doesn't exist and the current marker\n // arrives, the document is not present in the snapshot and our\n // normal view handling would consider the document to remain in\n // limbo indefinitely because there are no updates to the document.\n // To avoid this, we specially handle this just this case here:\n // synthesizing a delete.\n //\n // TODO(dimond): Ideally we would have an explicit lookup query\n // instead resulting in an explicit delete message and we could\n // remove this special logic.\n remoteEvent.addDocumentUpdate(new NoDocument(limboKey, remoteEvent.snapshotVersion));\n }\n });\n return this.localStore.applyRemoteEvent(remoteEvent).then(function (changes) {\n return _this.emitNewSnapsAndNotifyLocalStore(changes, remoteEvent);\n });\n };\n /**\n * Applies an OnlineState change to the sync engine and notifies any views of\n * the change.\n */\n SyncEngine.prototype.applyOnlineStateChange = function (onlineState) {\n var newViewSnapshots = [];\n this.queryViewsByQuery.forEach(function (query, queryView) {\n var viewChange = queryView.view.applyOnlineStateChange(onlineState);\n assert(viewChange.limboChanges.length === 0, 'OnlineState should not affect limbo documents.');\n if (viewChange.snapshot) {\n newViewSnapshots.push(viewChange.snapshot);\n }\n });\n this.viewHandler(newViewSnapshots);\n };\n SyncEngine.prototype.rejectListen = function (targetId, err) {\n var _this = this;\n this.assertSubscribed('rejectListens()');\n var limboKey = this.limboKeysByTarget[targetId];\n if (limboKey) {\n // Since this query failed, we won't want to manually unlisten to it.\n // So go ahead and remove it from bookkeeping.\n this.limboTargetsByKey = this.limboTargetsByKey.remove(limboKey);\n delete this.limboKeysByTarget[targetId];\n // TODO(klimt): We really only should do the following on permission\n // denied errors, but we don't have the cause code here.\n // It's a limbo doc. Create a synthetic event saying it was deleted.\n // This is kind of a hack. Ideally, we would have a method in the local\n // store to purge a document. However, it would be tricky to keep all of\n // the local store's invariants with another method.\n var docMap = new SortedMap(DocumentKey.comparator);\n docMap = docMap.insert(limboKey, new NoDocument(limboKey, SnapshotVersion.forDeletedDoc()));\n var event_1 = new RemoteEvent(SnapshotVersion.MIN, {}, docMap);\n return this.applyRemoteEvent(event_1);\n }\n else {\n var queryView_1 = this.queryViewsByTarget[targetId];\n assert(!!queryView_1, 'Unknown targetId: ' + targetId);\n return this.localStore.releaseQuery(queryView_1.query).then(function () {\n return _this.removeAndCleanupQuery(queryView_1).then(function () {\n _this.errorHandler(queryView_1.query, err);\n });\n });\n }\n };\n SyncEngine.prototype.applySuccessfulWrite = function (mutationBatchResult) {\n var _this = this;\n this.assertSubscribed('applySuccessfulWrite()');\n // The local store may or may not be able to apply the write result and\n // raise events immediately (depending on whether the watcher is caught\n // up), so we raise user callbacks first so that they consistently happen\n // before listen events.\n this.processUserCallback(mutationBatchResult.batch.batchId, \n /*error=*/ null);\n return this.localStore\n .acknowledgeBatch(mutationBatchResult)\n .then(function (changes) {\n return _this.emitNewSnapsAndNotifyLocalStore(changes);\n });\n };\n SyncEngine.prototype.rejectFailedWrite = function (batchId, error) {\n var _this = this;\n this.assertSubscribed('rejectFailedWrite()');\n // The local store may or may not be able to apply the write result and\n // raise events immediately (depending on whether the watcher is caught up),\n // so we raise user callbacks first so that they consistently happen before\n // listen events.\n this.processUserCallback(batchId, error);\n return this.localStore.rejectBatch(batchId).then(function (changes) {\n return _this.emitNewSnapsAndNotifyLocalStore(changes);\n });\n };\n SyncEngine.prototype.addMutationCallback = function (batchId, callback) {\n var newCallbacks = this.mutationUserCallbacks[this.currentUser.toKey()];\n if (!newCallbacks) {\n newCallbacks = new SortedMap(primitiveComparator);\n }\n newCallbacks = newCallbacks.insert(batchId, callback);\n this.mutationUserCallbacks[this.currentUser.toKey()] = newCallbacks;\n };\n /**\n * Resolves or rejects the user callback for the given batch and then discards\n * it.\n */\n SyncEngine.prototype.processUserCallback = function (batchId, error) {\n var newCallbacks = this.mutationUserCallbacks[this.currentUser.toKey()];\n // NOTE: Mutations restored from persistence won't have callbacks, so it's\n // okay for there to be no callback for this ID.\n if (newCallbacks) {\n var callback = newCallbacks.get(batchId);\n if (callback) {\n assert(batchId === newCallbacks.minKey(), 'Mutation callbacks processed out-of-order?');\n if (error) {\n callback.reject(error);\n }\n else {\n callback.resolve();\n }\n newCallbacks = newCallbacks.remove(batchId);\n }\n this.mutationUserCallbacks[this.currentUser.toKey()] = newCallbacks;\n }\n };\n SyncEngine.prototype.removeAndCleanupQuery = function (queryView) {\n this.queryViewsByQuery.delete(queryView.query);\n delete this.queryViewsByTarget[queryView.targetId];\n this.limboDocumentRefs.removeReferencesForId(queryView.targetId);\n return this.gcLimboDocuments();\n };\n SyncEngine.prototype.updateTrackedLimbos = function (targetId, limboChanges) {\n for (var _i = 0, limboChanges_1 = limboChanges; _i < limboChanges_1.length; _i++) {\n var limboChange = limboChanges_1[_i];\n if (limboChange instanceof AddedLimboDocument) {\n this.limboDocumentRefs.addReference(limboChange.key, targetId);\n this.trackLimboChange(limboChange);\n }\n else if (limboChange instanceof RemovedLimboDocument) {\n log.debug(LOG_TAG, 'Document no longer in limbo: ' + limboChange.key);\n this.limboDocumentRefs.removeReference(limboChange.key, targetId);\n }\n else {\n fail('Unknown limbo change: ' + JSON.stringify(limboChange));\n }\n }\n return this.gcLimboDocuments();\n };\n SyncEngine.prototype.trackLimboChange = function (limboChange) {\n var key = limboChange.key;\n if (!this.limboTargetsByKey.get(key)) {\n log.debug(LOG_TAG, 'New document in limbo: ' + key);\n var limboTargetId = this.targetIdGenerator.next();\n var query = Query.atPath(key.path);\n this.limboKeysByTarget[limboTargetId] = key;\n this.remoteStore.listen(new QueryData(query, limboTargetId, QueryPurpose.Listen));\n this.limboTargetsByKey = this.limboTargetsByKey.insert(key, limboTargetId);\n }\n };\n SyncEngine.prototype.gcLimboDocuments = function () {\n var _this = this;\n // HACK: We can use a null transaction here, because we know that the\n // reference set is entirely within memory and doesn't need a store engine.\n return this.limboCollector\n .collectGarbage(null)\n .next(function (keys) {\n keys.forEach(function (key) {\n var limboTargetId = _this.limboTargetsByKey.get(key);\n if (limboTargetId === null) {\n // This target already got removed, because the query failed.\n return;\n }\n _this.remoteStore.unlisten(limboTargetId);\n _this.limboTargetsByKey = _this.limboTargetsByKey.remove(key);\n delete _this.limboKeysByTarget[limboTargetId];\n });\n })\n .toPromise();\n };\n // Visible for testing\n SyncEngine.prototype.currentLimboDocs = function () {\n return this.limboTargetsByKey;\n };\n SyncEngine.prototype.emitNewSnapsAndNotifyLocalStore = function (changes, remoteEvent) {\n var _this = this;\n var newSnaps = [];\n var docChangesInAllViews = [];\n var queriesProcessed = [];\n this.queryViewsByQuery.forEach(function (_, queryView) {\n queriesProcessed.push(Promise.resolve()\n .then(function () {\n var viewDocChanges = queryView.view.computeDocChanges(changes);\n if (!viewDocChanges.needsRefill) {\n return viewDocChanges;\n }\n // The query has a limit and some docs were removed, so we need\n // to re-run the query against the local store to make sure we\n // didn't lose any good docs that had been past the limit.\n return _this.localStore.executeQuery(queryView.query).then(function (docs) {\n return queryView.view.computeDocChanges(docs, viewDocChanges);\n });\n })\n .then(function (viewDocChanges) {\n var targetChange = remoteEvent && remoteEvent.targetChanges[queryView.targetId];\n var viewChange = queryView.view.applyChanges(viewDocChanges, targetChange);\n return _this.updateTrackedLimbos(queryView.targetId, viewChange.limboChanges).then(function () {\n if (viewChange.snapshot) {\n newSnaps.push(viewChange.snapshot);\n var docChanges = LocalViewChanges.fromSnapshot(viewChange.snapshot);\n docChangesInAllViews.push(docChanges);\n }\n });\n }));\n });\n return Promise.all(queriesProcessed)\n .then(function () {\n _this.viewHandler(newSnaps);\n return _this.localStore.notifyLocalViewChanges(docChangesInAllViews);\n })\n .then(function () {\n return _this.localStore.collectGarbage();\n });\n };\n SyncEngine.prototype.assertSubscribed = function (fnName) {\n assert(this.viewHandler !== null && this.errorHandler !== null, 'Trying to call ' + fnName + ' before calling subscribe().');\n };\n SyncEngine.prototype.handleUserChange = function (user) {\n var _this = this;\n this.currentUser = user;\n return this.localStore\n .handleUserChange(user)\n .then(function (changes) {\n return _this.emitNewSnapsAndNotifyLocalStore(changes);\n })\n .then(function () {\n return _this.remoteStore.handleUserChange(user);\n });\n };\n return SyncEngine;\n}());\nexport { SyncEngine };\n\n//# sourceMappingURL=sync_engine.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { documentKeySet, documentVersionMap } from './collections';\nimport { assert } from '../util/assert';\nimport * as misc from '../util/misc';\nexport var BATCHID_UNKNOWN = -1;\n/**\n * A batch of mutations that will be sent as one unit to the backend.\n */\nvar MutationBatch = /** @class */ (function () {\n function MutationBatch(batchId, localWriteTime, mutations) {\n this.batchId = batchId;\n this.localWriteTime = localWriteTime;\n this.mutations = mutations;\n }\n /**\n * Applies all the mutations in this MutationBatch to the specified document\n * to create a new remote document\n *\n * @param docKey The key of the document to apply mutations to.\n * @param maybeDoc The document to apply mutations to.\n * @param batchResult The result of applying the MutationBatch to the\n * backend.\n */\n MutationBatch.prototype.applyToRemoteDocument = function (docKey, maybeDoc, batchResult) {\n if (maybeDoc) {\n assert(maybeDoc.key.isEqual(docKey), \"applyToRemoteDocument: key \" + docKey + \" should match maybeDoc key\\n \" + maybeDoc.key);\n }\n var mutationResults = batchResult.mutationResults;\n assert(mutationResults.length === this.mutations.length, \"Mismatch between mutations length\\n (\" + this.mutations.length + \") and mutation results length\\n (\" + mutationResults.length + \").\");\n for (var i = 0; i < this.mutations.length; i++) {\n var mutation = this.mutations[i];\n if (mutation.key.isEqual(docKey)) {\n var mutationResult = mutationResults[i];\n maybeDoc = mutation.applyToRemoteDocument(maybeDoc, mutationResult);\n }\n }\n return maybeDoc;\n };\n /**\n * Computes the local view of a document given all the mutations in this\n * batch.\n *\n * @param docKey The key of the document to apply mutations to.\n * @param maybeDoc The document to apply mutations to.\n */\n MutationBatch.prototype.applyToLocalView = function (docKey, maybeDoc) {\n if (maybeDoc) {\n assert(maybeDoc.key.isEqual(docKey), \"applyToLocalDocument: key \" + docKey + \" should match maybeDoc key\\n \" + maybeDoc.key);\n }\n var baseDoc = maybeDoc;\n for (var i = 0; i < this.mutations.length; i++) {\n var mutation = this.mutations[i];\n if (mutation.key.isEqual(docKey)) {\n maybeDoc = mutation.applyToLocalView(maybeDoc, baseDoc, this.localWriteTime);\n }\n }\n return maybeDoc;\n };\n MutationBatch.prototype.keys = function () {\n var keySet = documentKeySet();\n for (var _i = 0, _a = this.mutations; _i < _a.length; _i++) {\n var mutation = _a[_i];\n keySet = keySet.add(mutation.key);\n }\n return keySet;\n };\n MutationBatch.prototype.isEqual = function (other) {\n return (this.batchId === other.batchId &&\n misc.arrayEquals(this.mutations, other.mutations));\n };\n /**\n * Returns true if this mutation batch has already been removed from the\n * mutation queue.\n *\n * Note that not all implementations of the MutationQueue necessarily use\n * tombstones as part of their implementation and generally speaking no code\n * outside the mutation queues should really care about this.\n */\n MutationBatch.prototype.isTombstone = function () {\n return this.mutations.length === 0;\n };\n /** Converts this batch into a tombstone */\n MutationBatch.prototype.toTombstone = function () {\n return new MutationBatch(this.batchId, this.localWriteTime, []);\n };\n return MutationBatch;\n}());\nexport { MutationBatch };\n/** The result of applying a mutation batch to the backend. */\nvar MutationBatchResult = /** @class */ (function () {\n function MutationBatchResult(batch, commitVersion, mutationResults, streamToken, \n /**\n * A pre-computed mapping from each mutated document to the resulting\n * version.\n */\n docVersions) {\n this.batch = batch;\n this.commitVersion = commitVersion;\n this.mutationResults = mutationResults;\n this.streamToken = streamToken;\n this.docVersions = docVersions;\n }\n /**\n * Creates a new MutationBatchResult for the given batch and results. There\n * must be one result for each mutation in the batch. This static factory\n * caches a document=>version mapping (docVersions).\n */\n MutationBatchResult.from = function (batch, commitVersion, results, streamToken) {\n assert(batch.mutations.length === results.length, 'Mutations sent ' +\n batch.mutations.length +\n ' must equal results received ' +\n results.length);\n var versionMap = documentVersionMap();\n var mutations = batch.mutations;\n for (var i = 0; i < mutations.length; i++) {\n var version = results[i].version;\n if (version === null) {\n // deletes don't have a version, so we substitute the commitVersion\n // of the entire batch.\n version = commitVersion;\n }\n versionMap = versionMap.insert(mutations[i].key, version);\n }\n return new MutationBatchResult(batch, commitVersion, results, streamToken, versionMap);\n };\n return MutationBatchResult;\n}());\nexport { MutationBatchResult };\n\n//# sourceMappingURL=mutation_batch.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ResourcePath } from '../model/path';\nimport { assert, fail } from '../util/assert';\nvar escapeChar = '\\u0001';\nvar encodedSeparatorChar = '\\u0001';\nvar encodedNul = '\\u0010';\nvar encodedEscape = '\\u0011';\n/**\n * Encodes a resource path into a IndexedDb-compatible string form.\n */\nexport function encode(path) {\n var result = '';\n for (var i = 0; i < path.length; i++) {\n if (result.length > 0) {\n result = encodeSeparator(result);\n }\n result = encodeSegment(path.get(i), result);\n }\n return encodeSeparator(result);\n}\n/** Encodes a single segment of a resource path into the given result */\nfunction encodeSegment(segment, resultBuf) {\n var result = resultBuf;\n var length = segment.length;\n for (var i = 0; i < length; i++) {\n var c = segment.charAt(i);\n switch (c) {\n case '\\0':\n result += escapeChar + encodedNul;\n break;\n case escapeChar:\n result += escapeChar + encodedEscape;\n break;\n default:\n result += c;\n }\n }\n return result;\n}\n/** Encodes a path separator into the given result */\nfunction encodeSeparator(result) {\n return result + escapeChar + encodedSeparatorChar;\n}\n/**\n * Decodes the given IndexedDb-compatible string form of a resource path into\n * a ResourcePath instance. Note that this method is not suitable for use with\n * decoding resource names from the server; those are One Platform format\n * strings.\n */\nexport function decode(path) {\n // Event the empty path must encode as a path of at least length 2. A path\n // with exactly 2 must be the empty path.\n var length = path.length;\n assert(length >= 2, 'Invalid path ' + path);\n if (length === 2) {\n assert(path.charAt(0) === escapeChar && path.charAt(1) === encodedSeparatorChar, 'Non-empty path ' + path + ' had length 2');\n return ResourcePath.EMPTY_PATH;\n }\n // Escape characters cannot exist past the second-to-last position in the\n // source value.\n var lastReasonableEscapeIndex = length - 2;\n var segments = [];\n var segmentBuilder = '';\n for (var start = 0; start < length;) {\n // The last two characters of a valid encoded path must be a separator, so\n // there must be an end to this segment.\n var end = path.indexOf(escapeChar, start);\n if (end < 0 || end > lastReasonableEscapeIndex) {\n fail('Invalid encoded resource path: \"' + path + '\"');\n }\n var next = path.charAt(end + 1);\n switch (next) {\n case encodedSeparatorChar:\n var currentPiece = path.substring(start, end);\n var segment = void 0;\n if (segmentBuilder.length === 0) {\n // Avoid copying for the common case of a segment that excludes \\0\n // and \\001\n segment = currentPiece;\n }\n else {\n segmentBuilder += currentPiece;\n segment = segmentBuilder;\n segmentBuilder = '';\n }\n segments.push(segment);\n break;\n case encodedNul:\n segmentBuilder += path.substring(start, end);\n segmentBuilder += '\\0';\n break;\n case encodedEscape:\n // The escape character can be used in the output to encode itself.\n segmentBuilder += path.substring(start, end + 1);\n break;\n default:\n fail('Invalid encoded resource path: \"' + path + '\"');\n }\n start = end + 2;\n }\n return new ResourcePath(segments);\n}\n/**\n * Computes the prefix successor of the given path, computed by encode above.\n * A prefix successor is the first key that cannot be prefixed by the given\n * path. It's useful for defining the end of a prefix scan such that all keys\n * in the scan have the same prefix.\n *\n * Note that this is not a general prefix successor implementation, which is\n * tricky to get right with Strings, given that they encode down to UTF-8.\n * Instead this relies on the fact that all paths encoded by this class are\n * always terminated with a separator, and so a successor can always be\n * cheaply computed by incrementing the last character of the path.\n */\nexport function prefixSuccessor(path) {\n var c = path.charCodeAt(path.length - 1);\n // TODO(mcg): this really should be a general thing, but not worth it right\n // now\n assert(c === 1, 'successor may only operate on paths generated by encode');\n return path.substring(0, path.length - 1) + String.fromCharCode(c + 1);\n}\n\n//# sourceMappingURL=encoded_resource_path.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { assert } from '../util/assert';\nimport { encode } from './encoded_resource_path';\nexport var SCHEMA_VERSION = 1;\n/** Performs database creation and (in the future) upgrades between versions. */\nexport function createOrUpgradeDb(db, oldVersion) {\n assert(oldVersion === 0, 'Unexpected upgrade from version ' + oldVersion);\n db.createObjectStore(DbMutationQueue.store, {\n keyPath: DbMutationQueue.keyPath\n });\n // TODO(mikelehen): Get rid of \"as any\" if/when TypeScript fixes their\n // types. https://github.com/Microsoft/TypeScript/issues/14322\n db.createObjectStore(DbMutationBatch.store, \n // tslint:disable-next-line:no-any\n { keyPath: DbMutationBatch.keyPath });\n var targetDocumentsStore = db.createObjectStore(DbTargetDocument.store, \n // tslint:disable-next-line:no-any\n { keyPath: DbTargetDocument.keyPath });\n targetDocumentsStore.createIndex(DbTargetDocument.documentTargetsIndex, DbTargetDocument.documentTargetsKeyPath, { unique: true });\n var targetStore = db.createObjectStore(DbTarget.store, {\n keyPath: DbTarget.keyPath\n });\n // NOTE: This is unique only because the TargetId is the suffix.\n targetStore.createIndex(DbTarget.queryTargetsIndexName, DbTarget.queryTargetsKeyPath, { unique: true });\n // NOTE: keys for these stores are specified explicitly rather than using a\n // keyPath.\n db.createObjectStore(DbDocumentMutation.store);\n db.createObjectStore(DbRemoteDocument.store);\n db.createObjectStore(DbOwner.store);\n db.createObjectStore(DbTargetGlobal.store);\n}\n/**\n * Wrapper class to store timestamps (seconds and nanos) in IndexedDb objects.\n */\nvar DbTimestamp = /** @class */ (function () {\n function DbTimestamp(seconds, nanos) {\n this.seconds = seconds;\n this.nanos = nanos;\n }\n return DbTimestamp;\n}());\nexport { DbTimestamp };\n/**\n * A singleton object to be stored in the 'owner' store in IndexedDb.\n *\n * A given database can be owned by a single tab at a given time. That tab\n * must validate that it is still the owner before every write operation and\n * should regularly write an updated timestamp to prevent other tabs from\n * \"stealing\" ownership of the db.\n */\nvar DbOwner = /** @class */ (function () {\n function DbOwner(ownerId, leaseTimestampMs) {\n this.ownerId = ownerId;\n this.leaseTimestampMs = leaseTimestampMs;\n }\n /** Name of the IndexedDb object store. */\n DbOwner.store = 'owner';\n return DbOwner;\n}());\nexport { DbOwner };\n/**\n * An object to be stored in the 'mutationQueues' store in IndexedDb.\n *\n * Each user gets a single queue of MutationBatches to apply to the server.\n * DbMutationQueue tracks the metadata about the queue.\n */\nvar DbMutationQueue = /** @class */ (function () {\n function DbMutationQueue(\n /**\n * The normalized user ID to which this queue belongs.\n */\n userId, \n /**\n * An identifier for the highest numbered batch that has been acknowledged\n * by the server. All MutationBatches in this queue with batchIds less\n * than or equal to this value are considered to have been acknowledged by\n * the server.\n */\n lastAcknowledgedBatchId, \n /**\n * A stream token that was previously sent by the server.\n *\n * See StreamingWriteRequest in datastore.proto for more details about\n * usage.\n *\n * After sending this token, earlier tokens may not be used anymore so\n * only a single stream token is retained.\n */\n lastStreamToken) {\n this.userId = userId;\n this.lastAcknowledgedBatchId = lastAcknowledgedBatchId;\n this.lastStreamToken = lastStreamToken;\n }\n /** Name of the IndexedDb object store. */\n DbMutationQueue.store = 'mutationQueues';\n /** Keys are automatically assigned via the userId property. */\n DbMutationQueue.keyPath = 'userId';\n return DbMutationQueue;\n}());\nexport { DbMutationQueue };\n/**\n * An object to be stored in the 'mutations' store in IndexedDb.\n *\n * Represents a batch of user-level mutations intended to be sent to the server\n * in a single write. Each user-level batch gets a separate DbMutationBatch\n * with a new batchId.\n */\nvar DbMutationBatch = /** @class */ (function () {\n function DbMutationBatch(\n /**\n * The normalized user ID to which this batch belongs.\n */\n userId, \n /**\n * An identifier for this batch, allocated by the mutation queue in a\n * monotonically increasing manner.\n */\n batchId, \n /**\n * The local write time of the batch, stored as milliseconds since the\n * epoch.\n */\n localWriteTimeMs, \n /**\n * A list of mutations to apply. All mutations will be applied atomically.\n *\n * Mutations are serialized via JsonProtoSerializer.toMutation().\n */\n mutations) {\n this.userId = userId;\n this.batchId = batchId;\n this.localWriteTimeMs = localWriteTimeMs;\n this.mutations = mutations;\n }\n /** Name of the IndexedDb object store. */\n DbMutationBatch.store = 'mutations';\n /** Keys are automatically assigned via the userId, batchId properties. */\n DbMutationBatch.keyPath = ['userId', 'batchId'];\n return DbMutationBatch;\n}());\nexport { DbMutationBatch };\n/**\n * An object to be stored in the 'documentMutations' store in IndexedDb.\n *\n * A manually maintained index of all the mutation batches that affect a given\n * document key. The rows in this table are references based on the contents of\n * DbMutationBatch.mutations.\n */\nvar DbDocumentMutation = /** @class */ (function () {\n function DbDocumentMutation() {\n }\n /**\n * Creates a [userId] key for use in the DbDocumentMutations index to iterate\n * over all of a user's document mutations.\n */\n DbDocumentMutation.prefixForUser = function (userId) {\n return [userId];\n };\n /**\n * Creates a [userId, encodedPath] key for use in the DbDocumentMutations\n * index to iterate over all at document mutations for a given path or lower.\n */\n DbDocumentMutation.prefixForPath = function (userId, path) {\n return [userId, encode(path)];\n };\n /**\n * Creates a full index key of [userId, encodedPath, batchId] for inserting\n * and deleting into the DbDocumentMutations index.\n */\n DbDocumentMutation.key = function (userId, path, batchId) {\n return [userId, encode(path), batchId];\n };\n DbDocumentMutation.store = 'documentMutations';\n /**\n * Because we store all the useful information for this store in the key,\n * there is no useful information to store as the value. The raw (unencoded)\n * path cannot be stored because IndexedDb doesn't store prototype\n * information.\n */\n DbDocumentMutation.PLACEHOLDER = new DbDocumentMutation();\n return DbDocumentMutation;\n}());\nexport { DbDocumentMutation };\n/**\n * Represents the known absence of a document at a particular version.\n * Stored in IndexedDb as part of a DbRemoteDocument object.\n */\nvar DbNoDocument = /** @class */ (function () {\n function DbNoDocument(path, readTime) {\n this.path = path;\n this.readTime = readTime;\n }\n return DbNoDocument;\n}());\nexport { DbNoDocument };\n/**\n * An object to be stored in the 'remoteDocuments' store in IndexedDb. It\n * represents either a cached document (if it exists) or a cached \"no-document\"\n * (if it is known to not exist).\n *\n * Note: This is the persisted equivalent of a MaybeDocument and could perhaps\n * be made more general if necessary.\n */\nvar DbRemoteDocument = /** @class */ (function () {\n function DbRemoteDocument(\n /**\n * Set to an instance of a DbNoDocument if it is known that no document\n * exists.\n */\n noDocument, \n /**\n * Set to an instance of a Document if there's a cached version of the\n * document.\n */\n document) {\n this.noDocument = noDocument;\n this.document = document;\n }\n DbRemoteDocument.store = 'remoteDocuments';\n return DbRemoteDocument;\n}());\nexport { DbRemoteDocument };\n/**\n * An object to be stored in the 'targets' store in IndexedDb.\n *\n * This is based on and should be kept in sync with the proto used in the iOS\n * client.\n *\n * Each query the client listens to against the server is tracked on disk so\n * that the query can be efficiently resumed on restart.\n */\nvar DbTarget = /** @class */ (function () {\n function DbTarget(\n /**\n * An auto-generated sequential numeric identifier for the query.\n *\n * Queries are stored using their canonicalId as the key, but these\n * canonicalIds can be quite long so we additionally assign a unique\n * queryId which can be used by referenced data structures (e.g.\n * indexes) to minimize the on-disk cost.\n */\n targetId, \n /**\n * The canonical string representing this query. This is not unique.\n */\n canonicalId, \n /**\n * The last readTime received from the Watch Service for this query.\n *\n * This is the same value as TargetChange.read_time in the protos.\n */\n readTime, \n /**\n * An opaque, server-assigned token that allows watching a query to be\n * resumed after disconnecting without retransmitting all the data\n * that matches the query. The resume token essentially identifies a\n * point in time from which the server should resume sending results.\n *\n * This is related to the snapshotVersion in that the resumeToken\n * effectively also encodes that value, but the resumeToken is opaque\n * and sometimes encodes additional information.\n *\n * A consequence of this is that the resumeToken should be used when\n * asking the server to reason about where this client is in the watch\n * stream, but the client should use the snapshotVersion for its own\n * purposes.\n *\n * This is the same value as TargetChange.resume_token in the protos.\n */\n resumeToken, \n /**\n * A sequence number representing the last time this query was\n * listened to, used for garbage collection purposes.\n *\n * Conventionally this would be a timestamp value, but device-local\n * clocks are unreliable and they must be able to create new listens\n * even while disconnected. Instead this should be a monotonically\n * increasing number that's incremented on each listen call.\n *\n * This is different from the queryId since the queryId is an\n * immutable identifier assigned to the Query on first use while\n * lastListenSequenceNumber is updated every time the query is\n * listened to.\n */\n lastListenSequenceNumber, \n /**\n * The query for this target.\n *\n * Because canonical ids are not unique we must store the actual query. We\n * use the proto to have an object we can persist without having to\n * duplicate translation logic to and from a `Query` object.\n */\n query) {\n this.targetId = targetId;\n this.canonicalId = canonicalId;\n this.readTime = readTime;\n this.resumeToken = resumeToken;\n this.lastListenSequenceNumber = lastListenSequenceNumber;\n this.query = query;\n }\n DbTarget.store = 'targets';\n /** Keys are automatically assigned via the targetId property. */\n DbTarget.keyPath = 'targetId';\n /** The name of the queryTargets index. */\n DbTarget.queryTargetsIndexName = 'queryTargetsIndex';\n /**\n * The index of all canonicalIds to the targets that they match. This is not\n * a unique mapping because canonicalId does not promise a unique name for all\n * possible queries, so we append the targetId to make the mapping unique.\n */\n DbTarget.queryTargetsKeyPath = ['canonicalId', 'targetId'];\n return DbTarget;\n}());\nexport { DbTarget };\n/**\n * An object representing an association between a target and a document.\n * Stored in the targetDocument object store to store the documents tracked by a\n * particular target.\n */\nvar DbTargetDocument = /** @class */ (function () {\n function DbTargetDocument(\n /**\n * The targetId identifying a target.\n */\n targetId, \n /**\n * The path to the document, as encoded in the key.\n */\n path) {\n this.targetId = targetId;\n this.path = path;\n }\n /** Name of the IndexedDb object store. */\n DbTargetDocument.store = 'targetDocuments';\n /** Keys are automatically assigned via the targetId, path properties. */\n DbTargetDocument.keyPath = ['targetId', 'path'];\n /** The index name for the reverse index. */\n DbTargetDocument.documentTargetsIndex = 'documentTargetsIndex';\n /** We also need to create the reverse index for these properties. */\n DbTargetDocument.documentTargetsKeyPath = ['path', 'targetId'];\n return DbTargetDocument;\n}());\nexport { DbTargetDocument };\n/**\n * A record of global state tracked across all Targets, tracked separately\n * to avoid the need for extra indexes.\n *\n * This should be kept in-sync with the proto used in the iOS client.\n */\nvar DbTargetGlobal = /** @class */ (function () {\n function DbTargetGlobal(\n /**\n * The highest numbered target id across all targets.\n *\n * See DbTarget.targetId.\n */\n highestTargetId, \n /**\n * The highest numbered lastListenSequenceNumber across all targets.\n *\n * See DbTarget.lastListenSequenceNumber.\n */\n highestListenSequenceNumber, \n /**\n * A global snapshot version representing the last consistent snapshot we\n * received from the backend. This is monotonically increasing and any\n * snapshots received from the backend prior to this version (e.g. for\n * targets resumed with a resumeToken) should be suppressed (buffered)\n * until the backend has caught up to this snapshot version again. This\n * prevents our cache from ever going backwards in time.\n */\n lastRemoteSnapshotVersion) {\n this.highestTargetId = highestTargetId;\n this.highestListenSequenceNumber = highestListenSequenceNumber;\n this.lastRemoteSnapshotVersion = lastRemoteSnapshotVersion;\n }\n /**\n * The key string used for the single object that exists in the\n * DbTargetGlobal store.\n */\n DbTargetGlobal.key = 'targetGlobalKey';\n DbTargetGlobal.store = 'targetGlobal';\n return DbTargetGlobal;\n}());\nexport { DbTargetGlobal };\n/**\n * The list of all IndexedDB stored used by the SDK. This is used when creating\n * transactions so that access across all stores is done atomically.\n */\nexport var ALL_STORES = [\n DbMutationQueue.store,\n DbMutationBatch.store,\n DbDocumentMutation.store,\n DbRemoteDocument.store,\n DbTarget.store,\n DbOwner.store,\n DbTargetGlobal.store,\n DbTargetDocument.store\n];\n\n//# sourceMappingURL=indexeddb_schema.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { assert } from '../util/assert';\nimport { debug } from '../util/log';\nimport { PersistencePromise } from './persistence_promise';\nvar LOG_TAG = 'SimpleDb';\n/**\n * Provides a wrapper around IndexedDb with a simplified interface that uses\n * Promise-like return values to chain operations. Real promises cannot be used\n * since .then() continuations are executed asynchronously (e.g. via\n * .setImmediate), which would cause IndexedDB to end the transaction.\n * See PersistencePromise for more details.\n */\nvar SimpleDb = /** @class */ (function () {\n function SimpleDb(db) {\n this.db = db;\n }\n /** Opens the specified database, creating or upgrading it if necessary. */\n SimpleDb.openOrCreate = function (name, version, runUpgrade) {\n assert(SimpleDb.isAvailable(), 'IndexedDB not supported in current environment.');\n debug(LOG_TAG, 'Opening database:', name);\n return new PersistencePromise(function (resolve, reject) {\n // TODO(mikelehen): Investigate browser compatibility.\n // https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB\n // suggests IE9 and older WebKit browsers handle upgrade\n // differently.\n var request = window.indexedDB.open(name, version);\n request.onsuccess = function (event) {\n var db = event.target.result;\n resolve(new SimpleDb(db));\n };\n request.onerror = function (event) {\n reject(event.target.error);\n };\n request.onupgradeneeded = function (event) {\n debug(LOG_TAG, 'Database \"' + name + '\" requires upgrade from version:', event.oldVersion);\n // TODO(mikelehen): If/when we need to do an actual data\n // migration, we'll want to wrap db in a SimpleDb and have the\n // runUpgrade function return a PersistencePromise, since we'll\n // likely need to do async reads and writes. For now we're\n // cheating and just passing the raw IndexedDB in, since\n // createObjectStore(), etc. are synchronous.\n var db = event.target.result;\n runUpgrade(db, event.oldVersion);\n };\n }).toPromise();\n };\n /** Deletes the specified database. */\n SimpleDb.delete = function (name) {\n debug(LOG_TAG, 'Removing database:', name);\n return wrapRequest(window.indexedDB.deleteDatabase(name)).toPromise();\n };\n /** Returns true if IndexedDB is available in the current environment. */\n SimpleDb.isAvailable = function () {\n if (typeof window === 'undefined' || window.indexedDB == null) {\n return false;\n }\n // We extensively use indexed array values and compound keys,\n // which IE and Edge do not support. However, they still have indexedDB\n // defined on the window, so we need to check for them here and make sure\n // to return that persistence is not enabled for those browsers.\n // For tracking support of this feature, see here:\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/status/indexeddbarraysandmultientrysupport/\n // Check the UA string to find out the browser.\n var ua = window.navigator.userAgent;\n // IE 10\n // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';\n // IE 11\n // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';\n // Edge\n // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML,\n // like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';\n if (ua.indexOf('MSIE ') > 0 ||\n ua.indexOf('Trident/') > 0 ||\n ua.indexOf('Edge/') > 0) {\n return false;\n }\n else {\n return true;\n }\n };\n SimpleDb.prototype.runTransaction = function (mode, objectStores, transactionFn) {\n var transaction = new SimpleDbTransaction(this.db, mode, objectStores);\n var transactionFnResult = transactionFn(transaction)\n .catch(function (error) {\n // Abort the transaction if there was an\n // error.\n transaction.abort();\n return PersistencePromise.reject(error);\n })\n .toPromise();\n // Wait for the transaction to complete (i.e. IndexedDb's onsuccess event to\n // fire), but still return the original transactionFnResult back to the\n // caller.\n return transaction.completionPromise.then(function () { return transactionFnResult; });\n };\n SimpleDb.prototype.close = function () {\n this.db.close();\n };\n return SimpleDb;\n}());\nexport { SimpleDb };\n/**\n * A controller for iterating over a key range or index. It allows an iterate\n * callback to delete the currently-referenced object, or jump to a new key\n * within the key range or index.\n */\nvar IterationController = /** @class */ (function () {\n function IterationController(dbCursor) {\n this.dbCursor = dbCursor;\n this.shouldStop = false;\n this.nextKey = null;\n }\n Object.defineProperty(IterationController.prototype, \"isDone\", {\n get: function () {\n return this.shouldStop;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(IterationController.prototype, \"skipToKey\", {\n get: function () {\n return this.nextKey;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(IterationController.prototype, \"cursor\", {\n set: function (value) {\n this.dbCursor = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * This function can be called to stop iteration at any point.\n */\n IterationController.prototype.done = function () {\n this.shouldStop = true;\n };\n /**\n * This function can be called to skip to that next key, which could be\n * an index or a primary key.\n */\n IterationController.prototype.skip = function (key) {\n this.nextKey = key;\n };\n /**\n * Delete the current cursor value from the object store.\n *\n * NOTE: You CANNOT do this with a keysOnly query.\n */\n IterationController.prototype.delete = function () {\n return wrapRequest(this.dbCursor.delete());\n };\n return IterationController;\n}());\nexport { IterationController };\n/**\n * Wraps an IDBTransaction and exposes a store() method to get a handle to a\n * specific object store.\n */\nvar SimpleDbTransaction = /** @class */ (function () {\n function SimpleDbTransaction(db, mode, objectStoresNames) {\n var _this = this;\n this.aborted = false;\n this.transaction = db.transaction(objectStoresNames, mode);\n this.completionPromise = new Promise(function (resolve, reject) {\n // We consider aborting to be \"normal\" and just resolve the promise.\n // May need to revisit if/when we actually need to abort transactions.\n _this.transaction.onabort = _this.transaction.oncomplete = function (event) {\n resolve();\n };\n _this.transaction.onerror = function (event) {\n reject(event.target.error);\n };\n });\n }\n SimpleDbTransaction.prototype.abort = function () {\n if (!this.aborted) {\n debug(LOG_TAG, 'Aborting transaction.');\n this.aborted = true;\n this.transaction.abort();\n }\n };\n /**\n * Returns a SimpleDbStore for the specified store. All\n * operations performed on the SimpleDbStore happen within the context of this\n * transaction and it cannot be used anymore once the transaction is\n * completed.\n *\n * Note that we can't actually enforce that the KeyType and ValueType are\n * correct, but they allow type safety through the rest of the consuming code.\n */\n SimpleDbTransaction.prototype.store = function (storeName) {\n var store = this.transaction.objectStore(storeName);\n assert(!!store, 'Object store not part of transaction: ' + storeName);\n return new SimpleDbStore(store);\n };\n return SimpleDbTransaction;\n}());\nexport { SimpleDbTransaction };\n/**\n * A wrapper around an IDBObjectStore providing an API that:\n *\n * 1) Has generic KeyType / ValueType parameters to provide strongly-typed\n * methods for acting against the object store.\n * 2) Deals with IndexedDB's onsuccess / onerror event callbacks, making every\n * method return a PersistencePromise instead.\n * 3) Provides a higher-level API to avoid needing to do excessive wrapping of\n * intermediate IndexedDB types (IDBCursorWithValue, etc.)\n */\nvar SimpleDbStore = /** @class */ (function () {\n function SimpleDbStore(store) {\n this.store = store;\n }\n SimpleDbStore.prototype.put = function (keyOrValue, value) {\n var request;\n if (value !== undefined) {\n debug(LOG_TAG, 'PUT', this.store.name, keyOrValue, value);\n request = this.store.put(value, keyOrValue);\n }\n else {\n debug(LOG_TAG, 'PUT', this.store.name, '', keyOrValue);\n request = this.store.put(keyOrValue);\n }\n return wrapRequest(request);\n };\n /**\n * Gets the object with the specified key from the specified store, or null\n * if no object exists with the specified key.\n *\n * @key The key of the object to get.\n * @return The object with the specified key or null if no object exists.\n */\n SimpleDbStore.prototype.get = function (key) {\n var _this = this;\n var request = this.store.get(key);\n // tslint:disable-next-line:no-any We're doing an unsafe cast to ValueType.\n return wrapRequest(request).next(function (result) {\n // Normalize nonexistence to null.\n if (result === undefined) {\n result = null;\n }\n debug(LOG_TAG, 'GET', _this.store.name, key, result);\n return result;\n });\n };\n SimpleDbStore.prototype.delete = function (key) {\n debug(LOG_TAG, 'DELETE', this.store.name, key);\n var request = this.store.delete(key);\n return wrapRequest(request);\n };\n SimpleDbStore.prototype.loadAll = function (indexOrRange, range) {\n var cursor = this.cursor(this.options(indexOrRange, range));\n var results = [];\n return this.iterateCursor(cursor, function (key, value) {\n results.push(value);\n }).next(function () {\n return results;\n });\n };\n SimpleDbStore.prototype.deleteAll = function (indexOrRange, range) {\n debug(LOG_TAG, 'DELETE ALL', this.store.name);\n var options = this.options(indexOrRange, range);\n options.keysOnly = false;\n var cursor = this.cursor(options);\n return this.iterateCursor(cursor, function (key, value, control) {\n // NOTE: Calling delete() on a cursor is documented as more efficient than\n // calling delete() on an object store with a single key\n // (https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/delete),\n // however, this requires us *not* to use a keysOnly cursor\n // (https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor/delete). We\n // may want to compare the performance of each method.\n return control.delete();\n });\n };\n SimpleDbStore.prototype.iterate = function (optionsOrCallback, callback) {\n var options;\n if (!callback) {\n options = {};\n callback = optionsOrCallback;\n }\n else {\n options = optionsOrCallback;\n }\n var cursor = this.cursor(options);\n return this.iterateCursor(cursor, callback);\n };\n SimpleDbStore.prototype.iterateCursor = function (cursorRequest, fn) {\n var results = [];\n return new PersistencePromise(function (resolve, reject) {\n cursorRequest.onerror = function (event) {\n reject(event.target.error);\n };\n cursorRequest.onsuccess = function (event) {\n var cursor = event.target.result;\n if (!cursor) {\n resolve();\n return;\n }\n var controller = new IterationController(cursor);\n var userResult = fn(cursor.primaryKey, cursor.value, controller);\n if (userResult instanceof PersistencePromise) {\n results.push(userResult);\n }\n if (controller.isDone) {\n resolve();\n }\n else if (controller.skipToKey === null) {\n cursor.continue();\n }\n else {\n cursor.continue(controller.skipToKey);\n }\n };\n }).next(function () {\n return PersistencePromise.waitFor(results);\n });\n };\n SimpleDbStore.prototype.options = function (indexOrRange, range) {\n var indexName = undefined;\n if (indexOrRange !== undefined) {\n if (typeof indexOrRange === 'string') {\n indexName = indexOrRange;\n }\n else {\n assert(range === undefined, '3rd argument must not be defined if 2nd is a range.');\n range = indexOrRange;\n }\n }\n return { index: indexName, range: range };\n };\n SimpleDbStore.prototype.cursor = function (options) {\n var direction = 'next';\n if (options.reverse) {\n direction = 'prev';\n }\n if (options.index) {\n var index = this.store.index(options.index);\n if (options.keysOnly) {\n return index.openKeyCursor(options.range, direction);\n }\n else {\n return index.openCursor(options.range, direction);\n }\n }\n else {\n return this.store.openCursor(options.range, direction);\n }\n };\n return SimpleDbStore;\n}());\nexport { SimpleDbStore };\n/**\n * Wraps an IDBRequest in a PersistencePromise, using the onsuccess / onerror\n * handlers to resolve / reject the PersistencePromise as appropriate.\n */\nfunction wrapRequest(request) {\n return new PersistencePromise(function (resolve, reject) {\n request.onsuccess = function (event) {\n var result = event.target.result;\n resolve(result);\n };\n request.onerror = function (event) {\n reject(event.target.error);\n };\n });\n}\n\n//# sourceMappingURL=simple_db.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { BATCHID_UNKNOWN, MutationBatch } from '../model/mutation_batch';\nimport { assert, fail } from '../util/assert';\nimport { immediatePredecessor, primitiveComparator } from '../util/misc';\nimport { SortedSet } from '../util/sorted_set';\nimport * as EncodedResourcePath from './encoded_resource_path';\nimport { DbDocumentMutation, DbMutationBatch, DbMutationQueue } from './indexeddb_schema';\nimport { PersistencePromise } from './persistence_promise';\nimport { SimpleDbTransaction } from './simple_db';\n/** A mutation queue for a specific user, backed by IndexedDB. */\nvar IndexedDbMutationQueue = /** @class */ (function () {\n function IndexedDbMutationQueue(\n /**\n * The normalized userId (e.g. null UID => \"\" userId) used to store /\n * retrieve mutations.\n */\n userId, serializer) {\n this.userId = userId;\n this.serializer = serializer;\n this.garbageCollector = null;\n }\n /**\n * Creates a new mutation queue for the given user.\n * @param user The user for which to create a mutation queue.\n * @param serializer The serializer to use when persisting to IndexedDb.\n */\n IndexedDbMutationQueue.forUser = function (user, serializer) {\n // TODO(mcg): Figure out what constraints there are on userIDs\n // In particular, are there any reserved characters? are empty ids allowed?\n // For the moment store these together in the same mutations table assuming\n // that empty userIDs aren't allowed.\n assert(user.uid !== '', 'UserID must not be an empty string.');\n var userId = user.isUnauthenticated() ? '' : user.uid;\n return new IndexedDbMutationQueue(userId, serializer);\n };\n IndexedDbMutationQueue.prototype.start = function (transaction) {\n var _this = this;\n return IndexedDbMutationQueue.loadNextBatchIdFromDb(transaction)\n .next(function (nextBatchId) {\n _this.nextBatchId = nextBatchId;\n return mutationQueuesStore(transaction).get(_this.userId);\n })\n .next(function (metadata) {\n if (!metadata) {\n metadata = new DbMutationQueue(_this.userId, BATCHID_UNKNOWN, \n /*lastStreamToken=*/ '');\n }\n _this.metadata = metadata;\n // On restart, nextBatchId may end up lower than\n // lastAcknowledgedBatchId since it's computed from the queue\n // contents, and there may be no mutations in the queue. In this\n // case, we need to reset lastAcknowledgedBatchId (which is safe\n // since the queue must be empty).\n if (_this.metadata.lastAcknowledgedBatchId >= _this.nextBatchId) {\n return _this.checkEmpty(transaction).next(function (empty) {\n assert(empty, 'Reset nextBatchID is only possible when the queue is empty');\n _this.metadata.lastAcknowledgedBatchId = BATCHID_UNKNOWN;\n return mutationQueuesStore(transaction).put(_this.metadata);\n });\n }\n else {\n return PersistencePromise.resolve();\n }\n });\n };\n /**\n * Returns one larger than the largest batch ID that has been stored. If there\n * are no mutations returns 0. Note that batch IDs are global.\n */\n IndexedDbMutationQueue.loadNextBatchIdFromDb = function (txn) {\n var maxBatchId = BATCHID_UNKNOWN;\n return mutationsStore(txn)\n .iterate({ reverse: true }, function (key, batch, control) {\n var userId = key[0], batchId = key[1];\n if (batchId > maxBatchId) {\n maxBatchId = batch.batchId;\n }\n if (userId === '') {\n // We can't compute a predecessor for the empty string, since it\n // is lexographically first. That also means that no other\n // userIds can come before this one, so we can just exit early.\n control.done();\n }\n else {\n var nextUser = immediatePredecessor(userId);\n control.skip([nextUser]);\n }\n })\n .next(function () { return maxBatchId + 1; });\n };\n IndexedDbMutationQueue.prototype.checkEmpty = function (transaction) {\n var empty = true;\n var range = IDBKeyRange.bound(this.keyForBatchId(Number.NEGATIVE_INFINITY), this.keyForBatchId(Number.POSITIVE_INFINITY));\n return mutationsStore(transaction)\n .iterate({ range: range }, function (key, value, control) {\n empty = false;\n control.done();\n })\n .next(function () { return empty; });\n };\n IndexedDbMutationQueue.prototype.getNextBatchId = function (transaction) {\n return PersistencePromise.resolve(this.nextBatchId);\n };\n IndexedDbMutationQueue.prototype.getHighestAcknowledgedBatchId = function (transaction) {\n return PersistencePromise.resolve(this.metadata.lastAcknowledgedBatchId);\n };\n IndexedDbMutationQueue.prototype.acknowledgeBatch = function (transaction, batch, streamToken) {\n var batchId = batch.batchId;\n assert(batchId > this.metadata.lastAcknowledgedBatchId, 'Mutation batchIDs must be acknowledged in order');\n this.metadata.lastAcknowledgedBatchId = batchId;\n this.metadata.lastStreamToken = validateStreamToken(streamToken);\n return mutationQueuesStore(transaction).put(this.metadata);\n };\n IndexedDbMutationQueue.prototype.getLastStreamToken = function (transaction) {\n return PersistencePromise.resolve(this.metadata.lastStreamToken);\n };\n IndexedDbMutationQueue.prototype.setLastStreamToken = function (transaction, streamToken) {\n this.metadata.lastStreamToken = validateStreamToken(streamToken);\n return mutationQueuesStore(transaction).put(this.metadata);\n };\n IndexedDbMutationQueue.prototype.addMutationBatch = function (transaction, localWriteTime, mutations) {\n var _this = this;\n var batchId = this.nextBatchId;\n this.nextBatchId++;\n var batch = new MutationBatch(batchId, localWriteTime, mutations);\n var dbBatch = this.serializer.toDbMutationBatch(this.userId, batch);\n return mutationsStore(transaction)\n .put(dbBatch)\n .next(function () {\n var promises = [];\n for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {\n var mutation = mutations_1[_i];\n var encodedPath = EncodedResourcePath.encode(mutation.key.path);\n var indexKey = DbDocumentMutation.key(_this.userId, mutation.key.path, batchId);\n documentMutationsStore(transaction).put(indexKey, DbDocumentMutation.PLACEHOLDER);\n }\n return PersistencePromise.waitFor(promises);\n })\n .next(function () {\n return batch;\n });\n };\n IndexedDbMutationQueue.prototype.lookupMutationBatch = function (transaction, batchId) {\n var _this = this;\n return mutationsStore(transaction)\n .get(this.keyForBatchId(batchId))\n .next(function (dbBatch) {\n return dbBatch ? _this.serializer.fromDbMutationBatch(dbBatch) : null;\n });\n };\n IndexedDbMutationQueue.prototype.getNextMutationBatchAfterBatchId = function (transaction, batchId) {\n var _this = this;\n var range = IDBKeyRange.lowerBound(this.keyForBatchId(batchId + 1));\n var foundBatch = null;\n return mutationsStore(transaction)\n .iterate({ range: range }, function (key, dbBatch, control) {\n if (dbBatch.userId === _this.userId) {\n assert(dbBatch.batchId > batchId, 'Should have found mutation after ' + batchId);\n foundBatch = _this.serializer.fromDbMutationBatch(dbBatch);\n }\n control.done();\n })\n .next(function () { return foundBatch; });\n };\n IndexedDbMutationQueue.prototype.getAllMutationBatches = function (transaction) {\n var _this = this;\n var range = IDBKeyRange.bound(this.keyForBatchId(BATCHID_UNKNOWN), this.keyForBatchId(Number.POSITIVE_INFINITY));\n return mutationsStore(transaction)\n .loadAll(range)\n .next(function (dbBatches) {\n return dbBatches.map(function (dbBatch) { return _this.serializer.fromDbMutationBatch(dbBatch); });\n });\n };\n IndexedDbMutationQueue.prototype.getAllMutationBatchesThroughBatchId = function (transaction, batchId) {\n var _this = this;\n var range = IDBKeyRange.bound(this.keyForBatchId(BATCHID_UNKNOWN), this.keyForBatchId(batchId));\n return mutationsStore(transaction)\n .loadAll(range)\n .next(function (dbBatches) {\n return dbBatches.map(function (dbBatch) { return _this.serializer.fromDbMutationBatch(dbBatch); });\n });\n };\n IndexedDbMutationQueue.prototype.getAllMutationBatchesAffectingDocumentKey = function (transaction, documentKey) {\n var _this = this;\n // Scan the document-mutation index starting with a prefix starting with\n // the given documentKey.\n var indexPrefix = DbDocumentMutation.prefixForPath(this.userId, documentKey.path);\n var indexStart = IDBKeyRange.lowerBound(indexPrefix);\n var results = [];\n return documentMutationsStore(transaction)\n .iterate({ range: indexStart }, function (indexKey, _, control) {\n var userID = indexKey[0], encodedPath = indexKey[1], batchID = indexKey[2];\n // Only consider rows matching exactly the specific key of\n // interest. Note that because we order by path first, and we\n // order terminators before path separators, we'll encounter all\n // the index rows for documentKey contiguously. In particular, all\n // the rows for documentKey will occur before any rows for\n // documents nested in a subcollection beneath documentKey so we\n // can stop as soon as we hit any such row.\n var path = EncodedResourcePath.decode(encodedPath);\n if (userID !== _this.userId || !documentKey.path.isEqual(path)) {\n control.done();\n return;\n }\n var mutationKey = _this.keyForBatchId(batchID);\n // Look up the mutation batch in the store.\n // PORTING NOTE: because iteration is callback driven in the web,\n // we just look up the key instead of keeping an open iterator\n // like iOS.\n return mutationsStore(transaction)\n .get(mutationKey)\n .next(function (dbBatch) {\n if (dbBatch === null) {\n fail('Dangling document-mutation reference found: ' +\n indexKey +\n ' which points to ' +\n mutationKey);\n }\n results.push(_this.serializer.fromDbMutationBatch(dbBatch));\n });\n })\n .next(function () { return results; });\n };\n IndexedDbMutationQueue.prototype.getAllMutationBatchesAffectingQuery = function (transaction, query) {\n var _this = this;\n assert(!query.isDocumentQuery(), \"Document queries shouldn't go down this path\");\n var queryPath = query.path;\n var immediateChildrenLength = queryPath.length + 1;\n // TODO(mcg): Actually implement a single-collection query\n //\n // This is actually executing an ancestor query, traversing the whole\n // subtree below the collection which can be horrifically inefficient for\n // some structures. The right way to solve this is to implement the full\n // value index, but that's not in the cards in the near future so this is\n // the best we can do for the moment.\n //\n // Since we don't yet index the actual properties in the mutations, our\n // current approach is to just return all mutation batches that affect\n // documents in the collection being queried.\n var indexPrefix = DbDocumentMutation.prefixForPath(this.userId, queryPath);\n var encodedQueryPath = indexPrefix[1];\n var indexStart = IDBKeyRange.lowerBound(indexPrefix);\n // Collect up unique batchIDs encountered during a scan of the index. Use a\n // SortedSet to accumulate batch IDs so they can be traversed in order in a\n // scan of the main table.\n var uniqueBatchIDs = new SortedSet(primitiveComparator);\n return documentMutationsStore(transaction)\n .iterate({ range: indexStart }, function (indexKey, _, control) {\n var userID = indexKey[0], encodedPath = indexKey[1], batchID = indexKey[2];\n var path = EncodedResourcePath.decode(encodedPath);\n if (userID !== _this.userId || !queryPath.isPrefixOf(path)) {\n control.done();\n return;\n }\n // Rows with document keys more than one segment longer than the\n // query path can't be matches. For example, a query on 'rooms'\n // can't match the document /rooms/abc/messages/xyx.\n // TODO(mcg): we'll need a different scanner when we implement\n // ancestor queries.\n if (path.length !== immediateChildrenLength) {\n return;\n }\n uniqueBatchIDs = uniqueBatchIDs.add(batchID);\n })\n .next(function () {\n var results = [];\n var promises = [];\n // TODO(rockwood): Implement this using iterate.\n uniqueBatchIDs.forEach(function (batchID) {\n var mutationKey = _this.keyForBatchId(batchID);\n promises.push(mutationsStore(transaction)\n .get(mutationKey)\n .next(function (mutation) {\n if (mutation === null) {\n fail('Dangling document-mutation reference found, ' +\n 'which points to ' +\n mutationKey);\n }\n results.push(_this.serializer.fromDbMutationBatch(mutation));\n }));\n });\n return PersistencePromise.waitFor(promises).next(function () { return results; });\n });\n };\n IndexedDbMutationQueue.prototype.removeMutationBatches = function (transaction, batches) {\n var txn = mutationsStore(transaction);\n var indexTxn = documentMutationsStore(transaction);\n var promises = [];\n var _loop_1 = function (batch) {\n var range = IDBKeyRange.only(this_1.keyForBatchId(batch.batchId));\n var numDeleted = 0;\n var removePromise = txn.iterate({ range: range }, function (key, value, control) {\n numDeleted++;\n return control.delete();\n });\n promises.push(removePromise.next(function () {\n assert(numDeleted === 1, 'Dangling document-mutation reference found: Missing batch ' +\n batch.batchId);\n }));\n for (var _i = 0, _a = batch.mutations; _i < _a.length; _i++) {\n var mutation = _a[_i];\n var indexKey = DbDocumentMutation.key(this_1.userId, mutation.key.path, batch.batchId);\n promises.push(indexTxn.delete(indexKey));\n if (this_1.garbageCollector !== null) {\n this_1.garbageCollector.addPotentialGarbageKey(mutation.key);\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, batches_1 = batches; _i < batches_1.length; _i++) {\n var batch = batches_1[_i];\n _loop_1(batch);\n }\n return PersistencePromise.waitFor(promises);\n };\n IndexedDbMutationQueue.prototype.performConsistencyCheck = function (txn) {\n var _this = this;\n return this.checkEmpty(txn).next(function (empty) {\n if (!empty) {\n return PersistencePromise.resolve();\n }\n // Verify that there are no entries in the documentMutations index if\n // the queue is empty.\n var startRange = IDBKeyRange.lowerBound(DbDocumentMutation.prefixForUser(_this.userId));\n var danglingMutationReferences = [];\n return documentMutationsStore(txn)\n .iterate({ range: startRange }, function (key, _, control) {\n var userID = key[0];\n if (userID !== _this.userId) {\n control.done();\n return;\n }\n else {\n var path = EncodedResourcePath.decode(key[1]);\n danglingMutationReferences.push(path);\n }\n })\n .next(function () {\n assert(danglingMutationReferences.length === 0, 'Document leak -- detected dangling mutation references when queue is empty. Dangling keys: ' +\n danglingMutationReferences.map(function (p) { return p.canonicalString(); }));\n });\n });\n };\n IndexedDbMutationQueue.prototype.setGarbageCollector = function (gc) {\n this.garbageCollector = gc;\n };\n IndexedDbMutationQueue.prototype.containsKey = function (txn, key) {\n var _this = this;\n var indexKey = DbDocumentMutation.prefixForPath(this.userId, key.path);\n var encodedPath = indexKey[1];\n var startRange = IDBKeyRange.lowerBound(indexKey);\n var containsKey = false;\n return documentMutationsStore(txn)\n .iterate({ range: startRange, keysOnly: true }, function (key, _, control) {\n var userID = key[0], keyPath = key[1], batchID = key[2];\n if (userID === _this.userId && keyPath === encodedPath) {\n containsKey = true;\n }\n control.done();\n })\n .next(function () { return containsKey; });\n };\n /**\n * Creates a [userId, batchId] key for use with the DbMutationQueue object\n * store.\n */\n IndexedDbMutationQueue.prototype.keyForBatchId = function (batchId) {\n return [this.userId, batchId];\n };\n return IndexedDbMutationQueue;\n}());\nexport { IndexedDbMutationQueue };\nfunction validateStreamToken(token) {\n assert(typeof token === 'string', 'Persisting non-string stream token not supported.');\n return token;\n}\n/**\n * Helper to get a typed SimpleDbStore for the mutations object store.\n */\nfunction mutationsStore(txn) {\n return getStore(txn, DbMutationBatch.store);\n}\n/**\n * Helper to get a typed SimpleDbStore for the mutationQueues object store.\n */\nfunction documentMutationsStore(txn) {\n return getStore(txn, DbDocumentMutation.store);\n}\n/**\n * Helper to get a typed SimpleDbStore for the mutationQueues object store.\n */\nfunction mutationQueuesStore(txn) {\n return getStore(txn, DbMutationQueue.store);\n}\n/**\n * Helper to get a typed SimpleDbStore from a transaction.\n */\nfunction getStore(txn, store) {\n if (txn instanceof SimpleDbTransaction) {\n return txn.store(store);\n }\n else {\n return fail('Invalid transaction object provided!');\n }\n}\n\n//# sourceMappingURL=indexeddb_mutation_queue.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SnapshotVersion } from '../core/snapshot_version';\nimport { Timestamp } from '../core/timestamp';\nimport { documentKeySet } from '../model/collections';\nimport { DocumentKey } from '../model/document_key';\nimport { assert, fail } from '../util/assert';\nimport { immediateSuccessor } from '../util/misc';\nimport * as EncodedResourcePath from './encoded_resource_path';\nimport { DbTarget, DbTargetDocument, DbTargetGlobal } from './indexeddb_schema';\nimport { PersistencePromise } from './persistence_promise';\nimport { SimpleDbTransaction } from './simple_db';\nvar IndexedDbQueryCache = /** @class */ (function () {\n function IndexedDbQueryCache(serializer) {\n this.serializer = serializer;\n /**\n * The last received snapshot version. We store this seperately from the\n * metadata to avoid the extra conversion to/from DbTimestamp.\n */\n this.lastRemoteSnapshotVersion = SnapshotVersion.MIN;\n /**\n * A cached copy of the metadata for the query cache.\n */\n this.metadata = new DbTargetGlobal(\n /*highestTargetId=*/ 0, \n /*lastListenSequenceNumber=*/ 0, SnapshotVersion.MIN.toTimestamp());\n /** The garbage collector to notify about potential garbage keys. */\n this.garbageCollector = null;\n }\n IndexedDbQueryCache.prototype.start = function (transaction) {\n var _this = this;\n return globalTargetStore(transaction)\n .get(DbTargetGlobal.key)\n .next(function (metadata) {\n if (metadata !== null) {\n _this.metadata = metadata;\n var lastSavedVersion = metadata.lastRemoteSnapshotVersion;\n _this.lastRemoteSnapshotVersion = SnapshotVersion.fromTimestamp(new Timestamp(lastSavedVersion.seconds, lastSavedVersion.nanos));\n }\n return PersistencePromise.resolve();\n });\n };\n IndexedDbQueryCache.prototype.getHighestTargetId = function () {\n return this.metadata.highestTargetId;\n };\n IndexedDbQueryCache.prototype.getLastRemoteSnapshotVersion = function () {\n return this.lastRemoteSnapshotVersion;\n };\n IndexedDbQueryCache.prototype.setLastRemoteSnapshotVersion = function (transaction, snapshotVersion) {\n this.lastRemoteSnapshotVersion = snapshotVersion;\n this.metadata.lastRemoteSnapshotVersion = snapshotVersion.toTimestamp();\n return globalTargetStore(transaction).put(DbTargetGlobal.key, this.metadata);\n };\n IndexedDbQueryCache.prototype.addQueryData = function (transaction, queryData) {\n var _this = this;\n var targetId = queryData.targetId;\n var addedQueryPromise = targetsStore(transaction).put(this.serializer.toDbTarget(queryData));\n if (targetId > this.metadata.highestTargetId) {\n this.metadata.highestTargetId = targetId;\n return addedQueryPromise.next(function () {\n return globalTargetStore(transaction).put(DbTargetGlobal.key, _this.metadata);\n });\n }\n else {\n return addedQueryPromise;\n }\n };\n IndexedDbQueryCache.prototype.removeQueryData = function (transaction, queryData) {\n return this.removeMatchingKeysForTargetId(transaction, queryData.targetId).next(function () {\n targetsStore(transaction).delete(queryData.targetId);\n });\n };\n IndexedDbQueryCache.prototype.getQueryData = function (transaction, query) {\n var _this = this;\n // Iterating by the canonicalId may yield more than one result because\n // canonicalId values are not required to be unique per target. This query\n // depends on the queryTargets index to be efficent.\n var canonicalId = query.canonicalId();\n var range = IDBKeyRange.bound([canonicalId, Number.NEGATIVE_INFINITY], [canonicalId, Number.POSITIVE_INFINITY]);\n var result = null;\n return targetsStore(transaction)\n .iterate({ range: range, index: DbTarget.queryTargetsIndexName }, function (key, value, control) {\n var found = _this.serializer.fromDbTarget(value);\n // After finding a potential match, check that the query is\n // actually equal to the requested query.\n if (query.isEqual(found.query)) {\n result = found;\n control.done();\n }\n })\n .next(function () { return result; });\n };\n IndexedDbQueryCache.prototype.addMatchingKeys = function (txn, keys, targetId) {\n // PORTING NOTE: The reverse index (documentsTargets) is maintained by\n // Indexeddb.\n var promises = [];\n var store = documentTargetStore(txn);\n keys.forEach(function (key) {\n var path = EncodedResourcePath.encode(key.path);\n promises.push(store.put(new DbTargetDocument(targetId, path)));\n });\n return PersistencePromise.waitFor(promises);\n };\n IndexedDbQueryCache.prototype.removeMatchingKeys = function (txn, keys, targetId) {\n var _this = this;\n // PORTING NOTE: The reverse index (documentsTargets) is maintained by\n // IndexedDb.\n var promises = [];\n var store = documentTargetStore(txn);\n keys.forEach(function (key) {\n var path = EncodedResourcePath.encode(key.path);\n promises.push(store.delete([targetId, path]));\n if (_this.garbageCollector !== null) {\n _this.garbageCollector.addPotentialGarbageKey(key);\n }\n });\n return PersistencePromise.waitFor(promises);\n };\n IndexedDbQueryCache.prototype.removeMatchingKeysForTargetId = function (txn, targetId) {\n var store = documentTargetStore(txn);\n var range = IDBKeyRange.bound([targetId], [targetId + 1], \n /*lowerOpen=*/ false, \n /*upperOpen=*/ true);\n return this.notifyGCForRemovedKeys(txn, range).next(function () {\n return store.delete(range);\n });\n };\n IndexedDbQueryCache.prototype.notifyGCForRemovedKeys = function (txn, range) {\n var _this = this;\n var store = documentTargetStore(txn);\n if (this.garbageCollector !== null && this.garbageCollector.isEager) {\n // In order to generate garbage events properly, we need to read these\n // keys before deleting.\n return store.iterate({ range: range, keysOnly: true }, function (key, _, control) {\n var path = EncodedResourcePath.decode(key[1]);\n var docKey = new DocumentKey(path);\n // Paranoid assertion in case the the collector is set to null\n // during the iteration.\n assert(_this.garbageCollector !== null, 'GarbageCollector for query cache set to null during key removal.');\n _this.garbageCollector.addPotentialGarbageKey(docKey);\n });\n }\n else {\n return PersistencePromise.resolve();\n }\n };\n IndexedDbQueryCache.prototype.getMatchingKeysForTargetId = function (txn, targetId) {\n var promises = [];\n var range = IDBKeyRange.bound([targetId], [targetId + 1], \n /*lowerOpen=*/ false, \n /*upperOpen=*/ true);\n var store = documentTargetStore(txn);\n var result = documentKeySet();\n return store\n .iterate({ range: range, keysOnly: true }, function (key, _, control) {\n var path = EncodedResourcePath.decode(key[1]);\n var docKey = new DocumentKey(path);\n result = result.add(docKey);\n })\n .next(function () { return result; });\n };\n IndexedDbQueryCache.prototype.setGarbageCollector = function (gc) {\n this.garbageCollector = gc;\n };\n IndexedDbQueryCache.prototype.containsKey = function (txn, key) {\n assert(txn !== null, 'Persistence Transaction cannot be null for query cache containsKey');\n var path = EncodedResourcePath.encode(key.path);\n var range = IDBKeyRange.bound([path], [immediateSuccessor(path)], \n /*lowerOpen=*/ false, \n /*upperOpen=*/ true);\n var count = 0;\n return documentTargetStore(txn)\n .iterate({\n index: DbTargetDocument.documentTargetsIndex,\n keysOnly: true,\n range: range\n }, function (key, _, control) {\n count++;\n control.done();\n })\n .next(function () { return count > 0; });\n };\n return IndexedDbQueryCache;\n}());\nexport { IndexedDbQueryCache };\n/**\n * Helper to get a typed SimpleDbStore for the queries object store.\n */\nfunction targetsStore(txn) {\n return getStore(txn, DbTarget.store);\n}\n/**\n * Helper to get a typed SimpleDbStore for the target globals object store.\n */\nfunction globalTargetStore(txn) {\n return getStore(txn, DbTargetGlobal.store);\n}\n/**\n * Helper to get a typed SimpleDbStore for the document target object store.\n */\nfunction documentTargetStore(txn) {\n return getStore(txn, DbTargetDocument.store);\n}\n/**\n * Helper to get a typed SimpleDbStore from a transaction.\n */\nfunction getStore(txn, store) {\n if (txn instanceof SimpleDbTransaction) {\n return txn.store(store);\n }\n else {\n return fail('Invalid transaction object provided!');\n }\n}\n\n//# sourceMappingURL=indexeddb_query_cache.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { documentMap } from '../model/collections';\nimport { Document } from '../model/document';\nimport { fail } from '../util/assert';\nimport { DbRemoteDocument } from './indexeddb_schema';\nimport { SimpleDbTransaction } from './simple_db';\nvar IndexedDbRemoteDocumentCache = /** @class */ (function () {\n function IndexedDbRemoteDocumentCache(serializer) {\n this.serializer = serializer;\n }\n IndexedDbRemoteDocumentCache.prototype.addEntry = function (transaction, maybeDocument) {\n return remoteDocumentsStore(transaction).put(dbKey(maybeDocument.key), this.serializer.toDbRemoteDocument(maybeDocument));\n };\n IndexedDbRemoteDocumentCache.prototype.removeEntry = function (transaction, documentKey) {\n return remoteDocumentsStore(transaction).delete(dbKey(documentKey));\n };\n IndexedDbRemoteDocumentCache.prototype.getEntry = function (transaction, documentKey) {\n var _this = this;\n return remoteDocumentsStore(transaction)\n .get(dbKey(documentKey))\n .next(function (dbRemoteDoc) {\n return dbRemoteDoc\n ? _this.serializer.fromDbRemoteDocument(dbRemoteDoc)\n : null;\n });\n };\n IndexedDbRemoteDocumentCache.prototype.getDocumentsMatchingQuery = function (transaction, query) {\n var _this = this;\n var results = documentMap();\n // Documents are ordered by key, so we can use a prefix scan to narrow down\n // the documents we need to match the query against.\n var startKey = query.path.toArray();\n var range = IDBKeyRange.lowerBound(startKey);\n return remoteDocumentsStore(transaction)\n .iterate({ range: range }, function (key, dbRemoteDoc, control) {\n var maybeDoc = _this.serializer.fromDbRemoteDocument(dbRemoteDoc);\n if (!query.path.isPrefixOf(maybeDoc.key.path)) {\n control.done();\n }\n else if (maybeDoc instanceof Document && query.matches(maybeDoc)) {\n results = results.insert(maybeDoc.key, maybeDoc);\n }\n })\n .next(function () { return results; });\n };\n return IndexedDbRemoteDocumentCache;\n}());\nexport { IndexedDbRemoteDocumentCache };\n/**\n * Helper to get a typed SimpleDbStore for the remoteDocuments object store.\n */\nfunction remoteDocumentsStore(txn) {\n if (txn instanceof SimpleDbTransaction) {\n return txn.store(DbRemoteDocument.store);\n }\n else {\n return fail('Invalid transaction object provided!');\n }\n}\nfunction dbKey(docKey) {\n return docKey.path.toArray();\n}\n\n//# sourceMappingURL=indexeddb_remote_document_cache.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SnapshotVersion } from '../core/snapshot_version';\nimport { Timestamp } from '../core/timestamp';\nimport { Document, NoDocument } from '../model/document';\nimport { DocumentKey } from '../model/document_key';\nimport { MutationBatch } from '../model/mutation_batch';\nimport { assert, fail } from '../util/assert';\nimport { DbMutationBatch, DbNoDocument, DbRemoteDocument, DbTarget, DbTimestamp } from './indexeddb_schema';\nimport { QueryData, QueryPurpose } from './query_data';\n/** Serializer for values stored in the LocalStore. */\nvar LocalSerializer = /** @class */ (function () {\n function LocalSerializer(remoteSerializer) {\n this.remoteSerializer = remoteSerializer;\n }\n /** Decodes a remote document from storage locally to a Document. */\n LocalSerializer.prototype.fromDbRemoteDocument = function (remoteDoc) {\n if (remoteDoc.document) {\n return this.remoteSerializer.fromDocument(remoteDoc.document);\n }\n else if (remoteDoc.noDocument) {\n var key = DocumentKey.fromSegments(remoteDoc.noDocument.path);\n var readTime = remoteDoc.noDocument.readTime;\n var timestamp = new Timestamp(readTime.seconds, readTime.nanos);\n return new NoDocument(key, SnapshotVersion.fromTimestamp(timestamp));\n }\n else {\n return fail('Unexpected DbRemoteDocument');\n }\n };\n /** Encodes a document for storage locally. */\n LocalSerializer.prototype.toDbRemoteDocument = function (maybeDoc) {\n if (maybeDoc instanceof Document) {\n var doc = this.remoteSerializer.toDocument(maybeDoc);\n return new DbRemoteDocument(null, doc);\n }\n else {\n var path = maybeDoc.key.path.toArray();\n var timestamp = maybeDoc.version.toTimestamp();\n var readTime = new DbTimestamp(timestamp.seconds, timestamp.nanos);\n return new DbRemoteDocument(new DbNoDocument(path, readTime), null);\n }\n };\n /** Encodes a batch of mutations into a DbMutationBatch for local storage. */\n LocalSerializer.prototype.toDbMutationBatch = function (userId, batch) {\n var _this = this;\n var serializedMutations = batch.mutations.map(function (m) {\n return _this.remoteSerializer.toMutation(m);\n });\n return new DbMutationBatch(userId, batch.batchId, batch.localWriteTime.toEpochMilliseconds(), serializedMutations);\n };\n /** Decodes a DbMutationBatch into a MutationBatch */\n LocalSerializer.prototype.fromDbMutationBatch = function (dbBatch) {\n var _this = this;\n var mutations = dbBatch.mutations.map(function (m) {\n return _this.remoteSerializer.fromMutation(m);\n });\n var timestamp = Timestamp.fromEpochMilliseconds(dbBatch.localWriteTimeMs);\n return new MutationBatch(dbBatch.batchId, timestamp, mutations);\n };\n /** Decodes a DbTarget into QueryData */\n LocalSerializer.prototype.fromDbTarget = function (dbTarget) {\n var readTime = new Timestamp(dbTarget.readTime.seconds, dbTarget.readTime.nanos);\n var version = SnapshotVersion.fromTimestamp(readTime);\n var query;\n if (isDocumentQuery(dbTarget.query)) {\n query = this.remoteSerializer.fromDocumentsTarget(dbTarget.query);\n }\n else {\n query = this.remoteSerializer.fromQueryTarget(dbTarget.query);\n }\n return new QueryData(query, dbTarget.targetId, QueryPurpose.Listen, version, dbTarget.resumeToken);\n };\n /** Encodes QueryData into a DbTarget for storage locally. */\n LocalSerializer.prototype.toDbTarget = function (queryData) {\n assert(QueryPurpose.Listen === queryData.purpose, 'Only queries with purpose ' +\n QueryPurpose.Listen +\n ' may be stored, got ' +\n queryData.purpose);\n var timestamp = queryData.snapshotVersion.toTimestamp();\n var dbTimestamp = new DbTimestamp(timestamp.seconds, timestamp.nanos);\n var queryProto;\n if (queryData.query.isDocumentQuery()) {\n queryProto = this.remoteSerializer.toDocumentsTarget(queryData.query);\n }\n else {\n queryProto = this.remoteSerializer.toQueryTarget(queryData.query);\n }\n assert(typeof queryData.resumeToken === 'string', 'Persisting non-string resume token not supported.');\n var resumeToken = queryData.resumeToken;\n // lastListenSequenceNumber is always 0 until we do real GC.\n return new DbTarget(queryData.targetId, queryData.query.canonicalId(), dbTimestamp, resumeToken, 0, queryProto);\n };\n return LocalSerializer;\n}());\nexport { LocalSerializer };\n/**\n * A helper function for figuring out what kind of query has been stored.\n */\nfunction isDocumentQuery(dbQuery) {\n return dbQuery.documents !== undefined;\n}\n\n//# sourceMappingURL=local_serializer.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { assert } from '../util/assert';\nimport { Code, FirestoreError } from '../util/error';\nimport * as log from '../util/log';\nimport { AutoId } from '../util/misc';\nimport { IndexedDbMutationQueue } from './indexeddb_mutation_queue';\nimport { IndexedDbQueryCache } from './indexeddb_query_cache';\nimport { IndexedDbRemoteDocumentCache } from './indexeddb_remote_document_cache';\nimport { ALL_STORES, DbOwner } from './indexeddb_schema';\nimport { createOrUpgradeDb, SCHEMA_VERSION } from './indexeddb_schema';\nimport { LocalSerializer } from './local_serializer';\nimport { PersistencePromise } from './persistence_promise';\nimport { SimpleDb } from './simple_db';\nvar LOG_TAG = 'IndexedDbPersistence';\n/** If the owner lease is older than 5 seconds, try to take ownership. */\nvar OWNER_LEASE_MAX_AGE_MS = 5000;\n/** Refresh the owner lease every 4 seconds while owner. */\nvar OWNER_LEASE_REFRESH_INTERVAL_MS = 4000;\n/** LocalStorage location to indicate a zombied ownerId (see class comment). */\nvar ZOMBIE_OWNER_LOCALSTORAGE_SUFFIX = 'zombiedOwnerId';\n/** Error when the owner lease cannot be acquired or is lost. */\nvar EXISTING_OWNER_ERROR_MSG = 'There is another tab open with offline' +\n ' persistence enabled. Only one such tab is allowed at a time. The' +\n ' other tab must be closed or persistence must be disabled.';\nvar UNSUPPORTED_PLATFORM_ERROR_MSG = 'This platform is either missing' +\n ' IndexedDB or is known to have an incomplete implementation. Offline' +\n ' persistence has been disabled.';\n/**\n * An IndexedDB-backed instance of Persistence. Data is stored persistently\n * across sessions.\n *\n * Currently the Firestore SDK only supports a single consumer of the database,\n * but browsers obviously support multiple tabs. IndexedDbPersistence ensures a\n * single consumer of the database via an \"owner lease\" stored in the database.\n *\n * On startup, IndexedDbPersistence assigns itself a random \"ownerId\" and writes\n * it to a special \"owner\" object in the database (if no entry exists already or\n * the current entry is expired). This owner lease is then verified inside every\n * transaction to ensure the lease has not been lost.\n *\n * If a tab opts not to acquire the owner lease (because there's an existing\n * non-expired owner) or loses the owner lease, IndexedDbPersistence enters a\n * failed state and all subsequent operations will automatically fail.\n *\n * The current owner regularly refreshes the owner lease with new timestamps to\n * prevent newly-opened tabs from taking over ownership.\n *\n * Additionally there is an optimization so that when a tab is closed, the owner\n * lease is released immediately (this is especially important to make sure that\n * a refreshed tab is able to immediately re-acquire the owner lease).\n * Unfortunately, IndexedDB cannot be reliably used in window.unload since it is\n * an asynchronous API. So in addition to attempting to give up the lease,\n * the owner writes its ownerId to a \"zombiedOwnerId\" entry in LocalStorage\n * which acts as an indicator that another tab should go ahead and take the\n * owner lease immediately regardless of the current lease timestamp.\n */\nvar IndexedDbPersistence = /** @class */ (function () {\n function IndexedDbPersistence(prefix, serializer) {\n this.ownerId = this.generateOwnerId();\n this.dbName = prefix + IndexedDbPersistence.MAIN_DATABASE;\n this.serializer = new LocalSerializer(serializer);\n this.localStoragePrefix = prefix;\n }\n IndexedDbPersistence.prototype.start = function () {\n var _this = this;\n if (!IndexedDbPersistence.isAvailable()) {\n this.persistenceError = new FirestoreError(Code.UNIMPLEMENTED, UNSUPPORTED_PLATFORM_ERROR_MSG);\n return Promise.reject(this.persistenceError);\n }\n assert(!this.started, 'IndexedDbPersistence double-started!');\n this.started = true;\n return SimpleDb.openOrCreate(this.dbName, SCHEMA_VERSION, createOrUpgradeDb)\n .then(function (db) {\n _this.simpleDb = db;\n })\n .then(function () { return _this.tryAcquireOwnerLease(); })\n .then(function () {\n _this.scheduleOwnerLeaseRefreshes();\n _this.attachWindowUnloadHook();\n });\n };\n IndexedDbPersistence.prototype.shutdown = function () {\n var _this = this;\n assert(this.started, 'IndexedDbPersistence shutdown without start!');\n this.started = false;\n this.detachWindowUnloadHook();\n this.stopOwnerLeaseRefreshes();\n return this.releaseOwnerLease().then(function () {\n _this.simpleDb.close();\n });\n };\n IndexedDbPersistence.prototype.getMutationQueue = function (user) {\n return IndexedDbMutationQueue.forUser(user, this.serializer);\n };\n IndexedDbPersistence.prototype.getQueryCache = function () {\n return new IndexedDbQueryCache(this.serializer);\n };\n IndexedDbPersistence.prototype.getRemoteDocumentCache = function () {\n return new IndexedDbRemoteDocumentCache(this.serializer);\n };\n IndexedDbPersistence.prototype.runTransaction = function (action, operation) {\n var _this = this;\n if (this.persistenceError) {\n return Promise.reject(this.persistenceError);\n }\n log.debug(LOG_TAG, 'Starting transaction:', action);\n // Do all transactions as readwrite against all object stores, since we\n // are the only reader/writer.\n return this.simpleDb.runTransaction('readwrite', ALL_STORES, function (txn) {\n // Verify that we still have the owner lease as part of every transaction.\n return _this.ensureOwnerLease(txn).next(function () { return operation(txn); });\n });\n };\n IndexedDbPersistence.isAvailable = function () {\n return SimpleDb.isAvailable();\n };\n /**\n * Generates a string used as a prefix when storing data in IndexedDB and\n * LocalStorage.\n */\n IndexedDbPersistence.buildStoragePrefix = function (databaseInfo) {\n // Use two different prefix formats:\n //\n // * firestore / persistenceKey / projectID . databaseID / ...\n // * firestore / persistenceKey / projectID / ...\n //\n // projectIDs are DNS-compatible names and cannot contain dots\n // so there's no danger of collisions.\n var database = databaseInfo.databaseId.projectId;\n if (!databaseInfo.databaseId.isDefaultDatabase) {\n database += '.' + databaseInfo.databaseId.database;\n }\n return 'firestore/' + databaseInfo.persistenceKey + '/' + database + '/';\n };\n /**\n * Acquires the owner lease if there's no valid owner. Else returns a rejected\n * promise.\n */\n IndexedDbPersistence.prototype.tryAcquireOwnerLease = function () {\n var _this = this;\n // NOTE: Don't use this.runTransaction, since it requires us to already\n // have the lease.\n return this.simpleDb.runTransaction('readwrite', [DbOwner.store], function (txn) {\n var store = txn.store(DbOwner.store);\n return store.get('owner').next(function (dbOwner) {\n if (!_this.validOwner(dbOwner)) {\n var newDbOwner = new DbOwner(_this.ownerId, Date.now());\n log.debug(LOG_TAG, 'No valid owner. Acquiring owner lease. Current owner:', dbOwner, 'New owner:', newDbOwner);\n return store.put('owner', newDbOwner);\n }\n else {\n log.debug(LOG_TAG, 'Valid owner already. Failing. Current owner:', dbOwner);\n _this.persistenceError = new FirestoreError(Code.FAILED_PRECONDITION, EXISTING_OWNER_ERROR_MSG);\n return PersistencePromise.reject(_this.persistenceError);\n }\n });\n });\n };\n /** Checks the owner lease and deletes it if we are the current owner. */\n IndexedDbPersistence.prototype.releaseOwnerLease = function () {\n var _this = this;\n // NOTE: Don't use this.runTransaction, since it requires us to already\n // have the lease.\n return this.simpleDb.runTransaction('readwrite', [DbOwner.store], function (txn) {\n var store = txn.store(DbOwner.store);\n return store.get('owner').next(function (dbOwner) {\n if (dbOwner !== null && dbOwner.ownerId === _this.ownerId) {\n log.debug(LOG_TAG, 'Releasing owner lease.');\n return store.delete('owner');\n }\n else {\n return PersistencePromise.resolve();\n }\n });\n });\n };\n /**\n * Checks the owner lease and returns a rejected promise if we are not the\n * current owner. This should be included in every transaction to guard\n * against losing the owner lease.\n */\n IndexedDbPersistence.prototype.ensureOwnerLease = function (txn) {\n var _this = this;\n var store = txn.store(DbOwner.store);\n return store.get('owner').next(function (dbOwner) {\n if (dbOwner === null || dbOwner.ownerId !== _this.ownerId) {\n _this.persistenceError = new FirestoreError(Code.FAILED_PRECONDITION, EXISTING_OWNER_ERROR_MSG);\n return PersistencePromise.reject(_this.persistenceError);\n }\n else {\n return PersistencePromise.resolve();\n }\n });\n };\n /**\n * Returns true if the provided owner exists, has a recent timestamp, and\n * isn't zombied.\n *\n * NOTE: To determine if the owner is zombied, this method reads from\n * LocalStorage which could be mildly expensive.\n */\n IndexedDbPersistence.prototype.validOwner = function (dbOwner) {\n var now = Date.now();\n var minAcceptable = now - OWNER_LEASE_MAX_AGE_MS;\n var maxAcceptable = now;\n if (dbOwner === null) {\n return false; // no owner.\n }\n else if (dbOwner.leaseTimestampMs < minAcceptable) {\n return false; // owner lease has expired.\n }\n else if (dbOwner.leaseTimestampMs > maxAcceptable) {\n log.error('Persistence owner-lease is in the future. Discarding.', dbOwner);\n return false;\n }\n else if (dbOwner.ownerId === this.getZombiedOwnerId()) {\n return false; // owner's tab closed.\n }\n else {\n return true;\n }\n };\n /**\n * Schedules a recurring timer to update the owner lease timestamp to prevent\n * other tabs from taking the lease.\n */\n IndexedDbPersistence.prototype.scheduleOwnerLeaseRefreshes = function () {\n var _this = this;\n // NOTE: This doesn't need to be scheduled on the async queue and doing so\n // would increase the chances of us not refreshing on time if the queue is\n // backed up for some reason.\n this.ownerLeaseRefreshHandle = setInterval(function () {\n var txResult = _this.runTransaction('Refresh owner timestamp', function (txn) {\n // NOTE: We don't need to validate the current owner contents, since\n // runTransaction does that automatically.\n var store = txn.store(DbOwner.store);\n return store.put('owner', new DbOwner(_this.ownerId, Date.now()));\n });\n txResult.catch(function (reason) {\n // Probably means we lost the lease. Report the error and stop trying to\n // refresh the lease.\n log.error(reason);\n _this.stopOwnerLeaseRefreshes();\n });\n }, OWNER_LEASE_REFRESH_INTERVAL_MS);\n };\n IndexedDbPersistence.prototype.stopOwnerLeaseRefreshes = function () {\n if (this.ownerLeaseRefreshHandle) {\n clearInterval(this.ownerLeaseRefreshHandle);\n this.ownerLeaseRefreshHandle = null;\n }\n };\n /**\n * Attaches a window.unload handler that will synchronously write our\n * ownerId to a \"zombie owner id\" location in localstorage. This can be used\n * by tabs trying to acquire the lease to determine that the lease should be\n * acquired immediately even if the timestamp is recent. This is particularly\n * important for the refresh case (so the tab correctly re-acquires the owner\n * lease). LocalStorage is used for this rather than IndexedDb because it is\n * a synchronous API and so can be used reliably from an unload handler.\n */\n IndexedDbPersistence.prototype.attachWindowUnloadHook = function () {\n var _this = this;\n this.windowUnloadHandler = function () {\n // Record that we're zombied.\n _this.setZombiedOwnerId(_this.ownerId);\n // Attempt graceful shutdown (including releasing our owner lease), but\n // there's no guarantee it will complete.\n _this.shutdown();\n };\n window.addEventListener('unload', this.windowUnloadHandler);\n };\n IndexedDbPersistence.prototype.detachWindowUnloadHook = function () {\n if (this.windowUnloadHandler) {\n window.removeEventListener('unload', this.windowUnloadHandler);\n this.windowUnloadHandler = null;\n }\n };\n /**\n * Returns any recorded \"zombied owner\" (i.e. a previous owner that became\n * zombied due to their tab closing) from LocalStorage, or null if no such\n * record exists.\n */\n IndexedDbPersistence.prototype.getZombiedOwnerId = function () {\n try {\n var zombiedOwnerId = window.localStorage.getItem(this.zombiedOwnerLocalStorageKey());\n log.debug(LOG_TAG, 'Zombied ownerID from LocalStorage:', zombiedOwnerId);\n return zombiedOwnerId;\n }\n catch (e) {\n // Gracefully handle if LocalStorage isn't available / working.\n log.error('Failed to get zombie owner id.', e);\n return null;\n }\n };\n /**\n * Records a zombied owner (an owner that had its tab closed) in LocalStorage\n * or, if passed null, deletes any recorded zombied owner.\n */\n IndexedDbPersistence.prototype.setZombiedOwnerId = function (zombieOwnerId) {\n try {\n if (zombieOwnerId === null) {\n window.localStorage.removeItem(this.zombiedOwnerLocalStorageKey());\n }\n else {\n window.localStorage.setItem(this.zombiedOwnerLocalStorageKey(), zombieOwnerId);\n }\n }\n catch (e) {\n // Gracefully handle if LocalStorage isn't available / working.\n log.error('Failed to set zombie owner id.', e);\n }\n };\n IndexedDbPersistence.prototype.zombiedOwnerLocalStorageKey = function () {\n return this.localStoragePrefix + ZOMBIE_OWNER_LOCALSTORAGE_SUFFIX;\n };\n IndexedDbPersistence.prototype.generateOwnerId = function () {\n // For convenience, just use an AutoId.\n return AutoId.newId();\n };\n /**\n * The name of the main (and currently only) IndexedDB database. this name is\n * appended to the prefix provided to the IndexedDbPersistence constructor.\n */\n IndexedDbPersistence.MAIN_DATABASE = 'main';\n return IndexedDbPersistence;\n}());\nexport { IndexedDbPersistence };\n\n//# sourceMappingURL=indexeddb_persistence.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SnapshotVersion } from '../core/snapshot_version';\nimport { documentKeySet, documentMap, maybeDocumentMap } from '../model/collections';\nimport { Document, NoDocument } from '../model/document';\nimport { DocumentKey } from '../model/document_key';\nimport { fail } from '../util/assert';\nimport { PersistencePromise } from './persistence_promise';\n/**\n * A readonly view of the local state of all documents we're tracking (i.e. we\n * have a cached version in remoteDocumentCache or local mutations for the\n * document). The view is computed by applying the mutations in the\n * MutationQueue to the RemoteDocumentCache.\n */\nvar LocalDocumentsView = /** @class */ (function () {\n function LocalDocumentsView(remoteDocumentCache, mutationQueue) {\n this.remoteDocumentCache = remoteDocumentCache;\n this.mutationQueue = mutationQueue;\n }\n /**\n * Get the local view of the document identified by `key`.\n *\n * @return Local view of the document or null if we don't have any cached\n * state for it.\n */\n LocalDocumentsView.prototype.getDocument = function (transaction, key) {\n var _this = this;\n return this.remoteDocumentCache\n .getEntry(transaction, key)\n .next(function (remoteDoc) {\n return _this.computeLocalDocument(transaction, key, remoteDoc);\n });\n };\n /**\n * Gets the local view of the documents identified by `keys`.\n *\n * If we don't have cached state for a document in `keys`, a NoDocument will\n * be stored for that key in the resulting set.\n */\n LocalDocumentsView.prototype.getDocuments = function (transaction, keys) {\n var _this = this;\n var promises = [];\n var results = maybeDocumentMap();\n keys.forEach(function (key) {\n promises.push(_this.getDocument(transaction, key).next(function (maybeDoc) {\n // TODO(http://b/32275378): Don't conflate missing / deleted.\n if (!maybeDoc) {\n maybeDoc = new NoDocument(key, SnapshotVersion.forDeletedDoc());\n }\n results = results.insert(key, maybeDoc);\n }));\n });\n return PersistencePromise.waitFor(promises).next(function () { return results; });\n };\n /** Performs a query against the local view of all documents. */\n LocalDocumentsView.prototype.getDocumentsMatchingQuery = function (transaction, query) {\n if (DocumentKey.isDocumentKey(query.path)) {\n return this.getDocumentsMatchingDocumentQuery(transaction, query.path);\n }\n else {\n return this.getDocumentsMatchingCollectionQuery(transaction, query);\n }\n };\n LocalDocumentsView.prototype.getDocumentsMatchingDocumentQuery = function (transaction, docPath) {\n // Just do a simple document lookup.\n return this.getDocument(transaction, new DocumentKey(docPath)).next(function (maybeDoc) {\n var result = documentMap();\n if (maybeDoc instanceof Document) {\n result = result.insert(maybeDoc.key, maybeDoc);\n }\n return result;\n });\n };\n LocalDocumentsView.prototype.getDocumentsMatchingCollectionQuery = function (transaction, query) {\n var _this = this;\n // Query the remote documents and overlay mutations.\n // TODO(mikelehen): There may be significant overlap between the mutations\n // affecting these remote documents and the\n // getAllMutationBatchesAffectingQuery() mutations. Consider optimizing.\n var results;\n return this.remoteDocumentCache\n .getDocumentsMatchingQuery(transaction, query)\n .next(function (queryResults) {\n return _this.computeLocalDocuments(transaction, queryResults);\n })\n .next(function (promisedResults) {\n results = promisedResults;\n // Now use the mutation queue to discover any other documents that may\n // match the query after applying mutations.\n return _this.mutationQueue.getAllMutationBatchesAffectingQuery(transaction, query);\n })\n .next(function (matchingMutationBatches) {\n var matchingKeys = documentKeySet();\n for (var _i = 0, matchingMutationBatches_1 = matchingMutationBatches; _i < matchingMutationBatches_1.length; _i++) {\n var batch = matchingMutationBatches_1[_i];\n for (var _a = 0, _b = batch.mutations; _a < _b.length; _a++) {\n var mutation = _b[_a];\n // TODO(mikelehen): PERF: Check if this mutation actually\n // affects the query to reduce work.\n if (!results.get(mutation.key)) {\n matchingKeys = matchingKeys.add(mutation.key);\n }\n }\n }\n // Now add in the results for the matchingKeys.\n var promises = [];\n matchingKeys.forEach(function (key) {\n promises.push(_this.getDocument(transaction, key).next(function (doc) {\n if (doc instanceof Document) {\n results = results.insert(doc.key, doc);\n }\n }));\n });\n return PersistencePromise.waitFor(promises);\n })\n .next(function () {\n // Finally, filter out any documents that don't actually match\n // the query.\n results.forEach(function (key, doc) {\n if (!query.matches(doc)) {\n results = results.remove(key);\n }\n });\n return results;\n });\n };\n /**\n * Takes a remote document and applies local mutations to generate the local\n * view of the document.\n * @param transaction The transaction in which to perform any persistence\n * operations.\n * @param documentKey The key of the document (necessary when remoteDocument\n * is null).\n * @param document The base remote document to apply mutations to or null.\n */\n LocalDocumentsView.prototype.computeLocalDocument = function (transaction, documentKey, document) {\n return this.mutationQueue\n .getAllMutationBatchesAffectingDocumentKey(transaction, documentKey)\n .next(function (batches) {\n for (var _i = 0, batches_1 = batches; _i < batches_1.length; _i++) {\n var batch = batches_1[_i];\n document = batch.applyToLocalView(documentKey, document);\n }\n return document;\n });\n };\n /**\n * Takes a set of remote documents and applies local mutations to generate the\n * local view of the documents.\n * @param transaction The transaction in which to perform any persistence\n * operations.\n * @param documents The base remote documents to apply mutations to.\n * @return The local view of the documents.\n */\n LocalDocumentsView.prototype.computeLocalDocuments = function (transaction, documents) {\n var _this = this;\n var promises = [];\n documents.forEach(function (key, doc) {\n promises.push(_this.computeLocalDocument(transaction, key, doc).next(function (mutatedDoc) {\n if (mutatedDoc instanceof Document) {\n documents = documents.insert(mutatedDoc.key, mutatedDoc);\n }\n else if (mutatedDoc instanceof NoDocument) {\n documents = documents.remove(mutatedDoc.key);\n }\n else {\n fail('Unknown MaybeDocument: ' + mutatedDoc);\n }\n }));\n });\n return PersistencePromise.waitFor(promises).next(function () { return documents; });\n };\n return LocalDocumentsView;\n}());\nexport { LocalDocumentsView };\n\n//# sourceMappingURL=local_documents_view.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { maybeDocumentMap } from '../model/collections';\nimport { assert } from '../util/assert';\nimport { PersistencePromise } from './persistence_promise';\n/**\n * An in-memory buffer of entries to be written to a RemoteDocumentCache.\n * It can be used to batch up a set of changes to be written to the cache, but\n * additionally supports reading entries back with the `getEntry()` method,\n * falling back to the underlying RemoteDocumentCache if no entry is\n * buffered.\n *\n * NOTE: This class was introduced in iOS to work around a limitation in\n * LevelDB. Given IndexedDb has full transaction support with\n * read-your-own-writes capability, this class is not technically needed, but\n * has been preserved as a convenience and to aid portability.\n */\nvar RemoteDocumentChangeBuffer = /** @class */ (function () {\n function RemoteDocumentChangeBuffer(remoteDocumentCache) {\n this.remoteDocumentCache = remoteDocumentCache;\n this.changes = maybeDocumentMap();\n }\n /** Buffers a `RemoteDocumentCache.addEntry()` call. */\n RemoteDocumentChangeBuffer.prototype.addEntry = function (maybeDocument) {\n var changes = this.assertChanges();\n this.changes = changes.insert(maybeDocument.key, maybeDocument);\n };\n // NOTE: removeEntry() is not presently necessary and so is omitted.\n /**\n * Looks up an entry in the cache. The buffered changes will first be checked,\n * and if no buffered change applies, this will forward to\n * `RemoteDocumentCache.getEntry()`.\n *\n * @param transaction The transaction in which to perform any persistence\n * operations.\n * @param documentKey The key of the entry to look up.\n * @return The cached Document or NoDocument entry, or null if we have nothing\n * cached.\n */\n RemoteDocumentChangeBuffer.prototype.getEntry = function (transaction, documentKey) {\n var changes = this.assertChanges();\n var bufferedEntry = changes.get(documentKey);\n if (bufferedEntry) {\n return PersistencePromise.resolve(bufferedEntry);\n }\n else {\n return this.remoteDocumentCache.getEntry(transaction, documentKey);\n }\n };\n /**\n * Applies buffered changes to the underlying RemoteDocumentCache, using\n * the provided transaction.\n */\n RemoteDocumentChangeBuffer.prototype.apply = function (transaction) {\n var _this = this;\n var changes = this.assertChanges();\n var promises = [];\n changes.forEach(function (key, maybeDoc) {\n promises.push(_this.remoteDocumentCache.addEntry(transaction, maybeDoc));\n });\n // We should not be used to buffer any more changes.\n this.changes = null;\n return PersistencePromise.waitFor(promises);\n };\n /** Helper to assert this.changes is not null and return it. */\n RemoteDocumentChangeBuffer.prototype.assertChanges = function () {\n assert(this.changes !== null, 'Changes have already been applied.');\n return this.changes;\n };\n return RemoteDocumentChangeBuffer;\n}());\nexport { RemoteDocumentChangeBuffer };\n\n//# sourceMappingURL=remote_document_change_buffer.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SnapshotVersion } from '../core/snapshot_version';\nimport { TargetIdGenerator } from '../core/target_id_generator';\nimport { Timestamp } from '../core/timestamp';\nimport { documentKeySet } from '../model/collections';\nimport { BATCHID_UNKNOWN } from '../model/mutation_batch';\nimport { ResetMapping, UpdateMapping } from '../remote/remote_event';\nimport { assert, fail } from '../util/assert';\nimport * as log from '../util/log';\nimport * as objUtils from '../util/obj';\nimport { LocalDocumentsView } from './local_documents_view';\nimport { PersistencePromise } from './persistence_promise';\nimport { QueryData, QueryPurpose } from './query_data';\nimport { ReferenceSet } from './reference_set';\nimport { RemoteDocumentChangeBuffer } from './remote_document_change_buffer';\nvar LOG_TAG = 'LocalStore';\n/**\n * Local storage in the Firestore client. Coordinates persistence components\n * like the mutation queue and remote document cache to present a\n * latency-compensated view of stored data.\n *\n * The LocalStore is responsible for accepting mutations from the Sync Engine.\n * Writes from the client are put into a queue as provisional Mutations until\n * they are processed by the RemoteStore and confirmed as having been written\n * to the server.\n *\n * The local store provides the local version of documents that have been\n * modified locally. It maintains the constraint:\n *\n * LocalDocument = RemoteDocument + Active(LocalMutations)\n *\n * (Active mutations are those that are enqueued and have not been previously\n * acknowledged or rejected).\n *\n * The RemoteDocument (\"ground truth\") state is provided via the\n * applyChangeBatch method. It will be some version of a server-provided\n * document OR will be a server-provided document PLUS acknowledged mutations:\n *\n * RemoteDocument' = RemoteDocument + Acknowledged(LocalMutations)\n *\n * Note that this \"dirty\" version of a RemoteDocument will not be identical to a\n * server base version, since it has LocalMutations added to it pending getting\n * an authoritative copy from the server.\n *\n * Since LocalMutations can be rejected by the server, we have to be able to\n * revert a LocalMutation that has already been applied to the LocalDocument\n * (typically done by replaying all remaining LocalMutations to the\n * RemoteDocument to re-apply).\n *\n * The LocalStore is responsible for the garbage collection of the documents it\n * contains. For now, it every doc referenced by a view, the mutation queue, or\n * the RemoteStore.\n *\n * It also maintains the persistence of mapping queries to resume tokens and\n * target ids. It needs to know this data about queries to properly know what\n * docs it would be allowed to garbage collect.\n *\n * The LocalStore must be able to efficiently execute queries against its local\n * cache of the documents, to provide the initial set of results before any\n * remote changes have been received.\n *\n * Note: In TypeScript, most methods return Promises since the implementation\n * may rely on fetching data from IndexedDB which is async.\n * These Promises will only be rejected on an I/O error or other internal\n * (unexpected) failure (e.g. failed assert) and always represent an\n * unrecoverable error (should be caught / reported by the async_queue).\n */\nvar LocalStore = /** @class */ (function () {\n function LocalStore(\n /** Manages our in-memory or durable persistence. */\n persistence, initialUser, \n /**\n * The garbage collector collects documents that should no longer be\n * cached (e.g. if they are no longer retained by the above reference sets\n * and the garbage collector is performing eager collection).\n */\n garbageCollector) {\n this.persistence = persistence;\n this.garbageCollector = garbageCollector;\n /**\n * The set of document references maintained by any local views.\n */\n this.localViewReferences = new ReferenceSet();\n /** Maps a targetID to data about its query. */\n this.targetIds = {};\n /** Used to generate targetIDs for queries tracked locally. */\n this.targetIdGenerator = TargetIdGenerator.forLocalStore();\n /**\n * A heldBatchResult is a mutation batch result (from a write acknowledgement)\n * that arrived before the watch stream got notified of a snapshot that\n * includes the write. So we \"hold\" it until the watch stream catches up. It\n * ensures that the local write remains visible (latency compensation) and\n * doesn't temporarily appear reverted because the watch stream is slower than\n * the write stream and so wasn't reflecting it.\n *\n * NOTE: Eventually we want to move this functionality into the remote store.\n */\n this.heldBatchResults = [];\n this.mutationQueue = persistence.getMutationQueue(initialUser);\n this.remoteDocuments = persistence.getRemoteDocumentCache();\n this.queryCache = persistence.getQueryCache();\n this.localDocuments = new LocalDocumentsView(this.remoteDocuments, this.mutationQueue);\n this.garbageCollector.addGarbageSource(this.localViewReferences);\n this.garbageCollector.addGarbageSource(this.queryCache);\n this.garbageCollector.addGarbageSource(this.mutationQueue);\n }\n /** Performs any initial startup actions required by the local store. */\n LocalStore.prototype.start = function () {\n var _this = this;\n return this.persistence.runTransaction('Start LocalStore', function (txn) {\n return _this.startMutationQueue(txn).next(function () { return _this.startQueryCache(txn); });\n });\n };\n /**\n * Tells the LocalStore that the currently authenticated user has changed.\n *\n * In response the local store switches the mutation queue to the new user and\n * returns any resulting document changes.\n */\n LocalStore.prototype.handleUserChange = function (user) {\n var _this = this;\n return this.persistence.runTransaction('Handle user change', function (txn) {\n // Swap out the mutation queue, grabbing the pending mutation batches\n // before and after.\n var oldBatches;\n return _this.mutationQueue\n .getAllMutationBatches(txn)\n .next(function (promisedOldBatches) {\n oldBatches = promisedOldBatches;\n _this.garbageCollector.removeGarbageSource(_this.mutationQueue);\n _this.mutationQueue = _this.persistence.getMutationQueue(user);\n _this.garbageCollector.addGarbageSource(_this.mutationQueue);\n return _this.startMutationQueue(txn);\n })\n .next(function () {\n // Recreate our LocalDocumentsView using the new\n // MutationQueue.\n _this.localDocuments = new LocalDocumentsView(_this.remoteDocuments, _this.mutationQueue);\n return _this.mutationQueue.getAllMutationBatches(txn);\n })\n .next(function (newBatches) {\n // Union the old/new changed keys.\n var changedKeys = documentKeySet();\n for (var _i = 0, _a = [oldBatches, newBatches]; _i < _a.length; _i++) {\n var batches = _a[_i];\n for (var _b = 0, batches_1 = batches; _b < batches_1.length; _b++) {\n var batch = batches_1[_b];\n for (var _c = 0, _d = batch.mutations; _c < _d.length; _c++) {\n var mutation = _d[_c];\n changedKeys = changedKeys.add(mutation.key);\n }\n }\n }\n // Return the set of all (potentially) changed documents as the\n // result of the user change.\n return _this.localDocuments.getDocuments(txn, changedKeys);\n });\n });\n };\n LocalStore.prototype.startQueryCache = function (txn) {\n var _this = this;\n return this.queryCache.start(txn).next(function () {\n var targetId = _this.queryCache.getHighestTargetId();\n _this.targetIdGenerator = TargetIdGenerator.forLocalStore(targetId);\n });\n };\n LocalStore.prototype.startMutationQueue = function (txn) {\n var _this = this;\n return this.mutationQueue\n .start(txn)\n .next(function () {\n // If we have any leftover mutation batch results from a prior run,\n // just drop them.\n // TODO(http://b/33446471): We probably need to repopulate\n // heldBatchResults or similar instead, but that is not\n // straightforward since we're not persisting the write ack versions.\n _this.heldBatchResults = [];\n return _this.mutationQueue.getHighestAcknowledgedBatchId(txn);\n })\n .next(function (highestAck) {\n // TODO(mikelehen): This is the only usage of\n // getAllMutationBatchesThroughBatchId(). Consider removing it in\n // favor of a getAcknowledgedBatches() method.\n if (highestAck !== BATCHID_UNKNOWN) {\n return _this.mutationQueue.getAllMutationBatchesThroughBatchId(txn, highestAck);\n }\n else {\n return PersistencePromise.resolve([]);\n }\n })\n .next(function (ackedBatches) {\n if (ackedBatches.length > 0) {\n return _this.mutationQueue.removeMutationBatches(txn, ackedBatches);\n }\n else {\n return PersistencePromise.resolve();\n }\n });\n };\n /* Accept locally generated Mutations and commit them to storage. */\n LocalStore.prototype.localWrite = function (mutations) {\n var _this = this;\n return this.persistence.runTransaction('Locally write mutations', function (txn) {\n var batch;\n var localWriteTime = Timestamp.now();\n return _this.mutationQueue\n .addMutationBatch(txn, localWriteTime, mutations)\n .next(function (promisedBatch) {\n batch = promisedBatch;\n // TODO(koss): This is doing an N^2 update by replaying ALL the\n // mutations on each document (instead of just the ones added) in\n // this batch.\n var keys = batch.keys();\n return _this.localDocuments.getDocuments(txn, keys);\n })\n .next(function (changedDocuments) {\n return { batchId: batch.batchId, changes: changedDocuments };\n });\n });\n };\n /**\n * Acknowledge the given batch.\n *\n * On the happy path when a batch is acknowledged, the local store will\n *\n * + remove the batch from the mutation queue;\n * + apply the changes to the remote document cache;\n * + recalculate the latency compensated view implied by those changes (there\n * may be mutations in the queue that affect the documents but haven't been\n * acknowledged yet); and\n * + give the changed documents back the sync engine\n *\n * @returns The resulting (modified) documents.\n */\n LocalStore.prototype.acknowledgeBatch = function (batchResult) {\n var _this = this;\n return this.persistence.runTransaction('Acknowledge batch', function (txn) {\n var affected;\n return _this.mutationQueue\n .acknowledgeBatch(txn, batchResult.batch, batchResult.streamToken)\n .next(function () {\n if (_this.shouldHoldBatchResult(batchResult.commitVersion)) {\n _this.heldBatchResults.push(batchResult);\n affected = documentKeySet();\n return PersistencePromise.resolve();\n }\n else {\n var documentBuffer_1 = new RemoteDocumentChangeBuffer(_this.remoteDocuments);\n return _this.releaseBatchResults(txn, [batchResult], documentBuffer_1).next(function (promisedAffectedKeys) {\n affected = promisedAffectedKeys;\n return documentBuffer_1.apply(txn);\n });\n }\n })\n .next(function () {\n return _this.mutationQueue.performConsistencyCheck(txn);\n })\n .next(function () {\n return _this.localDocuments.getDocuments(txn, affected);\n });\n });\n };\n /**\n * Remove mutations from the MutationQueue for the specified batch;\n * LocalDocuments will be recalculated.\n *\n * @returns The resulting modified documents.\n */\n LocalStore.prototype.rejectBatch = function (batchId) {\n var _this = this;\n return this.persistence.runTransaction('Reject batch', function (txn) {\n var toReject;\n var affectedKeys;\n return _this.mutationQueue\n .lookupMutationBatch(txn, batchId)\n .next(function (promisedToReject) {\n assert(promisedToReject != null, 'Attempt to reject nonexistent batch!');\n toReject = promisedToReject;\n return _this.mutationQueue\n .getHighestAcknowledgedBatchId(txn)\n .next(function (lastAcked) {\n assert(batchId > lastAcked, \"Acknowledged batches can't be rejected.\");\n return toReject;\n });\n })\n .next(function () {\n return _this.removeMutationBatch(txn, toReject);\n })\n .next(function (promisedAffectedKeys) {\n affectedKeys = promisedAffectedKeys;\n return _this.mutationQueue.performConsistencyCheck(txn);\n })\n .next(function () {\n return _this.localDocuments.getDocuments(txn, affectedKeys);\n });\n });\n };\n /** Returns the last recorded stream token for the current user. */\n LocalStore.prototype.getLastStreamToken = function () {\n var _this = this;\n return this.persistence.runTransaction('Get last stream token', function (txn) {\n return _this.mutationQueue.getLastStreamToken(txn);\n });\n };\n /**\n * Sets the stream token for the current user without acknowledging any\n * mutation batch. This is usually only useful after a stream handshake or in\n * response to an error that requires clearing the stream token.\n */\n LocalStore.prototype.setLastStreamToken = function (streamToken) {\n var _this = this;\n return this.persistence.runTransaction('Set last stream token', function (txn) {\n return _this.mutationQueue.setLastStreamToken(txn, streamToken);\n });\n };\n /**\n * Returns the last consistent snapshot processed (used by the RemoteStore to\n * determine whether to buffer incoming snapshots from the backend).\n */\n LocalStore.prototype.getLastRemoteSnapshotVersion = function () {\n return this.queryCache.getLastRemoteSnapshotVersion();\n };\n /**\n * Update the \"ground-state\" (remote) documents. We assume that the remote\n * event reflects any write batches that have been acknowledged or rejected\n * (i.e. we do not re-apply local mutations to updates from this event).\n *\n * LocalDocuments are re-calculated if there are remaining mutations in the\n * queue.\n */\n LocalStore.prototype.applyRemoteEvent = function (remoteEvent) {\n var _this = this;\n var documentBuffer = new RemoteDocumentChangeBuffer(this.remoteDocuments);\n return this.persistence.runTransaction('Apply remote event', function (txn) {\n var promises = [];\n objUtils.forEachNumber(remoteEvent.targetChanges, function (targetId, change) {\n // Do not ref/unref unassigned targetIds - it may lead to leaks.\n var queryData = _this.targetIds[targetId];\n if (!queryData)\n return;\n var mapping = change.mapping;\n if (mapping) {\n // First make sure that all references are deleted\n if (mapping instanceof ResetMapping) {\n promises.push(_this.queryCache\n .removeMatchingKeysForTargetId(txn, targetId)\n .next(function () {\n return _this.queryCache.addMatchingKeys(txn, mapping.documents, targetId);\n }));\n }\n else if (mapping instanceof UpdateMapping) {\n promises.push(_this.queryCache\n .removeMatchingKeys(txn, mapping.removedDocuments, targetId)\n .next(function () {\n return _this.queryCache.addMatchingKeys(txn, mapping.addedDocuments, targetId);\n }));\n }\n else {\n return fail('Unknown mapping type: ' + JSON.stringify(mapping));\n }\n }\n // Update the resume token if the change includes one. Don't clear\n // any preexisting value.\n var resumeToken = change.resumeToken;\n if (resumeToken.length > 0) {\n queryData = queryData.update({\n resumeToken: resumeToken,\n snapshotVersion: change.snapshotVersion\n });\n _this.targetIds[targetId] = queryData;\n promises.push(_this.queryCache.addQueryData(txn, queryData));\n }\n });\n var changedDocKeys = documentKeySet();\n remoteEvent.documentUpdates.forEach(function (key, doc) {\n changedDocKeys = changedDocKeys.add(key);\n promises.push(documentBuffer.getEntry(txn, key).next(function (existingDoc) {\n // Make sure we don't apply an old document version to the remote\n // cache, though we make an exception for SnapshotVersion.MIN which\n // can happen for manufactured events (e.g. in the case of a limbo\n // document resolution failing).\n if (existingDoc == null ||\n doc.version.isEqual(SnapshotVersion.MIN) ||\n doc.version.compareTo(existingDoc.version) >= 0) {\n documentBuffer.addEntry(doc);\n }\n else {\n log.debug(LOG_TAG, 'Ignoring outdated watch update for ', key, '. Current version:', existingDoc.version, ' Watch version:', doc.version);\n }\n // The document might be garbage because it was unreferenced by\n // everything. Make sure to mark it as garbage if it is...\n _this.garbageCollector.addPotentialGarbageKey(key);\n }));\n });\n // HACK: The only reason we allow a null snapshot version is so that we\n // can synthesize remote events when we get permission denied errors while\n // trying to resolve the state of a locally cached document that is in\n // limbo.\n var lastRemoteVersion = _this.queryCache.getLastRemoteSnapshotVersion();\n var remoteVersion = remoteEvent.snapshotVersion;\n if (!remoteVersion.isEqual(SnapshotVersion.MIN)) {\n assert(remoteVersion.compareTo(lastRemoteVersion) >= 0, 'Watch stream reverted to previous snapshot?? ' +\n remoteVersion +\n ' < ' +\n lastRemoteVersion);\n promises.push(_this.queryCache.setLastRemoteSnapshotVersion(txn, remoteVersion));\n }\n var releasedWriteKeys;\n return PersistencePromise.waitFor(promises)\n .next(function () { return _this.releaseHeldBatchResults(txn, documentBuffer); })\n .next(function (promisedReleasedWriteKeys) {\n releasedWriteKeys = promisedReleasedWriteKeys;\n return documentBuffer.apply(txn);\n })\n .next(function () {\n return _this.localDocuments.getDocuments(txn, changedDocKeys.unionWith(releasedWriteKeys));\n });\n });\n };\n /**\n * Notify local store of the changed views to locally pin documents.\n */\n LocalStore.prototype.notifyLocalViewChanges = function (viewChanges) {\n var _this = this;\n return this.persistence.runTransaction('Notify local view changes', function (txn) {\n var promises = [];\n var _loop_1 = function (view) {\n promises.push(_this.queryCache\n .getQueryData(txn, view.query)\n .next(function (queryData) {\n assert(queryData !== null, 'Local view changes contain unallocated query.');\n var targetId = queryData.targetId;\n _this.localViewReferences.addReferences(view.addedKeys, targetId);\n _this.localViewReferences.removeReferences(view.removedKeys, targetId);\n }));\n };\n for (var _i = 0, viewChanges_1 = viewChanges; _i < viewChanges_1.length; _i++) {\n var view = viewChanges_1[_i];\n _loop_1(view);\n }\n return PersistencePromise.waitFor(promises);\n });\n };\n /**\n * Gets the mutation batch after the passed in batchId in the mutation queue\n * or null if empty.\n * @param afterBatchId If provided, the batch to search after.\n * @returns The next mutation or null if there wasn't one.\n */\n LocalStore.prototype.nextMutationBatch = function (afterBatchId) {\n var _this = this;\n return this.persistence.runTransaction('Get next mutation batch', function (txn) {\n if (afterBatchId === undefined) {\n afterBatchId = BATCHID_UNKNOWN;\n }\n return _this.mutationQueue.getNextMutationBatchAfterBatchId(txn, afterBatchId);\n });\n };\n /**\n * Read the current value of a Document with a given key or null if not\n * found - used for testing.\n */\n LocalStore.prototype.readDocument = function (key) {\n var _this = this;\n return this.persistence.runTransaction('read document', function (txn) {\n return _this.localDocuments.getDocument(txn, key);\n });\n };\n /**\n * Assigns the given query an internal ID so that its results can be pinned so\n * they don't get GC'd. A query must be allocated in the local store before\n * the store can be used to manage its view.\n */\n LocalStore.prototype.allocateQuery = function (query) {\n var _this = this;\n return this.persistence.runTransaction('Allocate query', function (txn) {\n var queryData;\n return _this.queryCache\n .getQueryData(txn, query)\n .next(function (cached) {\n if (cached) {\n // This query has been listened to previously, so reuse the\n // previous targetID.\n // TODO(mcg): freshen last accessed date?\n queryData = cached;\n return PersistencePromise.resolve();\n }\n else {\n var targetId = _this.targetIdGenerator.next();\n queryData = new QueryData(query, targetId, QueryPurpose.Listen);\n return _this.queryCache.addQueryData(txn, queryData);\n }\n })\n .next(function () {\n assert(!_this.targetIds[queryData.targetId], 'Tried to allocate an already allocated query: ' + query);\n _this.targetIds[queryData.targetId] = queryData;\n return queryData;\n });\n });\n };\n /** Unpin all the documents associated with the given query. */\n LocalStore.prototype.releaseQuery = function (query) {\n var _this = this;\n return this.persistence.runTransaction('Release query', function (txn) {\n return _this.queryCache\n .getQueryData(txn, query)\n .next(function (queryData) {\n assert(queryData != null, 'Tried to release nonexistent query: ' + query);\n _this.localViewReferences.removeReferencesForId(queryData.targetId);\n delete _this.targetIds[queryData.targetId];\n if (_this.garbageCollector.isEager) {\n return _this.queryCache.removeQueryData(txn, queryData);\n }\n else {\n return PersistencePromise.resolve();\n }\n })\n .next(function () {\n // If this was the last watch target, then we won't get any more\n // watch snapshots, so we should release any held batch results.\n if (objUtils.isEmpty(_this.targetIds)) {\n var documentBuffer_2 = new RemoteDocumentChangeBuffer(_this.remoteDocuments);\n return _this.releaseHeldBatchResults(txn, documentBuffer_2).next(function () {\n documentBuffer_2.apply(txn);\n });\n }\n else {\n return PersistencePromise.resolve();\n }\n });\n });\n };\n /**\n * Runs the specified query against all the documents in the local store and\n * returns the results.\n */\n LocalStore.prototype.executeQuery = function (query) {\n var _this = this;\n return this.persistence.runTransaction('Execute query', function (txn) {\n return _this.localDocuments.getDocumentsMatchingQuery(txn, query);\n });\n };\n /**\n * Returns the keys of the documents that are associated with the given\n * target id in the remote table.\n */\n LocalStore.prototype.remoteDocumentKeys = function (targetId) {\n var _this = this;\n return this.persistence.runTransaction('Remote document keys', function (txn) {\n return _this.queryCache.getMatchingKeysForTargetId(txn, targetId);\n });\n };\n /**\n * Collect garbage if necessary.\n * Should be called periodically by Sync Engine to recover resources. The\n * implementation must guarantee that GC won't happen in other places than\n * this method call.\n */\n LocalStore.prototype.collectGarbage = function () {\n var _this = this;\n // Call collectGarbage regardless of whether isGCEnabled so the referenceSet\n // doesn't continue to accumulate the garbage keys.\n return this.persistence.runTransaction('Garbage collection', function (txn) {\n return _this.garbageCollector.collectGarbage(txn).next(function (garbage) {\n var promises = [];\n garbage.forEach(function (key) {\n promises.push(_this.remoteDocuments.removeEntry(txn, key));\n });\n return PersistencePromise.waitFor(promises);\n });\n });\n };\n LocalStore.prototype.releaseHeldBatchResults = function (txn, documentBuffer) {\n var toRelease = [];\n for (var _i = 0, _a = this.heldBatchResults; _i < _a.length; _i++) {\n var batchResult = _a[_i];\n if (!this.isRemoteUpToVersion(batchResult.commitVersion)) {\n break;\n }\n toRelease.push(batchResult);\n }\n if (toRelease.length === 0) {\n return PersistencePromise.resolve(documentKeySet());\n }\n else {\n this.heldBatchResults.splice(0, toRelease.length);\n return this.releaseBatchResults(txn, toRelease, documentBuffer);\n }\n };\n LocalStore.prototype.isRemoteUpToVersion = function (version) {\n // If there are no watch targets, then we won't get remote snapshots, and\n // we are always \"up-to-date.\"\n var lastRemoteVersion = this.queryCache.getLastRemoteSnapshotVersion();\n return (version.compareTo(lastRemoteVersion) <= 0 ||\n objUtils.isEmpty(this.targetIds));\n };\n LocalStore.prototype.shouldHoldBatchResult = function (version) {\n // Check if watcher isn't up to date or prior results are already held.\n return (!this.isRemoteUpToVersion(version) || this.heldBatchResults.length > 0);\n };\n LocalStore.prototype.releaseBatchResults = function (txn, batchResults, documentBuffer) {\n var _this = this;\n var promiseChain = PersistencePromise.resolve();\n var _loop_2 = function (batchResult) {\n promiseChain = promiseChain.next(function () {\n return _this.applyWriteToRemoteDocuments(txn, batchResult, documentBuffer);\n });\n };\n for (var _i = 0, batchResults_1 = batchResults; _i < batchResults_1.length; _i++) {\n var batchResult = batchResults_1[_i];\n _loop_2(batchResult);\n }\n return promiseChain.next(function () {\n return _this.removeMutationBatches(txn, batchResults.map(function (result) { return result.batch; }));\n });\n };\n LocalStore.prototype.removeMutationBatch = function (txn, batch) {\n return this.removeMutationBatches(txn, [batch]);\n };\n /** Removes all the mutation batches named in the given array. */\n LocalStore.prototype.removeMutationBatches = function (txn, batches) {\n var affectedDocs = documentKeySet();\n for (var _i = 0, batches_2 = batches; _i < batches_2.length; _i++) {\n var batch = batches_2[_i];\n for (var _a = 0, _b = batch.mutations; _a < _b.length; _a++) {\n var mutation = _b[_a];\n var key = mutation.key;\n affectedDocs = affectedDocs.add(key);\n }\n }\n return this.mutationQueue\n .removeMutationBatches(txn, batches)\n .next(function () { return affectedDocs; });\n };\n LocalStore.prototype.applyWriteToRemoteDocuments = function (txn, batchResult, documentBuffer) {\n var batch = batchResult.batch;\n var docKeys = batch.keys();\n var promiseChain = PersistencePromise.resolve();\n docKeys.forEach(function (docKey) {\n promiseChain = promiseChain\n .next(function () {\n return documentBuffer.getEntry(txn, docKey);\n })\n .next(function (remoteDoc) {\n var doc = remoteDoc;\n var ackVersion = batchResult.docVersions.get(docKey);\n assert(ackVersion !== null, 'ackVersions should contain every doc in the write.');\n if (!doc || doc.version.compareTo(ackVersion) < 0) {\n doc = batch.applyToRemoteDocument(docKey, doc, batchResult);\n if (!doc) {\n assert(!remoteDoc, 'Mutation batch ' +\n batch +\n ' applied to document ' +\n remoteDoc +\n ' resulted in null');\n }\n else {\n documentBuffer.addEntry(doc);\n }\n }\n });\n });\n return promiseChain;\n };\n return LocalStore;\n}());\nexport { LocalStore };\n\n//# sourceMappingURL=local_store.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DocumentKey } from '../model/document_key';\nimport { BATCHID_UNKNOWN, MutationBatch } from '../model/mutation_batch';\nimport { emptyByteString } from '../platform/platform';\nimport { assert } from '../util/assert';\nimport { primitiveComparator } from '../util/misc';\nimport { SortedSet } from '../util/sorted_set';\nimport { PersistencePromise } from './persistence_promise';\nimport { DocReference } from './reference_set';\nvar MemoryMutationQueue = /** @class */ (function () {\n function MemoryMutationQueue() {\n /**\n * The set of all mutations that have been sent but not yet been applied to\n * the backend.\n */\n this.mutationQueue = [];\n /** Next value to use when assigning sequential IDs to each mutation batch. */\n this.nextBatchId = 1;\n /** The highest acknowledged mutation in the queue. */\n this.highestAcknowledgedBatchId = BATCHID_UNKNOWN;\n /** The last received stream token from the server, used to acknowledge which\n * responses the client has processed. Stream tokens are opaque checkpoint\n * markers whose only real value is their inclusion in the next request.\n */\n this.lastStreamToken = emptyByteString();\n /** The garbage collector to notify about potential garbage keys. */\n this.garbageCollector = null;\n /** An ordered mapping between documents and the mutations batch IDs. */\n this.batchesByDocumentKey = new SortedSet(DocReference.compareByKey);\n }\n MemoryMutationQueue.prototype.start = function (transaction) {\n // NOTE: The queue may be shutdown / started multiple times, since we\n // maintain the queue for the duration of the app session in case a user\n // logs out / back in. To behave like the LevelDB-backed MutationQueue (and\n // accommodate tests that expect as much), we reset nextBatchId and\n // highestAcknowledgedBatchId if the queue is empty.\n if (this.mutationQueue.length === 0) {\n this.nextBatchId = 1;\n this.highestAcknowledgedBatchId = BATCHID_UNKNOWN;\n }\n assert(this.highestAcknowledgedBatchId < this.nextBatchId, 'highestAcknowledgedBatchId must be less than the nextBatchId');\n return PersistencePromise.resolve();\n };\n MemoryMutationQueue.prototype.checkEmpty = function (transaction) {\n return PersistencePromise.resolve(this.mutationQueue.length === 0);\n };\n MemoryMutationQueue.prototype.getNextBatchId = function (transaction) {\n return PersistencePromise.resolve(this.nextBatchId);\n };\n MemoryMutationQueue.prototype.getHighestAcknowledgedBatchId = function (transaction) {\n return PersistencePromise.resolve(this.highestAcknowledgedBatchId);\n };\n MemoryMutationQueue.prototype.acknowledgeBatch = function (transaction, batch, streamToken) {\n var batchId = batch.batchId;\n assert(batchId > this.highestAcknowledgedBatchId, 'Mutation batchIDs must be acknowledged in order');\n var batchIndex = this.indexOfExistingBatchId(batchId, 'acknowledged');\n // Verify that the batch in the queue is the one to be acknowledged.\n var check = this.mutationQueue[batchIndex];\n assert(batchId === check.batchId, 'Queue ordering failure: expected batch ' +\n batchId +\n ', got batch ' +\n check.batchId);\n assert(!check.isTombstone(), \"Can't acknowledge a previously removed batch\");\n this.highestAcknowledgedBatchId = batchId;\n this.lastStreamToken = streamToken;\n return PersistencePromise.resolve();\n };\n MemoryMutationQueue.prototype.getLastStreamToken = function (transaction) {\n return PersistencePromise.resolve(this.lastStreamToken);\n };\n MemoryMutationQueue.prototype.setLastStreamToken = function (transaction, streamToken) {\n this.lastStreamToken = streamToken;\n return PersistencePromise.resolve();\n };\n MemoryMutationQueue.prototype.addMutationBatch = function (transaction, localWriteTime, mutations) {\n assert(mutations.length !== 0, 'Mutation batches should not be empty');\n var batchId = this.nextBatchId;\n this.nextBatchId++;\n if (this.mutationQueue.length > 0) {\n var prior = this.mutationQueue[this.mutationQueue.length - 1];\n assert(prior.batchId < batchId, 'Mutation batchIDs must be monotonically increasing order');\n }\n var batch = new MutationBatch(batchId, localWriteTime, mutations);\n this.mutationQueue.push(batch);\n // Track references by document key.\n for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {\n var mutation = mutations_1[_i];\n this.batchesByDocumentKey = this.batchesByDocumentKey.add(new DocReference(mutation.key, batchId));\n }\n return PersistencePromise.resolve(batch);\n };\n MemoryMutationQueue.prototype.lookupMutationBatch = function (transaction, batchId) {\n return PersistencePromise.resolve(this.findMutationBatch(batchId));\n };\n MemoryMutationQueue.prototype.getNextMutationBatchAfterBatchId = function (transaction, batchId) {\n var size = this.mutationQueue.length;\n // All batches with batchId <= this.highestAcknowledgedBatchId have been\n // acknowledged so the first unacknowledged batch after batchID will have a\n // batchID larger than both of these values.\n batchId = Math.max(batchId + 1, this.highestAcknowledgedBatchId);\n // The requested batchId may still be out of range so normalize it to the\n // start of the queue.\n var rawIndex = this.indexOfBatchId(batchId);\n var index = rawIndex < 0 ? 0 : rawIndex;\n // Finally return the first non-tombstone batch.\n for (; index < size; index++) {\n var batch = this.mutationQueue[index];\n if (!batch.isTombstone()) {\n return PersistencePromise.resolve(batch);\n }\n }\n return PersistencePromise.resolve(null);\n };\n MemoryMutationQueue.prototype.getAllMutationBatches = function (transaction) {\n return PersistencePromise.resolve(this.getAllLiveMutationBatchesBeforeIndex(this.mutationQueue.length));\n };\n MemoryMutationQueue.prototype.getAllMutationBatchesThroughBatchId = function (transaction, batchId) {\n var count = this.mutationQueue.length;\n var endIndex = this.indexOfBatchId(batchId);\n if (endIndex < 0) {\n endIndex = 0;\n }\n else if (endIndex >= count) {\n endIndex = count;\n }\n else {\n // The endIndex is in the queue so increment to pull everything in the\n // queue including it.\n endIndex++;\n }\n return PersistencePromise.resolve(this.getAllLiveMutationBatchesBeforeIndex(endIndex));\n };\n MemoryMutationQueue.prototype.getAllMutationBatchesAffectingDocumentKey = function (transaction, documentKey) {\n var _this = this;\n var start = new DocReference(documentKey, 0);\n var end = new DocReference(documentKey, Number.POSITIVE_INFINITY);\n var result = [];\n this.batchesByDocumentKey.forEachInRange([start, end], function (ref) {\n assert(documentKey.isEqual(ref.key), \"Should only iterate over a single key's batches\");\n var batch = _this.findMutationBatch(ref.targetOrBatchId);\n assert(batch !== null, 'Batches in the index must exist in the main table');\n result.push(batch);\n });\n return PersistencePromise.resolve(result);\n };\n MemoryMutationQueue.prototype.getAllMutationBatchesAffectingQuery = function (transaction, query) {\n var _this = this;\n // Use the query path as a prefix for testing if a document matches the\n // query.\n var prefix = query.path;\n var immediateChildrenPathLength = prefix.length + 1;\n // Construct a document reference for actually scanning the index. Unlike\n // the prefix the document key in this reference must have an even number of\n // segments. The empty segment can be used a suffix of the query path\n // because it precedes all other segments in an ordered traversal.\n var startPath = prefix;\n if (!DocumentKey.isDocumentKey(startPath)) {\n startPath = startPath.child('');\n }\n var start = new DocReference(new DocumentKey(startPath), 0);\n // Find unique batchIDs referenced by all documents potentially matching the\n // query.\n var uniqueBatchIDs = new SortedSet(primitiveComparator);\n this.batchesByDocumentKey.forEachWhile(function (ref) {\n var rowKeyPath = ref.key.path;\n if (!prefix.isPrefixOf(rowKeyPath)) {\n return false;\n }\n else {\n // Rows with document keys more than one segment longer than the query\n // path can't be matches. For example, a query on 'rooms' can't match\n // the document /rooms/abc/messages/xyx.\n // TODO(mcg): we'll need a different scanner when we implement\n // ancestor queries.\n if (rowKeyPath.length === immediateChildrenPathLength) {\n uniqueBatchIDs = uniqueBatchIDs.add(ref.targetOrBatchId);\n }\n return true;\n }\n }, start);\n // Construct an array of matching batches, sorted by batchID to ensure that\n // multiple mutations affecting the same document key are applied in order.\n var result = [];\n uniqueBatchIDs.forEach(function (batchId) {\n var batch = _this.findMutationBatch(batchId);\n if (batch !== null) {\n result.push(batch);\n }\n });\n return PersistencePromise.resolve(result);\n };\n MemoryMutationQueue.prototype.removeMutationBatches = function (transaction, batches) {\n var batchCount = batches.length;\n assert(batchCount > 0, 'Should not remove mutations when none exist.');\n var firstBatchId = batches[0].batchId;\n var queueCount = this.mutationQueue.length;\n // Find the position of the first batch for removal. This need not be the\n // first entry in the queue.\n var startIndex = this.indexOfExistingBatchId(firstBatchId, 'removed');\n assert(this.mutationQueue[startIndex].batchId === firstBatchId, 'Removed batches must exist in the queue');\n // Check that removed batches are contiguous (while excluding tombstones).\n var batchIndex = 1;\n var queueIndex = startIndex + 1;\n while (batchIndex < batchCount && queueIndex < queueCount) {\n var batch = this.mutationQueue[queueIndex];\n if (batch.isTombstone()) {\n queueIndex++;\n continue;\n }\n assert(batch.batchId === batches[batchIndex].batchId, 'Removed batches must be contiguous in the queue');\n batchIndex++;\n queueIndex++;\n }\n // Only actually remove batches if removing at the front of the queue.\n // Previously rejected batches may have left tombstones in the queue, so\n // expand the removal range to include any tombstones.\n if (startIndex === 0) {\n for (; queueIndex < queueCount; queueIndex++) {\n var batch = this.mutationQueue[queueIndex];\n if (!batch.isTombstone()) {\n break;\n }\n }\n var length_1 = queueIndex - startIndex;\n this.mutationQueue.splice(startIndex, length_1);\n }\n else {\n // Mark the tombstones\n for (var i = startIndex; i < queueIndex; i++) {\n this.mutationQueue[i] = this.mutationQueue[i].toTombstone();\n }\n }\n var references = this.batchesByDocumentKey;\n for (var _i = 0, batches_1 = batches; _i < batches_1.length; _i++) {\n var batch = batches_1[_i];\n var batchId = batch.batchId;\n for (var _a = 0, _b = batch.mutations; _a < _b.length; _a++) {\n var mutation = _b[_a];\n var key = mutation.key;\n if (this.garbageCollector !== null) {\n this.garbageCollector.addPotentialGarbageKey(key);\n }\n var ref = new DocReference(key, batchId);\n references = references.delete(ref);\n }\n }\n this.batchesByDocumentKey = references;\n return PersistencePromise.resolve();\n };\n MemoryMutationQueue.prototype.setGarbageCollector = function (garbageCollector) {\n this.garbageCollector = garbageCollector;\n };\n MemoryMutationQueue.prototype.containsKey = function (txn, key) {\n var ref = new DocReference(key, 0);\n var firstRef = this.batchesByDocumentKey.firstAfterOrEqual(ref);\n return PersistencePromise.resolve(key.isEqual(firstRef && firstRef.key));\n };\n MemoryMutationQueue.prototype.performConsistencyCheck = function (txn) {\n if (this.mutationQueue.length === 0) {\n assert(this.batchesByDocumentKey.isEmpty(), 'Document leak -- detected dangling mutation references when queue is empty.');\n }\n return PersistencePromise.resolve();\n };\n /**\n * A private helper that collects all the mutations batches in the queue up to\n * but not including the given endIndex. All tombstones in the queue are\n * excluded.\n */\n MemoryMutationQueue.prototype.getAllLiveMutationBatchesBeforeIndex = function (endIndex) {\n var result = [];\n for (var i = 0; i < endIndex; i++) {\n var batch = this.mutationQueue[i];\n if (!batch.isTombstone()) {\n result.push(batch);\n }\n }\n return result;\n };\n /**\n * Finds the index of the given batchId in the mutation queue and asserts that\n * the resulting index is within the bounds of the queue.\n *\n * @param batchId The batchId to search for\n * @param action A description of what the caller is doing, phrased in passive\n * form (e.g. \"acknowledged\" in a routine that acknowledges batches).\n */\n MemoryMutationQueue.prototype.indexOfExistingBatchId = function (batchId, action) {\n var index = this.indexOfBatchId(batchId);\n assert(index >= 0 && index < this.mutationQueue.length, 'Batches must exist to be ' + action);\n return index;\n };\n /**\n * Finds the index of the given batchId in the mutation queue. This operation\n * is O(1).\n *\n * @return The computed index of the batch with the given batchId, based on\n * the state of the queue. Note this index can be negative if the requested\n * batchId has already been remvoed from the queue or past the end of the\n * queue if the batchId is larger than the last added batch.\n */\n MemoryMutationQueue.prototype.indexOfBatchId = function (batchId) {\n if (this.mutationQueue.length === 0) {\n // As an index this is past the end of the queue\n return 0;\n }\n // Examine the front of the queue to figure out the difference between the\n // batchId and indexes in the array. Note that since the queue is ordered\n // by batchId, if the first batch has a larger batchId then the requested\n // batchId doesn't exist in the queue.\n var firstBatchId = this.mutationQueue[0].batchId;\n return batchId - firstBatchId;\n };\n /**\n * A version of lookupMutationBatch that doesn't return a promise, this makes\n * other functions that uses this code easier to read and more efficent.\n */\n MemoryMutationQueue.prototype.findMutationBatch = function (batchId) {\n var index = this.indexOfBatchId(batchId);\n if (index < 0 || index >= this.mutationQueue.length) {\n return null;\n }\n var batch = this.mutationQueue[index];\n assert(batch.batchId === batchId, 'If found batch must match');\n return batch.isTombstone() ? null : batch;\n };\n return MemoryMutationQueue;\n}());\nexport { MemoryMutationQueue };\n\n//# sourceMappingURL=memory_mutation_queue.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SnapshotVersion } from '../core/snapshot_version';\nimport { ObjectMap } from '../util/obj_map';\nimport { PersistencePromise } from './persistence_promise';\nimport { ReferenceSet } from './reference_set';\nvar MemoryQueryCache = /** @class */ (function () {\n function MemoryQueryCache() {\n /**\n * Maps a query to the data about that query\n */\n this.queries = new ObjectMap(function (q) { return q.canonicalId(); });\n /** The last received snapshot version. */\n this.lastRemoteSnapshotVersion = SnapshotVersion.MIN;\n /** The highest numbered target ID encountered. */\n this.highestTargetId = 0;\n /**\n * A ordered bidirectional mapping between documents and the remote target\n * IDs.\n */\n this.references = new ReferenceSet();\n }\n MemoryQueryCache.prototype.start = function (transaction) {\n // Nothing to do.\n return PersistencePromise.resolve();\n };\n MemoryQueryCache.prototype.getLastRemoteSnapshotVersion = function () {\n return this.lastRemoteSnapshotVersion;\n };\n MemoryQueryCache.prototype.getHighestTargetId = function () {\n return this.highestTargetId;\n };\n MemoryQueryCache.prototype.setLastRemoteSnapshotVersion = function (transaction, snapshotVersion) {\n this.lastRemoteSnapshotVersion = snapshotVersion;\n return PersistencePromise.resolve();\n };\n MemoryQueryCache.prototype.addQueryData = function (transaction, queryData) {\n this.queries.set(queryData.query, queryData);\n var targetId = queryData.targetId;\n if (targetId > this.highestTargetId) {\n this.highestTargetId = targetId;\n }\n return PersistencePromise.resolve();\n };\n MemoryQueryCache.prototype.removeQueryData = function (transaction, queryData) {\n this.queries.delete(queryData.query);\n this.references.removeReferencesForId(queryData.targetId);\n return PersistencePromise.resolve();\n };\n MemoryQueryCache.prototype.getQueryData = function (transaction, query) {\n var queryData = this.queries.get(query) || null;\n return PersistencePromise.resolve(queryData);\n };\n MemoryQueryCache.prototype.addMatchingKeys = function (txn, keys, targetId) {\n this.references.addReferences(keys, targetId);\n return PersistencePromise.resolve();\n };\n MemoryQueryCache.prototype.removeMatchingKeys = function (txn, keys, targetId) {\n this.references.removeReferences(keys, targetId);\n return PersistencePromise.resolve();\n };\n MemoryQueryCache.prototype.removeMatchingKeysForTargetId = function (txn, targetId) {\n this.references.removeReferencesForId(targetId);\n return PersistencePromise.resolve();\n };\n MemoryQueryCache.prototype.getMatchingKeysForTargetId = function (txn, targetId) {\n var matchingKeys = this.references.referencesForId(targetId);\n return PersistencePromise.resolve(matchingKeys);\n };\n MemoryQueryCache.prototype.setGarbageCollector = function (gc) {\n this.references.setGarbageCollector(gc);\n };\n MemoryQueryCache.prototype.containsKey = function (txn, key) {\n return this.references.containsKey(txn, key);\n };\n return MemoryQueryCache;\n}());\nexport { MemoryQueryCache };\n\n//# sourceMappingURL=memory_query_cache.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { documentMap, maybeDocumentMap } from '../model/collections';\nimport { Document } from '../model/document';\nimport { DocumentKey } from '../model/document_key';\nimport { PersistencePromise } from './persistence_promise';\nvar MemoryRemoteDocumentCache = /** @class */ (function () {\n function MemoryRemoteDocumentCache() {\n this.docs = maybeDocumentMap();\n }\n MemoryRemoteDocumentCache.prototype.addEntry = function (transaction, maybeDocument) {\n this.docs = this.docs.insert(maybeDocument.key, maybeDocument);\n return PersistencePromise.resolve();\n };\n MemoryRemoteDocumentCache.prototype.removeEntry = function (transaction, documentKey) {\n this.docs = this.docs.remove(documentKey);\n return PersistencePromise.resolve();\n };\n MemoryRemoteDocumentCache.prototype.getEntry = function (transaction, documentKey) {\n return PersistencePromise.resolve(this.docs.get(documentKey));\n };\n MemoryRemoteDocumentCache.prototype.getDocumentsMatchingQuery = function (transaction, query) {\n var results = documentMap();\n // Documents are ordered by key, so we can use a prefix scan to narrow down\n // the documents we need to match the query against.\n var prefix = new DocumentKey(query.path.child(''));\n var iterator = this.docs.getIteratorFrom(prefix);\n while (iterator.hasNext()) {\n var _a = iterator.getNext(), key = _a.key, maybeDoc = _a.value;\n if (!query.path.isPrefixOf(key.path)) {\n break;\n }\n if (maybeDoc instanceof Document && query.matches(maybeDoc)) {\n results = results.insert(maybeDoc.key, maybeDoc);\n }\n }\n return PersistencePromise.resolve(results);\n };\n return MemoryRemoteDocumentCache;\n}());\nexport { MemoryRemoteDocumentCache };\n\n//# sourceMappingURL=memory_remote_document_cache.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { assert } from '../util/assert';\nimport { debug } from '../util/log';\nimport { MemoryMutationQueue } from './memory_mutation_queue';\nimport { MemoryQueryCache } from './memory_query_cache';\nimport { MemoryRemoteDocumentCache } from './memory_remote_document_cache';\nvar LOG_TAG = 'MemoryPersistence';\n/**\n * A memory-backed instance of Persistence. Data is stored only in RAM and\n * not persisted across sessions.\n */\nvar MemoryPersistence = /** @class */ (function () {\n function MemoryPersistence() {\n /**\n * Note that these are retained here to make it easier to write tests\n * affecting both the in-memory and IndexedDB-backed persistence layers. Tests\n * can create a new LocalStore wrapping this Persistence instance and this\n * will make the in-memory persistence layer behave as if it were actually\n * persisting values.\n */\n this.mutationQueues = {};\n this.remoteDocumentCache = new MemoryRemoteDocumentCache();\n this.queryCache = new MemoryQueryCache();\n this.started = false;\n }\n MemoryPersistence.prototype.start = function () {\n assert(!this.started, 'MemoryPersistence double-started!');\n this.started = true;\n // No durable state to read on startup.\n return Promise.resolve();\n };\n MemoryPersistence.prototype.shutdown = function () {\n // No durable state to ensure is closed on shutdown.\n assert(this.started, 'MemoryPersistence shutdown without start!');\n this.started = false;\n return Promise.resolve();\n };\n MemoryPersistence.prototype.getMutationQueue = function (user) {\n var queue = this.mutationQueues[user.toKey()];\n if (!queue) {\n queue = new MemoryMutationQueue();\n this.mutationQueues[user.toKey()] = queue;\n }\n return queue;\n };\n MemoryPersistence.prototype.getQueryCache = function () {\n return this.queryCache;\n };\n MemoryPersistence.prototype.getRemoteDocumentCache = function () {\n return this.remoteDocumentCache;\n };\n MemoryPersistence.prototype.runTransaction = function (action, operation) {\n debug(LOG_TAG, 'Starting transaction:', action);\n return operation(new MemoryPersistenceTransaction()).toPromise();\n };\n return MemoryPersistence;\n}());\nexport { MemoryPersistence };\n/** Dummy class since memory persistence doesn't actually use transactions. */\nvar MemoryPersistenceTransaction = /** @class */ (function () {\n function MemoryPersistenceTransaction() {\n }\n return MemoryPersistenceTransaction;\n}());\n\n//# sourceMappingURL=memory_persistence.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { documentKeySet } from '../model/collections';\nimport { PersistencePromise } from './persistence_promise';\n/**\n * A garbage collector implementation that does absolutely nothing. It ignores\n * all addGarbageSource and addPotentialGarbageKey messages and and never\n * produces any garbage.\n */\nvar NoOpGarbageCollector = /** @class */ (function () {\n function NoOpGarbageCollector() {\n this.isEager = false;\n }\n NoOpGarbageCollector.prototype.addGarbageSource = function (garbageSource) {\n // Not tracking garbage so don't track sources.\n };\n NoOpGarbageCollector.prototype.removeGarbageSource = function (garbageSource) {\n // Not tracking garbage so don't track sources.\n };\n NoOpGarbageCollector.prototype.addPotentialGarbageKey = function (key) {\n // Not tracking garbage so ignore.\n };\n NoOpGarbageCollector.prototype.collectGarbage = function (txn) {\n return PersistencePromise.resolve(documentKeySet());\n };\n return NoOpGarbageCollector;\n}());\nexport { NoOpGarbageCollector };\n\n//# sourceMappingURL=no_op_garbage_collector.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n }\n return Deferred;\n}());\nexport { Deferred };\n/**\n * Takes an array of values and sequences them using the promise (or value)\n * returned by the supplied callback. The callback for each item is called\n * after the promise is resolved for the previous item.\n * The function returns a promise which is resolved after the promise for\n * the last item is resolved.\n */\nexport function sequence(values, fn, initialValue) {\n var result = Promise.resolve(initialValue);\n values.forEach(function (value) {\n result = result.then(function (lastResult) { return fn(value, lastResult); });\n });\n return result;\n}\n\n//# sourceMappingURL=promise.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as log from '../util/log';\nimport { Deferred } from '../util/promise';\nvar LOG_TAG = 'ExponentialBackoff';\n/**\n * A helper for running delayed tasks following an exponential backoff curve\n * between attempts.\n *\n * Each delay is made up of a \"base\" delay which follows the exponential\n * backoff curve, and a +/- 50% \"jitter\" that is calculated and added to the\n * base delay. This prevents clients from accidentally synchronizing their\n * delays causing spikes of load to the backend.\n */\nvar ExponentialBackoff = /** @class */ (function () {\n function ExponentialBackoff(\n /**\n * The initial delay (used as the base delay on the first retry attempt).\n * Note that jitter will still be applied, so the actual delay could be as\n * little as 0.5*initialDelayMs.\n */\n initialDelayMs, \n /**\n * The multiplier to use to determine the extended base delay after each\n * attempt.\n */\n backoffFactor, \n /**\n * The maximum base delay after which no further backoff is performed.\n * Note that jitter will still be applied, so the actual delay could be as\n * much as 1.5*maxDelayMs.\n */\n maxDelayMs) {\n this.initialDelayMs = initialDelayMs;\n this.backoffFactor = backoffFactor;\n this.maxDelayMs = maxDelayMs;\n this.reset();\n }\n /**\n * Resets the backoff delay.\n *\n * The very next backoffAndWait() will have no delay. If it is called again\n * (i.e. due to an error), initialDelayMs (plus jitter) will be used, and\n * subsequent ones will increase according to the backoffFactor.\n */\n ExponentialBackoff.prototype.reset = function () {\n this.currentBaseMs = 0;\n };\n /**\n * Resets the backoff delay to the maximum delay (e.g. for use after a\n * RESOURCE_EXHAUSTED error).\n */\n ExponentialBackoff.prototype.resetToMax = function () {\n this.currentBaseMs = this.maxDelayMs;\n };\n /**\n * Returns a promise that resolves after currentDelayMs, and increases the\n * delay for any subsequent attempts.\n */\n ExponentialBackoff.prototype.backoffAndWait = function () {\n var def = new Deferred();\n // First schedule using the current base (which may be 0 and should be\n // honored as such).\n var delayWithJitterMs = this.currentBaseMs + this.jitterDelayMs();\n if (this.currentBaseMs > 0) {\n log.debug(LOG_TAG, \"Backing off for \" + delayWithJitterMs + \" ms \" +\n (\"(base delay: \" + this.currentBaseMs + \" ms)\"));\n }\n setTimeout(function () {\n def.resolve();\n }, delayWithJitterMs);\n // Apply backoff factor to determine next delay and ensure it is within\n // bounds.\n this.currentBaseMs *= this.backoffFactor;\n if (this.currentBaseMs < this.initialDelayMs) {\n this.currentBaseMs = this.initialDelayMs;\n }\n if (this.currentBaseMs > this.maxDelayMs) {\n this.currentBaseMs = this.maxDelayMs;\n }\n return def.promise;\n };\n /** Returns a random value in the range [-currentBaseMs/2, currentBaseMs/2] */\n ExponentialBackoff.prototype.jitterDelayMs = function () {\n return (Math.random() - 0.5) * this.currentBaseMs;\n };\n return ExponentialBackoff;\n}());\nexport { ExponentialBackoff };\n\n//# sourceMappingURL=backoff.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { assert } from '../util/assert';\nimport { Code, FirestoreError } from '../util/error';\nimport * as log from '../util/log';\nimport { ExponentialBackoff } from './backoff';\nimport { isNullOrUndefined } from '../util/types';\nvar LOG_TAG = 'PersistentStream';\nvar PersistentStreamState;\n(function (PersistentStreamState) {\n /**\n * The streaming RPC is not running and there's no error condition.\n * Calling `start` will start the stream immediately without backoff.\n * While in this state isStarted will return false.\n */\n PersistentStreamState[PersistentStreamState[\"Initial\"] = 0] = \"Initial\";\n /**\n * The stream is starting, and is waiting for an auth token to attach to\n * the initial request. While in this state, isStarted will return\n * true but isOpen will return false.\n */\n PersistentStreamState[PersistentStreamState[\"Auth\"] = 1] = \"Auth\";\n /**\n * The streaming RPC is up and running. Requests and responses can flow\n * freely. Both isStarted and isOpen will return true.\n */\n PersistentStreamState[PersistentStreamState[\"Open\"] = 2] = \"Open\";\n /**\n * The stream encountered an error. The next start attempt will back off.\n * While in this state isStarted() will return false.\n *\n */\n PersistentStreamState[PersistentStreamState[\"Error\"] = 3] = \"Error\";\n /**\n * An in-between state after an error where the stream is waiting before\n * re-starting. After\n * waiting is complete, the stream will try to open. While in this\n * state isStarted() will return YES but isOpen will return false.\n */\n PersistentStreamState[PersistentStreamState[\"Backoff\"] = 4] = \"Backoff\";\n /**\n * The stream has been explicitly stopped; no further events will be emitted.\n */\n PersistentStreamState[PersistentStreamState[\"Stopped\"] = 5] = \"Stopped\";\n})(PersistentStreamState || (PersistentStreamState = {}));\n/**\n * Initial backoff time in milliseconds after an error.\n * Set to 1s according to https://cloud.google.com/apis/design/errors.\n */\nvar BACKOFF_INITIAL_DELAY_MS = 1000;\n/** Maximum backoff time in milliseconds */\nvar BACKOFF_MAX_DELAY_MS = 60 * 1000;\nvar BACKOFF_FACTOR = 1.5;\n/** The time a stream stays open after it is marked idle. */\nvar IDLE_TIMEOUT_MS = 60 * 1000;\n/**\n * A PersistentStream is an abstract base class that represents a streaming RPC\n * to the Firestore backend. It's built on top of the connections own support\n * for streaming RPCs, and adds several critical features for our clients:\n *\n * - Exponential backoff on failure\n * - Authentication via CredentialsProvider\n * - Dispatching all callbacks into the shared worker queue\n *\n * Subclasses of PersistentStream implement serialization of models to and\n * from the JSON representation of the protocol buffers for a specific\n * streaming RPC.\n *\n * ## Starting and Stopping\n *\n * Streaming RPCs are stateful and need to be `start`ed before messages can\n * be sent and received. The PersistentStream will call the onOpen function\n * of the listener once the stream is ready to accept requests.\n *\n * Should a `start` fail, PersistentStream will call the registered\n * onClose with a FirestoreError indicating what went wrong.\n *\n * A PersistentStream can be started and stopped repeatedly.\n *\n * Generic types:\n * SendType: The type of the outgoing message of the underlying\n * connection stream\n * ReceiveType: The type of the incoming message of the underlying\n * connection stream\n * ListenerType: The type of the listener that will be used for callbacks\n */\nvar PersistentStream = /** @class */ (function () {\n function PersistentStream(queue, connection, credentialsProvider, \n // Used for faster retries in testing\n initialBackoffDelay) {\n this.queue = queue;\n this.connection = connection;\n this.credentialsProvider = credentialsProvider;\n this.idle = false;\n this.stream = null;\n this.listener = null;\n this.backoff = new ExponentialBackoff(initialBackoffDelay ? initialBackoffDelay : BACKOFF_INITIAL_DELAY_MS, BACKOFF_FACTOR, BACKOFF_MAX_DELAY_MS);\n this.state = PersistentStreamState.Initial;\n }\n /**\n * Returns true if `start` has been called and no error has occurred. True\n * indicates the stream is open or in the process of opening (which\n * encompasses respecting backoff, getting auth tokens, and starting the\n * actual RPC). Use `isOpen` to determine if the stream is open and ready for\n * outbound requests.\n */\n PersistentStream.prototype.isStarted = function () {\n return (this.state === PersistentStreamState.Backoff ||\n this.state === PersistentStreamState.Auth ||\n this.state === PersistentStreamState.Open);\n };\n /**\n * Returns true if the underlying RPC is open (the openHandler has been\n * called) and the stream is ready for outbound requests.\n */\n PersistentStream.prototype.isOpen = function () {\n return this.state === PersistentStreamState.Open;\n };\n /**\n * Starts the RPC. Only allowed if isStarted returns false. The stream is\n * not immediately ready for use: onOpen will be invoked when the RPC is ready\n * for outbound requests, at which point isOpen will return true.\n *\n * When start returns, isStarted will return true.\n */\n PersistentStream.prototype.start = function (listener) {\n if (this.state === PersistentStreamState.Error) {\n this.performBackoff(listener);\n return;\n }\n assert(this.state === PersistentStreamState.Initial, 'Already started');\n this.listener = listener;\n this.auth();\n };\n /**\n * Stops the RPC. This call is idempotent and allowed regardless of the\n * current isStarted state.\n *\n * When stop returns, isStarted and isOpen will both return false.\n */\n PersistentStream.prototype.stop = function () {\n if (this.isStarted()) {\n this.close(PersistentStreamState.Stopped);\n }\n };\n /**\n * After an error the stream will usually back off on the next attempt to\n * start it. If the error warrants an immediate restart of the stream, the\n * sender can use this to indicate that the receiver should not back off.\n *\n * Each error will call the onClose function. That function can decide to\n * inhibit backoff if required.\n */\n PersistentStream.prototype.inhibitBackoff = function () {\n assert(!this.isStarted(), 'Can only inhibit backoff in a stopped state');\n this.state = PersistentStreamState.Initial;\n this.backoff.reset();\n };\n /**\n * Initializes the idle timer. If no write takes place within one minute, the\n * WebChannel stream will be closed.\n */\n PersistentStream.prototype.markIdle = function () {\n var _this = this;\n this.idle = true;\n this.queue\n .schedule(function () {\n return _this.handleIdleCloseTimer();\n }, IDLE_TIMEOUT_MS)\n .catch(function (err) {\n // When the AsyncQueue gets drained during testing, pending Promises\n // (including these idle checks) will get rejected. We special-case\n // these cancelled idle checks to make sure that these specific Promise\n // rejections are not considered unhandled.\n assert(err.code === Code.CANCELLED, \"Received unexpected error in idle timeout closure. Expected CANCELLED, but was: \" + err);\n });\n };\n /** Sends a message to the underlying stream. */\n PersistentStream.prototype.sendRequest = function (msg) {\n this.cancelIdleCheck();\n this.stream.send(msg);\n };\n /** Called by the idle timer when the stream should close due to inactivity. */\n PersistentStream.prototype.handleIdleCloseTimer = function () {\n if (this.isOpen() && this.idle) {\n // When timing out an idle stream there's no reason to force the stream into backoff when\n // it restarts so set the stream state to Initial instead of Error.\n return this.close(PersistentStreamState.Initial);\n }\n return Promise.resolve();\n };\n /** Marks the stream as active again. */\n PersistentStream.prototype.cancelIdleCheck = function () {\n this.idle = false;\n };\n /**\n * Closes the stream and cleans up as necessary:\n *\n * * closes the underlying GRPC stream;\n * * calls the onClose handler with the given 'error';\n * * sets internal stream state to 'finalState';\n * * adjusts the backoff timer based on the error\n *\n * A new stream can be opened by calling `start` unless `finalState` is set to\n * `PersistentStreamState.Stopped`.\n *\n * @param finalState the intended state of the stream after closing.\n * @param error the error the connection was closed with.\n */\n PersistentStream.prototype.close = function (finalState, error) {\n assert(finalState === PersistentStreamState.Error || isNullOrUndefined(error), \"Can't provide an error when not in an error state.\");\n this.cancelIdleCheck();\n if (finalState !== PersistentStreamState.Error) {\n // If this is an intentional close ensure we don't delay our next connection attempt.\n this.backoff.reset();\n }\n else if (error && error.code === Code.RESOURCE_EXHAUSTED) {\n // Log the error. (Probably either 'quota exceeded' or 'max queue length reached'.)\n log.error(error.toString());\n log.error('Using maximum backoff delay to prevent overloading the backend.');\n this.backoff.resetToMax();\n }\n // Clean up the underlying stream because we are no longer interested in events.\n if (this.stream !== null) {\n this.tearDown();\n this.stream.close();\n this.stream = null;\n }\n // This state must be assigned before calling onClose() to allow the callback to\n // inhibit backoff or otherwise manipulate the state in its non-started state.\n this.state = finalState;\n var listener = this.listener;\n // Clear the listener to avoid bleeding of events from the underlying streams.\n this.listener = null;\n // If the caller explicitly requested a stream stop, don't notify them of a closing stream (it\n // could trigger undesirable recovery logic, etc.).\n if (finalState !== PersistentStreamState.Stopped) {\n return listener.onClose(error);\n }\n else {\n return Promise.resolve();\n }\n };\n /**\n * Can be overridden to perform additional cleanup before the stream is closed.\n * Calling super.tearDown() is not required.\n */\n PersistentStream.prototype.tearDown = function () { };\n PersistentStream.prototype.auth = function () {\n var _this = this;\n assert(this.state === PersistentStreamState.Initial, 'Must be in initial state to auth');\n this.state = PersistentStreamState.Auth;\n this.credentialsProvider.getToken(/*forceRefresh=*/ false).then(function (token) {\n // Normally we'd have to schedule the callback on the AsyncQueue.\n // However, the following calls are safe to be called outside the\n // AsyncQueue since they don't chain asynchronous calls\n _this.startStream(token);\n }, function (error) {\n _this.queue.schedule(function () {\n if (_this.state !== PersistentStreamState.Stopped) {\n // Stream can be stopped while waiting for authorization.\n var rpcError = new FirestoreError(Code.UNKNOWN, 'Fetching auth token failed: ' + error.message);\n return _this.handleStreamClose(rpcError);\n }\n else {\n return Promise.resolve();\n }\n });\n });\n };\n PersistentStream.prototype.startStream = function (token) {\n var _this = this;\n if (this.state === PersistentStreamState.Stopped) {\n // Stream can be stopped while waiting for authorization.\n return;\n }\n assert(this.state === PersistentStreamState.Auth, 'Trying to start stream in a non-auth state');\n // Helper function to dispatch to AsyncQueue and make sure that any\n // close will seem instantaneous and events are prevented from being\n // raised after the close call\n var dispatchIfStillActive = function (stream, fn) {\n _this.queue.schedule(function () {\n // Only raise events if the stream instance has not changed\n if (_this.stream === stream) {\n return fn();\n }\n else {\n return Promise.resolve();\n }\n });\n };\n // Only start stream if listener has not changed\n if (this.listener !== null) {\n var currentStream_1 = this.startRpc(token);\n this.stream = currentStream_1;\n this.stream.onOpen(function () {\n dispatchIfStillActive(currentStream_1, function () {\n assert(_this.state === PersistentStreamState.Auth, 'Expected stream to be in state auth, but was ' + _this.state);\n _this.state = PersistentStreamState.Open;\n return _this.listener.onOpen();\n });\n });\n this.stream.onClose(function (error) {\n dispatchIfStillActive(currentStream_1, function () {\n return _this.handleStreamClose(error);\n });\n });\n this.stream.onMessage(function (msg) {\n dispatchIfStillActive(currentStream_1, function () {\n return _this.onMessage(msg);\n });\n });\n }\n };\n PersistentStream.prototype.performBackoff = function (listener) {\n var _this = this;\n assert(this.state === PersistentStreamState.Error, 'Should only perform backoff in an error case');\n this.state = PersistentStreamState.Backoff;\n this.backoff.backoffAndWait().then(function () {\n // Backoff does not run on the AsyncQueue, so we need to reschedule to\n // make sure the queue blocks\n _this.queue.schedule(function () {\n if (_this.state === PersistentStreamState.Stopped) {\n // Stream can be stopped while waiting for backoff to complete.\n return Promise.resolve();\n }\n _this.state = PersistentStreamState.Initial;\n _this.start(listener);\n assert(_this.isStarted(), 'PersistentStream should have started');\n return Promise.resolve();\n });\n });\n };\n PersistentStream.prototype.handleStreamClose = function (error) {\n assert(this.isStarted(), \"Can't handle server close on non-started stream\");\n log.debug(LOG_TAG, \"close with error: \" + error);\n this.stream = null;\n // In theory the stream could close cleanly, however, in our current model\n // we never expect this to happen because if we stop a stream ourselves,\n // this callback will never be called. To prevent cases where we retry\n // without a backoff accidentally, we set the stream to error in all cases.\n return this.close(PersistentStreamState.Error, error);\n };\n return PersistentStream;\n}());\nexport { PersistentStream };\n/**\n * A PersistentStream that implements the Listen RPC.\n *\n * Once the Listen stream has called the openHandler, any number of listen and\n * unlisten calls calls can be sent to control what changes will be sent from\n * the server for ListenResponses.\n */\nvar PersistentListenStream = /** @class */ (function (_super) {\n __extends(PersistentListenStream, _super);\n function PersistentListenStream(databaseInfo, queue, connection, credentials, serializer, initialBackoffDelay) {\n var _this = _super.call(this, queue, connection, credentials, initialBackoffDelay) || this;\n _this.databaseInfo = databaseInfo;\n _this.serializer = serializer;\n return _this;\n }\n PersistentListenStream.prototype.startRpc = function (token) {\n return this.connection.openStream('Listen', token);\n };\n PersistentListenStream.prototype.onMessage = function (watchChangeProto) {\n // A successful response means the stream is healthy\n this.backoff.reset();\n var watchChange = this.serializer.fromWatchChange(watchChangeProto);\n var snapshot = this.serializer.versionFromListenResponse(watchChangeProto);\n return this.listener.onWatchChange(watchChange, snapshot);\n };\n /**\n * Registers interest in the results of the given query. If the query\n * includes a resumeToken it will be included in the request. Results that\n * affect the query will be streamed back as WatchChange messages that\n * reference the targetId.\n */\n PersistentListenStream.prototype.watch = function (queryData) {\n var request = {};\n request.database = this.serializer.encodedDatabaseId;\n request.addTarget = this.serializer.toTarget(queryData);\n var labels = this.serializer.toListenRequestLabels(queryData);\n if (labels) {\n request.labels = labels;\n }\n this.sendRequest(request);\n };\n /**\n * Unregisters interest in the results of the query associated with the\n * given targetId.\n */\n PersistentListenStream.prototype.unwatch = function (targetId) {\n var request = {};\n request.database = this.serializer.encodedDatabaseId;\n request.removeTarget = targetId;\n this.sendRequest(request);\n };\n return PersistentListenStream;\n}(PersistentStream));\nexport { PersistentListenStream };\n/**\n * A Stream that implements the Write RPC.\n *\n * The Write RPC requires the caller to maintain special streamToken\n * state in between calls, to help the server understand which responses the\n * client has processed by the time the next request is made. Every response\n * will contain a streamToken; this value must be passed to the next\n * request.\n *\n * After calling start() on this stream, the next request must be a handshake,\n * containing whatever streamToken is on hand. Once a response to this\n * request is received, all pending mutations may be submitted. When\n * submitting multiple batches of mutations at the same time, it's\n * okay to use the same streamToken for the calls to writeMutations.\n *\n * TODO(b/33271235): Use proto types\n */\nvar PersistentWriteStream = /** @class */ (function (_super) {\n __extends(PersistentWriteStream, _super);\n function PersistentWriteStream(databaseInfo, queue, connection, credentials, serializer, initialBackoffDelay) {\n var _this = _super.call(this, queue, connection, credentials, initialBackoffDelay) || this;\n _this.databaseInfo = databaseInfo;\n _this.serializer = serializer;\n _this.handshakeComplete_ = false;\n return _this;\n }\n Object.defineProperty(PersistentWriteStream.prototype, \"handshakeComplete\", {\n /**\n * Tracks whether or not a handshake has been successfully exchanged and\n * the stream is ready to accept mutations.\n */\n get: function () {\n return this.handshakeComplete_;\n },\n enumerable: true,\n configurable: true\n });\n // Override of PersistentStream.start\n PersistentWriteStream.prototype.start = function (listener) {\n this.handshakeComplete_ = false;\n _super.prototype.start.call(this, listener);\n };\n PersistentWriteStream.prototype.tearDown = function () {\n if (this.handshakeComplete_) {\n this.writeMutations([]);\n }\n };\n PersistentWriteStream.prototype.startRpc = function (token) {\n return this.connection.openStream('Write', token);\n };\n PersistentWriteStream.prototype.onMessage = function (responseProto) {\n // Always capture the last stream token.\n assert(!!responseProto.streamToken, 'Got a write response without a stream token');\n this.lastStreamToken = responseProto.streamToken;\n if (!this.handshakeComplete_) {\n // The first response is always the handshake response\n assert(!responseProto.writeResults || responseProto.writeResults.length === 0, 'Got mutation results for handshake');\n this.handshakeComplete_ = true;\n return this.listener.onHandshakeComplete();\n }\n else {\n // A successful first write response means the stream is healthy,\n // Note, that we could consider a successful handshake healthy, however,\n // the write itself might be causing an error we want to back off from.\n this.backoff.reset();\n var results = this.serializer.fromWriteResults(responseProto.writeResults);\n var commitVersion = this.serializer.fromVersion(responseProto.commitTime);\n return this.listener.onMutationResult(commitVersion, results);\n }\n };\n /**\n * Sends an initial streamToken to the server, performing the handshake\n * required to make the StreamingWrite RPC work. Subsequent\n * calls should wait until onHandshakeComplete was called.\n */\n PersistentWriteStream.prototype.writeHandshake = function () {\n assert(this.isOpen(), 'Writing handshake requires an opened stream');\n assert(!this.handshakeComplete_, 'Handshake already completed');\n // TODO(dimond): Support stream resumption. We intentionally do not set the\n // stream token on the handshake, ignoring any stream token we might have.\n var request = {};\n request.database = this.serializer.encodedDatabaseId;\n this.sendRequest(request);\n };\n /** Sends a group of mutations to the Firestore backend to apply. */\n PersistentWriteStream.prototype.writeMutations = function (mutations) {\n var _this = this;\n assert(this.isOpen(), 'Writing mutations requires an opened stream');\n assert(this.handshakeComplete_, 'Handshake must be complete before writing mutations');\n assert(this.lastStreamToken.length > 0, 'Trying to write mutation without a token');\n var request = {\n // Protos are typed with string, but we support UInt8Array on Node\n // tslint:disable-next-line:no-any\n streamToken: this.lastStreamToken,\n writes: mutations.map(function (mutation) { return _this.serializer.toMutation(mutation); })\n };\n this.sendRequest(request);\n };\n return PersistentWriteStream;\n}(PersistentStream));\nexport { PersistentWriteStream };\n\n//# sourceMappingURL=persistent_stream.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { maybeDocumentMap } from '../model/collections';\nimport { assert } from '../util/assert';\nimport { PersistentListenStream, PersistentWriteStream } from './persistent_stream';\n/**\n * Datastore is a wrapper around the external Google Cloud Datastore grpc API,\n * which provides an interface that is more convenient for the rest of the\n * client SDK architecture to consume.\n */\nvar Datastore = /** @class */ (function () {\n function Datastore(databaseInfo, queue, connection, credentials, serializer, initialBackoffDelay) {\n this.databaseInfo = databaseInfo;\n this.queue = queue;\n this.connection = connection;\n this.credentials = credentials;\n this.serializer = serializer;\n this.initialBackoffDelay = initialBackoffDelay;\n }\n Datastore.prototype.newPersistentWriteStream = function () {\n return new PersistentWriteStream(this.databaseInfo, this.queue, this.connection, this.credentials, this.serializer, this.initialBackoffDelay);\n };\n Datastore.prototype.newPersistentWatchStream = function () {\n return new PersistentListenStream(this.databaseInfo, this.queue, this.connection, this.credentials, this.serializer, this.initialBackoffDelay);\n };\n Datastore.prototype.commit = function (mutations) {\n var _this = this;\n var params = {\n database: this.serializer.encodedDatabaseId,\n writes: mutations.map(function (m) { return _this.serializer.toMutation(m); })\n };\n return this.invokeRPC('Commit', params).then(function (response) {\n return _this.serializer.fromWriteResults(response.writeResults);\n });\n };\n Datastore.prototype.lookup = function (keys) {\n var _this = this;\n var params = {\n database: this.serializer.encodedDatabaseId,\n documents: keys.map(function (k) { return _this.serializer.toName(k); })\n };\n return this.invokeStreamingRPC('BatchGetDocuments', params).then(function (response) {\n var docs = maybeDocumentMap();\n response.forEach(function (proto) {\n var doc = _this.serializer.fromMaybeDocument(proto);\n docs = docs.insert(doc.key, doc);\n });\n var result = [];\n keys.forEach(function (key) {\n var doc = docs.get(key);\n assert(!!doc, 'Missing entity in write response for ' + key);\n result.push(doc);\n });\n return result;\n });\n };\n /** Gets an auth token and invokes the provided RPC. */\n Datastore.prototype.invokeRPC = function (rpcName, request) {\n var _this = this;\n // TODO(mikelehen): Retry (with backoff) on token failures?\n return this.credentials.getToken(/*forceRefresh=*/ false).then(function (token) {\n return _this.connection.invokeRPC(rpcName, request, token);\n });\n };\n /** Gets an auth token and invokes the provided RPC with streamed results. */\n Datastore.prototype.invokeStreamingRPC = function (rpcName, request) {\n var _this = this;\n // TODO(mikelehen): Retry (with backoff) on token failures?\n return this.credentials.getToken(/*forceRefresh=*/ false).then(function (token) {\n return _this.connection.invokeStreamingRPC(rpcName, request, token);\n });\n };\n return Datastore;\n}());\nexport { Datastore };\n\n//# sourceMappingURL=datastore.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SnapshotVersion } from './snapshot_version';\nimport { documentVersionMap } from '../model/collections';\nimport { NoDocument } from '../model/document';\nimport { DeleteMutation, Precondition } from '../model/mutation';\nimport { Code, FirestoreError } from '../util/error';\n/**\n * Internal transaction object responsible for accumulating the mutations to\n * perform and the base versions for any documents read.\n */\nvar Transaction = /** @class */ (function () {\n function Transaction(datastore) {\n this.datastore = datastore;\n // The version of each document that was read during this transaction.\n this.readVersions = documentVersionMap();\n this.mutations = [];\n this.committed = false;\n }\n Transaction.prototype.recordVersion = function (doc) {\n var docVersion = doc.version;\n if (doc instanceof NoDocument) {\n // For deleted docs, we must use baseVersion 0 when we overwrite them.\n docVersion = SnapshotVersion.forDeletedDoc();\n }\n var existingVersion = this.readVersions.get(doc.key);\n if (existingVersion !== null) {\n if (!docVersion.isEqual(existingVersion)) {\n // This transaction will fail no matter what.\n throw new FirestoreError(Code.ABORTED, 'Document version changed between two reads.');\n }\n }\n else {\n this.readVersions = this.readVersions.insert(doc.key, docVersion);\n }\n };\n Transaction.prototype.lookup = function (keys) {\n var _this = this;\n if (this.committed) {\n return Promise.reject('Transaction has already completed.');\n }\n if (this.mutations.length > 0) {\n return Promise.reject('Transactions lookups are invalid after writes.');\n }\n return this.datastore.lookup(keys).then(function (docs) {\n docs.forEach(function (doc) { return _this.recordVersion(doc); });\n return docs;\n });\n };\n Transaction.prototype.write = function (mutations) {\n if (this.committed) {\n throw new FirestoreError(Code.FAILED_PRECONDITION, 'Transaction has already completed.');\n }\n this.mutations = this.mutations.concat(mutations);\n };\n /**\n * Returns the version of this document when it was read in this transaction,\n * as a precondition, or no precondition if it was not read.\n */\n Transaction.prototype.precondition = function (key) {\n var version = this.readVersions.get(key);\n if (version) {\n return Precondition.updateTime(version);\n }\n else {\n return Precondition.NONE;\n }\n };\n /**\n * Returns the precondition for a document if the operation is an update.\n */\n Transaction.prototype.preconditionForUpdate = function (key) {\n var version = this.readVersions.get(key);\n if (version && version.isEqual(SnapshotVersion.forDeletedDoc())) {\n // The document doesn't exist, so fail the transaction.\n throw new FirestoreError(Code.FAILED_PRECONDITION, \"Can't update a document that doesn't exist.\");\n }\n else if (version) {\n // Document exists, base precondition on document update time.\n return Precondition.updateTime(version);\n }\n else {\n // Document was not read, so we just use the preconditions for a blind\n // update.\n return Precondition.exists(true);\n }\n };\n Transaction.prototype.set = function (key, data) {\n this.write(data.toMutations(key, this.precondition(key)));\n };\n Transaction.prototype.update = function (key, data) {\n this.write(data.toMutations(key, this.preconditionForUpdate(key)));\n };\n Transaction.prototype.delete = function (key) {\n this.write([new DeleteMutation(key, this.precondition(key))]);\n // Since the delete will be applied before all following writes, we need to\n // ensure that the precondition for the next write will be exists: false.\n this.readVersions = this.readVersions.insert(key, SnapshotVersion.forDeletedDoc());\n };\n Transaction.prototype.commit = function () {\n var _this = this;\n var unwritten = this.readVersions;\n // For each mutation, note that the doc was written.\n this.mutations.forEach(function (mutation) {\n unwritten = unwritten.remove(mutation.key);\n });\n if (!unwritten.isEmpty()) {\n return Promise.reject(Error('Every document read in a transaction must also be written.'));\n }\n return this.datastore.commit(this.mutations).then(function () {\n _this.committed = true;\n });\n };\n return Transaction;\n}());\nexport { Transaction };\n\n//# sourceMappingURL=transaction.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { SnapshotVersion } from '../core/snapshot_version';\nimport { Transaction } from '../core/transaction';\nimport { OnlineState } from '../core/types';\nimport { QueryData, QueryPurpose } from '../local/query_data';\nimport { NoDocument } from '../model/document';\nimport { DocumentKey } from '../model/document_key';\nimport { BATCHID_UNKNOWN, MutationBatchResult } from '../model/mutation_batch';\nimport { emptyByteString } from '../platform/platform';\nimport { assert } from '../util/assert';\nimport { Code } from '../util/error';\nimport * as log from '../util/log';\nimport * as objUtils from '../util/obj';\nimport { ResetMapping, UpdateMapping } from './remote_event';\nimport { isPermanentError } from './rpc_error';\nimport { WatchChangeAggregator, WatchTargetChange, WatchTargetChangeState } from './watch_change';\nvar LOG_TAG = 'RemoteStore';\n// TODO(b/35853402): Negotiate this with the stream.\nvar MAX_PENDING_WRITES = 10;\n// The RemoteStore notifies an onlineStateHandler with OnlineState.Failed if we\n// fail to connect to the backend. This subsequently triggers get() requests to\n// fail or use cached data, etc. Unfortunately, our connections have\n// historically been subject to various transient failures. So we wait for\n// multiple failures before notifying the onlineStateHandler.\nvar ONLINE_ATTEMPTS_BEFORE_FAILURE = 2;\n/**\n * RemoteStore - An interface to remotely stored data, basically providing a\n * wrapper around the Datastore that is more reliable for the rest of the\n * system.\n *\n * RemoteStore is responsible for maintaining the connection to the server.\n * - maintaining a list of active listens.\n * - reconnecting when the connection is dropped.\n * - resuming all the active listens on reconnect.\n *\n * RemoteStore handles all incoming events from the Datastore.\n * - listening to the watch stream and repackaging the events as RemoteEvents\n * - notifying SyncEngine of any changes to the active listens.\n *\n * RemoteStore takes writes from other components and handles them reliably.\n * - pulling pending mutations from LocalStore and sending them to Datastore.\n * - retrying mutations that failed because of network problems.\n * - acking mutations to the SyncEngine once they are accepted or rejected.\n */\nvar RemoteStore = /** @class */ (function () {\n function RemoteStore(\n /**\n * The local store, used to fill the write pipeline with outbound\n * mutations and resolve existence filter mismatches.\n */\n localStore, \n /** The client-side proxy for interacting with the backend. */\n datastore, onlineStateHandler) {\n this.localStore = localStore;\n this.datastore = datastore;\n this.onlineStateHandler = onlineStateHandler;\n this.pendingWrites = [];\n this.lastBatchSeen = BATCHID_UNKNOWN;\n /**\n * A mapping of watched targets that the client cares about tracking and the\n * user has explicitly called a 'listen' for this target.\n *\n * These targets may or may not have been sent to or acknowledged by the\n * server. On re-establishing the listen stream, these targets should be sent\n * to the server. The targets removed with unlistens are removed eagerly\n * without waiting for confirmation from the listen stream.\n */\n this.listenTargets = {};\n /**\n * A mapping of targetId to pending acks needed.\n *\n * If a targetId is present in this map, then we're waiting for watch to\n * acknowledge a removal or addition of the target. If a target is not in this\n * mapping, and it's in the listenTargets map, then we consider the target to\n * be active.\n *\n * We increment the count here every time we issue a request over the stream\n * to watch or unwatch. We then decrement the count every time we get a target\n * added or target removed message from the server. Once the count is equal to\n * 0 we know that the client and server are in the same state (once this state\n * is reached the targetId is removed from the map to free the memory).\n */\n this.pendingTargetResponses = {};\n this.accumulatedWatchChanges = [];\n this.watchStream = null;\n this.writeStream = null;\n /**\n * The online state of the watch stream. The state is set to healthy if and\n * only if there are messages received by the backend.\n */\n this.watchStreamOnlineState = OnlineState.Unknown;\n /** A count of consecutive failures to open the stream. */\n this.watchStreamFailures = 0;\n /** Whether the client should fire offline warning. */\n this.shouldWarnOffline = true;\n }\n /**\n * Starts up the remote store, creating streams, restoring state from\n * LocalStore, etc.\n */\n RemoteStore.prototype.start = function () {\n return this.enableNetwork();\n };\n /**\n * Updates our OnlineState to the new state, updating local state\n * and notifying the onlineStateHandler as appropriate. Idempotent.\n */\n RemoteStore.prototype.updateOnlineState = function (newState) {\n if (newState !== this.watchStreamOnlineState) {\n if (newState === OnlineState.Healthy) {\n // We've connected to watch at least once. Don't warn the developer about\n // being offline going forward.\n this.shouldWarnOffline = false;\n }\n else if (newState === OnlineState.Unknown) {\n // The state is set to unknown when a healthy stream is closed (e.g. due to\n // a token timeout) or when we have no active listens and therefore there's\n // no need to start the stream. Assuming there is (possibly in the future)\n // an active listen, then we will eventually move to state Online or Failed,\n // but we always want to make at least ONLINE_ATTEMPTS_BEFORE_FAILURE\n // attempts before failing, so we reset the count here.\n this.watchStreamFailures = 0;\n }\n this.watchStreamOnlineState = newState;\n this.onlineStateHandler(newState);\n }\n };\n /**\n * Updates our OnlineState as appropriate after the watch stream reports a\n * failure. The first failure moves us to the 'Unknown' state. We then may\n * allow multiple failures (based on ONLINE_ATTEMPTS_BEFORE_FAILURE) before we\n * actually transition to OnlineState.Failed.\n */\n RemoteStore.prototype.updateOnlineStateAfterFailure = function () {\n if (this.watchStreamOnlineState === OnlineState.Healthy) {\n this.updateOnlineState(OnlineState.Unknown);\n }\n else {\n this.watchStreamFailures++;\n if (this.watchStreamFailures >= ONLINE_ATTEMPTS_BEFORE_FAILURE) {\n if (this.shouldWarnOffline) {\n log.error('Could not reach Firestore backend.');\n this.shouldWarnOffline = false;\n }\n this.updateOnlineState(OnlineState.Failed);\n }\n }\n };\n RemoteStore.prototype.isNetworkEnabled = function () {\n assert((this.watchStream == null) === (this.writeStream == null), 'WatchStream and WriteStream should both be null or non-null');\n return this.watchStream != null;\n };\n /** Re-enables the network. Idempotent. */\n RemoteStore.prototype.enableNetwork = function () {\n var _this = this;\n if (this.isNetworkEnabled()) {\n return Promise.resolve();\n }\n // Create new streams (but note they're not started yet).\n this.watchStream = this.datastore.newPersistentWatchStream();\n this.writeStream = this.datastore.newPersistentWriteStream();\n // Load any saved stream token from persistent storage\n return this.localStore.getLastStreamToken().then(function (token) {\n _this.writeStream.lastStreamToken = token;\n if (_this.shouldStartWatchStream()) {\n _this.startWatchStream();\n }\n _this.updateOnlineState(OnlineState.Unknown);\n return _this.fillWritePipeline(); // This may start the writeStream.\n });\n };\n /**\n * Temporarily disables the network. The network can be re-enabled using\n * enableNetwork().\n */\n RemoteStore.prototype.disableNetwork = function () {\n this.disableNetworkInternal();\n // Set the OnlineState to failed so get()'s return from cache, etc.\n this.updateOnlineState(OnlineState.Failed);\n return Promise.resolve();\n };\n /**\n * Disables the network, if it is currently enabled.\n */\n RemoteStore.prototype.disableNetworkInternal = function () {\n if (this.isNetworkEnabled()) {\n // NOTE: We're guaranteed not to get any further events from these streams (not even a close\n // event).\n this.watchStream.stop();\n this.writeStream.stop();\n this.cleanUpWatchStreamState();\n this.cleanUpWriteStreamState();\n this.writeStream = null;\n this.watchStream = null;\n }\n };\n RemoteStore.prototype.shutdown = function () {\n log.debug(LOG_TAG, 'RemoteStore shutting down.');\n this.disableNetworkInternal();\n // Set the OnlineState to Unknown (rather than Failed) to avoid potentially\n // triggering spurious listener events with cached data, etc.\n this.updateOnlineState(OnlineState.Unknown);\n return Promise.resolve();\n };\n /** Starts new listen for the given query. Uses resume token if provided */\n RemoteStore.prototype.listen = function (queryData) {\n assert(!objUtils.contains(this.listenTargets, queryData.targetId), 'listen called with duplicate targetId!');\n // Mark this as something the client is currently listening for.\n this.listenTargets[queryData.targetId] = queryData;\n if (this.shouldStartWatchStream()) {\n // The listen will be sent in onWatchStreamOpen\n this.startWatchStream();\n }\n else if (this.isNetworkEnabled() && this.watchStream.isOpen()) {\n this.sendWatchRequest(queryData);\n }\n };\n /** Removes the listen from server */\n RemoteStore.prototype.unlisten = function (targetId) {\n assert(objUtils.contains(this.listenTargets, targetId), 'unlisten called without assigned target ID!');\n var queryData = this.listenTargets[targetId];\n delete this.listenTargets[targetId];\n if (this.isNetworkEnabled() && this.watchStream.isOpen()) {\n this.sendUnwatchRequest(targetId);\n if (objUtils.isEmpty(this.listenTargets)) {\n this.watchStream.markIdle();\n }\n }\n };\n /**\n * We need to increment the the expected number of pending responses we're due\n * from watch so we wait for the ack to process any messages from this target.\n */\n RemoteStore.prototype.sendWatchRequest = function (queryData) {\n this.recordPendingTargetRequest(queryData.targetId);\n this.watchStream.watch(queryData);\n };\n /**\n * We need to increment the expected number of pending responses we're due\n * from watch so we wait for the removal on the server before we process any\n * messages from this target.\n */\n RemoteStore.prototype.sendUnwatchRequest = function (targetId) {\n this.recordPendingTargetRequest(targetId);\n this.watchStream.unwatch(targetId);\n };\n /**\n * Increment the mapping of how many acks are needed from watch before we can\n * consider the server to be 'in-sync' with the client's active targets.\n */\n RemoteStore.prototype.recordPendingTargetRequest = function (targetId) {\n // For each request we get we need to record we need a response for it.\n this.pendingTargetResponses[targetId] =\n (this.pendingTargetResponses[targetId] || 0) + 1;\n };\n RemoteStore.prototype.startWatchStream = function () {\n assert(this.shouldStartWatchStream(), 'startWriteStream() called when shouldStartWatchStream() is false.');\n this.watchStream.start({\n onOpen: this.onWatchStreamOpen.bind(this),\n onClose: this.onWatchStreamClose.bind(this),\n onWatchChange: this.onWatchStreamChange.bind(this)\n });\n };\n /**\n * Returns whether the watch stream should be started because there are\n * active targets trying to be listened too\n */\n RemoteStore.prototype.shouldStartWatchStream = function () {\n return (this.isNetworkEnabled() &&\n !this.watchStream.isStarted() &&\n !objUtils.isEmpty(this.listenTargets));\n };\n RemoteStore.prototype.cleanUpWatchStreamState = function () {\n // If the connection is closed then we'll never get a snapshot version for\n // the accumulated changes and so we'll never be able to complete the batch.\n // When we start up again the server is going to resend these changes\n // anyway, so just toss the accumulated state.\n this.accumulatedWatchChanges = [];\n this.pendingTargetResponses = {};\n };\n RemoteStore.prototype.onWatchStreamOpen = function () {\n var _this = this;\n // TODO(b/35852690): close the stream again (with some timeout?) if no watch\n // targets are active\n objUtils.forEachNumber(this.listenTargets, function (targetId, queryData) {\n _this.sendWatchRequest(queryData);\n });\n return Promise.resolve();\n };\n RemoteStore.prototype.onWatchStreamClose = function (error) {\n assert(this.isNetworkEnabled(), 'onWatchStreamClose() should only be called when the network is enabled');\n this.cleanUpWatchStreamState();\n // If there was an error, retry the connection.\n if (this.shouldStartWatchStream()) {\n this.updateOnlineStateAfterFailure();\n this.startWatchStream();\n }\n else {\n // No need to restart watch stream because there are no active targets.\n // The online state is set to unknown because there is no active attempt\n // at establishing a connection\n this.updateOnlineState(OnlineState.Unknown);\n }\n return Promise.resolve();\n };\n RemoteStore.prototype.onWatchStreamChange = function (watchChange, snapshotVersion) {\n // Mark the connection as healthy because we got a message from the server\n this.updateOnlineState(OnlineState.Healthy);\n if (watchChange instanceof WatchTargetChange &&\n watchChange.state === WatchTargetChangeState.Removed &&\n watchChange.cause) {\n // There was an error on a target, don't wait for a consistent snapshot\n // to raise events\n return this.handleTargetError(watchChange);\n }\n // Accumulate watch changes but don't process them if there's no\n // snapshotVersion or it's older than a previous snapshot we've processed\n // (can happen after we resume a target using a resume token).\n this.accumulatedWatchChanges.push(watchChange);\n if (!snapshotVersion.isEqual(SnapshotVersion.MIN) &&\n snapshotVersion.compareTo(this.localStore.getLastRemoteSnapshotVersion()) >= 0) {\n var changes = this.accumulatedWatchChanges;\n this.accumulatedWatchChanges = [];\n return this.handleWatchChangeBatch(snapshotVersion, changes);\n }\n else {\n return Promise.resolve();\n }\n };\n /**\n * Takes a batch of changes from the Datastore, repackages them as a\n * RemoteEvent, and passes that on to the listener, which is typically the\n * SyncEngine.\n */\n RemoteStore.prototype.handleWatchChangeBatch = function (snapshotVersion, changes) {\n var _this = this;\n var aggregator = new WatchChangeAggregator(snapshotVersion, this.listenTargets, this.pendingTargetResponses);\n aggregator.addChanges(changes);\n var remoteEvent = aggregator.createRemoteEvent();\n // Get the new response counts from the aggregator\n this.pendingTargetResponses = aggregator.pendingTargetResponses;\n var promises = [];\n // Handle existence filters and existence filter mismatches.\n objUtils.forEachNumber(aggregator.existenceFilters, function (targetId, filter) {\n var queryData = _this.listenTargets[targetId];\n if (!queryData) {\n // A watched target might have been removed already.\n return;\n }\n var query = queryData.query;\n if (query.isDocumentQuery()) {\n if (filter.count === 0) {\n // The existence filter told us the document does not exist.\n // We need to deduce that this document does not exist and apply\n // a deleted document to our updates. Without applying a deleted\n // document there might be another query that will raise this\n // document as part of a snapshot until it is resolved,\n // essentially exposing inconsistency between queries.\n var key = new DocumentKey(query.path);\n var deletedDoc = new NoDocument(key, snapshotVersion);\n remoteEvent.addDocumentUpdate(deletedDoc);\n }\n else {\n assert(filter.count === 1, 'Single document existence filter with count: ' + filter.count);\n }\n }\n else {\n // Not a document query.\n var promise = _this.localStore\n .remoteDocumentKeys(targetId)\n .then(function (trackedRemote) {\n if (remoteEvent.targetChanges[targetId]) {\n var mapping = remoteEvent.targetChanges[targetId].mapping;\n if (mapping !== null) {\n if (mapping instanceof UpdateMapping) {\n trackedRemote = mapping.applyToKeySet(trackedRemote);\n }\n else {\n assert(mapping instanceof ResetMapping, 'Expected either reset or update mapping but got something else: ' +\n mapping);\n trackedRemote = mapping.documents;\n }\n }\n }\n if (trackedRemote.size !== filter.count) {\n // Existence filter mismatch, resetting mapping.\n // Make sure the mismatch is exposed in the remote event.\n remoteEvent.handleExistenceFilterMismatch(targetId);\n // Clear the resume token for the query, since we're in a\n // known mismatch state.\n var newQueryData = new QueryData(query, targetId, queryData.purpose);\n _this.listenTargets[targetId] = newQueryData;\n // Cause a hard reset by unwatching and rewatching\n // immediately, but deliberately don't send a resume token\n // so that we get a full update.\n // Make sure we expect that this acks are going to happen.\n _this.sendUnwatchRequest(targetId);\n // Mark the query we send as being on behalf of an existence\n // filter mismatch, but don't actually retain that in\n // listenTargets. This ensures that we flag the first\n // re-listen this way without impacting future listens of\n // this target (that might happen e.g. on reconnect).\n var requestQueryData = new QueryData(query, targetId, QueryPurpose.ExistenceFilterMismatch);\n _this.sendWatchRequest(requestQueryData);\n }\n });\n promises.push(promise);\n }\n });\n return Promise.all(promises).then(function () {\n // Update in-memory resume tokens. LocalStore will update the\n // persistent view of these when applying the completed RemoteEvent.\n objUtils.forEachNumber(remoteEvent.targetChanges, function (targetId, change) {\n if (change.resumeToken.length > 0) {\n var queryData = _this.listenTargets[targetId];\n // A watched target might have been removed already.\n if (queryData) {\n _this.listenTargets[targetId] = queryData.update({\n resumeToken: change.resumeToken,\n snapshotVersion: change.snapshotVersion\n });\n }\n }\n });\n // Finally handle remote event\n return _this.syncEngine.applyRemoteEvent(remoteEvent);\n });\n };\n /** Handles an error on a target */\n RemoteStore.prototype.handleTargetError = function (watchChange) {\n var _this = this;\n assert(!!watchChange.cause, 'Handling target error without a cause');\n var error = watchChange.cause;\n var promiseChain = Promise.resolve();\n watchChange.targetIds.forEach(function (targetId) {\n promiseChain = promiseChain.then(function () {\n if (objUtils.contains(_this.listenTargets, targetId)) {\n delete _this.listenTargets[targetId];\n return _this.syncEngine.rejectListen(targetId, error);\n }\n else {\n // A watched target might have been removed already.\n return Promise.resolve();\n }\n });\n });\n return promiseChain;\n };\n RemoteStore.prototype.cleanUpWriteStreamState = function () {\n this.lastBatchSeen = BATCHID_UNKNOWN;\n log.debug(LOG_TAG, 'Stopping write stream with ' +\n this.pendingWrites.length +\n ' pending writes');\n this.pendingWrites = [];\n };\n /**\n * Notifies that there are new mutations to process in the queue. This is\n * typically called by SyncEngine after it has sent mutations to LocalStore.\n */\n RemoteStore.prototype.fillWritePipeline = function () {\n var _this = this;\n if (!this.canWriteMutations()) {\n return Promise.resolve();\n }\n else {\n return this.localStore\n .nextMutationBatch(this.lastBatchSeen)\n .then(function (batch) {\n if (batch === null) {\n if (_this.pendingWrites.length === 0) {\n _this.writeStream.markIdle();\n }\n return Promise.resolve();\n }\n else {\n _this.commit(batch);\n return _this.fillWritePipeline();\n }\n });\n }\n };\n /**\n * Returns true if the backend can accept additional write requests.\n *\n * When sending mutations to the write stream (e.g. in fillWritePipeline),\n * call this method first to check if more mutations can be sent.\n *\n * Currently the only thing that can prevent the backend from accepting\n * write requests is if there are too many requests already outstanding. As\n * writes complete the backend will be able to accept more.\n */\n RemoteStore.prototype.canWriteMutations = function () {\n return (this.isNetworkEnabled() && this.pendingWrites.length < MAX_PENDING_WRITES);\n };\n // For testing\n RemoteStore.prototype.outstandingWrites = function () {\n return this.pendingWrites.length;\n };\n /**\n * Given mutations to commit, actually commits them to the Datastore. Note\n * that this does *not* return a Promise specifically because the AsyncQueue\n * should not block operations for this.\n */\n RemoteStore.prototype.commit = function (batch) {\n assert(this.canWriteMutations(), \"commit called when batches can't be written\");\n this.lastBatchSeen = batch.batchId;\n this.pendingWrites.push(batch);\n if (this.shouldStartWriteStream()) {\n this.startWriteStream();\n }\n else if (this.isNetworkEnabled() && this.writeStream.handshakeComplete) {\n this.writeStream.writeMutations(batch.mutations);\n }\n };\n RemoteStore.prototype.shouldStartWriteStream = function () {\n return (this.isNetworkEnabled() &&\n !this.writeStream.isStarted() &&\n this.pendingWrites.length > 0);\n };\n RemoteStore.prototype.startWriteStream = function () {\n assert(this.shouldStartWriteStream(), 'startWriteStream() called when shouldStartWriteStream() is false.');\n this.writeStream.start({\n onOpen: this.onWriteStreamOpen.bind(this),\n onClose: this.onWriteStreamClose.bind(this),\n onHandshakeComplete: this.onWriteHandshakeComplete.bind(this),\n onMutationResult: this.onMutationResult.bind(this)\n });\n };\n RemoteStore.prototype.onWriteStreamOpen = function () {\n this.writeStream.writeHandshake();\n return Promise.resolve();\n };\n RemoteStore.prototype.onWriteHandshakeComplete = function () {\n var _this = this;\n // Record the stream token.\n return this.localStore\n .setLastStreamToken(this.writeStream.lastStreamToken)\n .then(function () {\n // Drain any pending writes.\n //\n // Note that at this point pendingWrites contains mutations that\n // have already been accepted by fillWritePipeline/commitBatch. If\n // the pipeline is full, canWriteMutations will be false, despite\n // the fact that we actually need to send mutations over.\n //\n // This also means that this method indirectly respects the limits\n // imposed by canWriteMutations since writes can't be added to the\n // pendingWrites array when canWriteMutations is false. If the\n // limits imposed by canWriteMutations actually protect us from\n // DOSing ourselves then those limits won't be exceeded here and\n // we'll continue to make progress.\n for (var _i = 0, _a = _this.pendingWrites; _i < _a.length; _i++) {\n var batch = _a[_i];\n _this.writeStream.writeMutations(batch.mutations);\n }\n });\n };\n RemoteStore.prototype.onMutationResult = function (commitVersion, results) {\n var _this = this;\n // This is a response to a write containing mutations and should be\n // correlated to the first pending write.\n assert(this.pendingWrites.length > 0, 'Got result for empty pending writes');\n var batch = this.pendingWrites.shift();\n var success = MutationBatchResult.from(batch, commitVersion, results, this.writeStream.lastStreamToken);\n return this.syncEngine.applySuccessfulWrite(success).then(function () {\n // It's possible that with the completion of this mutation another\n // slot has freed up.\n return _this.fillWritePipeline();\n });\n };\n RemoteStore.prototype.onWriteStreamClose = function (error) {\n var _this = this;\n assert(this.isNetworkEnabled(), 'onWriteStreamClose() should only be called when the network is enabled');\n // If the write stream closed due to an error, invoke the error callbacks if\n // there are pending writes.\n if (error && this.pendingWrites.length > 0) {\n assert(!!error, 'We have pending writes, but the write stream closed without an error');\n // A promise that is resolved after we processed the error\n var errorHandling = void 0;\n if (this.writeStream.handshakeComplete) {\n // This error affects the actual write.\n errorHandling = this.handleWriteError(error);\n }\n else {\n // If there was an error before the handshake has finished, it's\n // possible that the server is unable to process the stream token\n // we're sending. (Perhaps it's too old?)\n errorHandling = this.handleHandshakeError(error);\n }\n return errorHandling.then(function () {\n // The write stream might have been started by refilling the write\n // pipeline for failed writes\n if (_this.shouldStartWriteStream()) {\n _this.startWriteStream();\n }\n });\n }\n else {\n // No pending writes, nothing to do\n return Promise.resolve();\n }\n };\n RemoteStore.prototype.handleHandshakeError = function (error) {\n // Reset the token if it's a permanent error or the error code is\n // ABORTED, signaling the write stream is no longer valid.\n if (isPermanentError(error.code) || error.code === Code.ABORTED) {\n log.debug(LOG_TAG, 'RemoteStore error before completed handshake; resetting stream token: ', this.writeStream.lastStreamToken);\n this.writeStream.lastStreamToken = emptyByteString();\n return this.localStore.setLastStreamToken(emptyByteString());\n }\n else {\n // Some other error, don't reset stream token. Our stream logic will\n // just retry with exponential backoff.\n return Promise.resolve();\n }\n };\n RemoteStore.prototype.handleWriteError = function (error) {\n var _this = this;\n if (isPermanentError(error.code)) {\n // This was a permanent error, the request itself was the problem\n // so it's not going to succeed if we resend it.\n var batch = this.pendingWrites.shift();\n // In this case it's also unlikely that the server itself is melting\n // down -- this was just a bad request so inhibit backoff on the next\n // restart.\n this.writeStream.inhibitBackoff();\n return this.syncEngine\n .rejectFailedWrite(batch.batchId, error)\n .then(function () {\n // It's possible that with the completion of this mutation\n // another slot has freed up.\n return _this.fillWritePipeline();\n });\n }\n else {\n // Transient error, just let the retry logic kick in.\n return Promise.resolve();\n }\n };\n RemoteStore.prototype.createTransaction = function () {\n return new Transaction(this.datastore);\n };\n RemoteStore.prototype.handleUserChange = function (user) {\n log.debug(LOG_TAG, 'RemoteStore changing users: uid=', user.uid);\n // If the network has been explicitly disabled, make sure we don't\n // accidentally re-enable it.\n if (this.isNetworkEnabled()) {\n // Tear down and re-create our network streams. This will ensure we get a fresh auth token\n // for the new user and re-fill the write pipeline with new mutations from the LocalStore\n // (since mutations are per-user).\n this.disableNetworkInternal();\n this.updateOnlineState(OnlineState.Unknown);\n return this.enableNetwork();\n }\n };\n return RemoteStore;\n}());\nexport { RemoteStore };\n\n//# sourceMappingURL=remote_store.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { EventManager, QueryListener } from './event_manager';\nimport { SyncEngine } from './sync_engine';\nimport { EagerGarbageCollector } from '../local/eager_garbage_collector';\nimport { IndexedDbPersistence } from '../local/indexeddb_persistence';\nimport { LocalStore } from '../local/local_store';\nimport { MemoryPersistence } from '../local/memory_persistence';\nimport { NoOpGarbageCollector } from '../local/no_op_garbage_collector';\nimport { Datastore } from '../remote/datastore';\nimport { RemoteStore } from '../remote/remote_store';\nimport { JsonProtoSerializer } from '../remote/serializer';\nimport { Code } from '../util/error';\nimport { debug } from '../util/log';\nimport { Deferred } from '../util/promise';\nvar LOG_TAG = 'FirestoreClient';\n/**\n * FirestoreClient is a top-level class that constructs and owns all of the\n * pieces of the client SDK architecture. It is responsible for creating the\n * async queue that is shared by all of the other components in the system.\n */\nvar FirestoreClient = /** @class */ (function () {\n function FirestoreClient(platform, databaseInfo, credentials, \n /**\n * Asynchronous queue responsible for all of our internal processing. When\n * we get incoming work from the user (via public API) or the network\n * (incoming GRPC messages), we should always schedule onto this queue.\n * This ensures all of our work is properly serialized (e.g. we don't\n * start processing a new operation while the previous one is waiting for\n * an async I/O to complete).\n */\n asyncQueue) {\n this.platform = platform;\n this.databaseInfo = databaseInfo;\n this.credentials = credentials;\n this.asyncQueue = asyncQueue;\n }\n /**\n * Starts up the FirestoreClient, returning only whether or not enabling\n * persistence succeeded.\n *\n * The intent here is to \"do the right thing\" as far as users are concerned.\n * Namely, in cases where offline persistence is requested and possible,\n * enable it, but otherwise fall back to persistence disabled. For the most\n * part we expect this to succeed one way or the other so we don't expect our\n * users to actually wait on the firestore.enablePersistence Promise since\n * they generally won't care.\n *\n * Of course some users actually do care about whether or not persistence\n * was successfully enabled, so the Promise returned from this method\n * indicates this outcome.\n *\n * This presents a problem though: even before enablePersistence resolves or\n * rejects, users may have made calls to e.g. firestore.collection() which\n * means that the FirestoreClient in there will be available and will be\n * enqueuing actions on the async queue.\n *\n * Meanwhile any failure of an operation on the async queue causes it to\n * panic and reject any further work, on the premise that unhandled errors\n * are fatal.\n *\n * Consequently the fallback is handled internally here in start, and if the\n * fallback succeeds we signal success to the async queue even though the\n * start() itself signals failure.\n *\n * @param usePersistence Whether or not to attempt to enable persistence.\n * @returns A deferred result indicating the user-visible result of enabling\n * offline persistence. This method will reject this if IndexedDB fails to\n * start for any reason. If usePersistence is false this is\n * unconditionally resolved.\n */\n FirestoreClient.prototype.start = function (usePersistence) {\n var _this = this;\n // We defer our initialization until we get the current user from\n // setUserChangeListener(). We block the async queue until we got the\n // initial user and the initialization is completed. This will prevent\n // any scheduled work from happening before initialization is completed.\n //\n // If initializationDone resolved then the FirestoreClient is in a usable\n // state.\n var initializationDone = new Deferred();\n // If usePersistence is true, certain classes of errors while starting are\n // recoverable but only by falling back to persistence disabled.\n //\n // If there's an error in the first case but not in recovery we cannot\n // reject the promise blocking the async queue because this will cause the\n // async queue to panic.\n var persistenceResult = new Deferred();\n var initialized = false;\n this.credentials.setUserChangeListener(function (user) {\n if (!initialized) {\n initialized = true;\n _this.initializePersistence(usePersistence, persistenceResult)\n .then(function () { return _this.initializeRest(user); })\n .then(initializationDone.resolve, initializationDone.reject);\n }\n else {\n _this.asyncQueue.schedule(function () {\n return _this.handleUserChange(user);\n });\n }\n });\n // Block the async queue until initialization is done\n this.asyncQueue.schedule(function () {\n return initializationDone.promise;\n });\n // Return only the result of enabling persistence. Note that this does not\n // need to await the completion of initializationDone because the result of\n // this method should not reflect any other kind of failure to start.\n return persistenceResult.promise;\n };\n /** Enables the network connection and requeues all pending operations. */\n FirestoreClient.prototype.enableNetwork = function () {\n var _this = this;\n return this.asyncQueue.schedule(function () {\n return _this.remoteStore.enableNetwork();\n });\n };\n /**\n * Initializes persistent storage, attempting to use IndexedDB if\n * usePersistence is true or memory-only if false.\n *\n * If IndexedDB fails because it's already open in another tab or because the\n * platform can't possibly support our implementation then this method rejects\n * the persistenceResult and falls back on memory-only persistence.\n *\n * @param usePersistence indicates whether or not to use offline persistence\n * @param persistenceResult A deferred result indicating the user-visible\n * result of enabling offline persistence. This method will reject this if\n * IndexedDB fails to start for any reason. If usePersistence is false\n * this is unconditionally resolved.\n * @returns a Promise indicating whether or not initialization should\n * continue, i.e. that one of the persistence implementations actually\n * succeeded.\n */\n FirestoreClient.prototype.initializePersistence = function (usePersistence, persistenceResult) {\n var _this = this;\n if (usePersistence) {\n return this.startIndexedDbPersistence()\n .then(persistenceResult.resolve)\n .catch(function (error) {\n // Regardless of whether or not the retry succeeds, from an user\n // perspective, offline persistence has failed.\n persistenceResult.reject(error);\n // An unknown failure on the first stage shuts everything down.\n if (!_this.canFallback(error)) {\n return Promise.reject(error);\n }\n console.warn('Error enabling offline storage. Falling back to' +\n ' storage disabled: ' +\n error);\n return _this.startMemoryPersistence();\n });\n }\n else {\n // When usePersistence == false, enabling offline persistence is defined\n // to unconditionally succeed. This allows start() to have the same\n // signature for both cases, despite the fact that the returned promise\n // is only used in the enablePersistence call.\n persistenceResult.resolve();\n return this.startMemoryPersistence();\n }\n };\n FirestoreClient.prototype.canFallback = function (error) {\n return (error.code === Code.FAILED_PRECONDITION ||\n error.code === Code.UNIMPLEMENTED);\n };\n /**\n * Starts IndexedDB-based persistence.\n *\n * @returns A promise indicating success or failure.\n */\n FirestoreClient.prototype.startIndexedDbPersistence = function () {\n // TODO(http://b/33384523): For now we just disable garbage collection\n // when persistence is enabled.\n this.garbageCollector = new NoOpGarbageCollector();\n var storagePrefix = IndexedDbPersistence.buildStoragePrefix(this.databaseInfo);\n // Opt to use proto3 JSON in case the platform doesn't support Uint8Array.\n var serializer = new JsonProtoSerializer(this.databaseInfo.databaseId, {\n useProto3Json: true\n });\n this.persistence = new IndexedDbPersistence(storagePrefix, serializer);\n return this.persistence.start();\n };\n /**\n * Starts Memory-backed persistence. In practice this cannot fail.\n *\n * @returns A promise that will successfully resolve.\n */\n FirestoreClient.prototype.startMemoryPersistence = function () {\n this.garbageCollector = new EagerGarbageCollector();\n this.persistence = new MemoryPersistence();\n return this.persistence.start();\n };\n /**\n * Initializes the rest of the FirestoreClient, assuming the initial user\n * has been obtained from the credential provider and some persistence\n * implementation is available in this.persistence.\n */\n FirestoreClient.prototype.initializeRest = function (user) {\n var _this = this;\n return this.platform\n .loadConnection(this.databaseInfo)\n .then(function (connection) {\n _this.localStore = new LocalStore(_this.persistence, user, _this.garbageCollector);\n var serializer = _this.platform.newSerializer(_this.databaseInfo.databaseId);\n var datastore = new Datastore(_this.databaseInfo, _this.asyncQueue, connection, _this.credentials, serializer);\n var onlineStateChangedHandler = function (onlineState) {\n _this.syncEngine.applyOnlineStateChange(onlineState);\n _this.eventMgr.applyOnlineStateChange(onlineState);\n };\n _this.remoteStore = new RemoteStore(_this.localStore, datastore, onlineStateChangedHandler);\n _this.syncEngine = new SyncEngine(_this.localStore, _this.remoteStore, user);\n // Setup wiring between sync engine and remote store\n _this.remoteStore.syncEngine = _this.syncEngine;\n _this.eventMgr = new EventManager(_this.syncEngine);\n // NOTE: RemoteStore depends on LocalStore (for persisting stream\n // tokens, refilling mutation queue, etc.) so must be started after\n // LocalStore.\n return _this.localStore.start();\n })\n .then(function () {\n return _this.remoteStore.start();\n });\n };\n FirestoreClient.prototype.handleUserChange = function (user) {\n this.asyncQueue.verifyOperationInProgress();\n debug(LOG_TAG, 'User Changed: ' + user.uid);\n return this.syncEngine.handleUserChange(user);\n };\n /** Disables the network connection. Pending operations will not complete. */\n FirestoreClient.prototype.disableNetwork = function () {\n var _this = this;\n return this.asyncQueue.schedule(function () {\n return _this.remoteStore.disableNetwork();\n });\n };\n FirestoreClient.prototype.shutdown = function () {\n var _this = this;\n return this.asyncQueue\n .schedule(function () {\n _this.credentials.removeUserChangeListener();\n return _this.remoteStore.shutdown();\n })\n .then(function () {\n // PORTING NOTE: LocalStore does not need an explicit shutdown on web.\n return _this.persistence.shutdown();\n });\n };\n FirestoreClient.prototype.listen = function (query, observer, options) {\n var _this = this;\n var listener = new QueryListener(query, observer, options);\n this.asyncQueue.schedule(function () {\n return _this.eventMgr.listen(listener);\n });\n return listener;\n };\n FirestoreClient.prototype.unlisten = function (listener) {\n var _this = this;\n this.asyncQueue.schedule(function () {\n return _this.eventMgr.unlisten(listener);\n });\n };\n FirestoreClient.prototype.write = function (mutations) {\n var _this = this;\n var deferred = new Deferred();\n this.asyncQueue.schedule(function () { return _this.syncEngine.write(mutations, deferred); });\n return deferred.promise;\n };\n FirestoreClient.prototype.databaseId = function () {\n return this.databaseInfo.databaseId;\n };\n FirestoreClient.prototype.transaction = function (updateFunction) {\n var _this = this;\n // We have to wait for the async queue to be sure syncEngine is initialized.\n return this.asyncQueue\n .schedule(function () {\n return Promise.resolve();\n })\n .then(function () {\n return _this.syncEngine.runTransaction(updateFunction);\n });\n };\n return FirestoreClient;\n}());\nexport { FirestoreClient };\n\n//# sourceMappingURL=firestore_client.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*\n * A wrapper implementation of Observer that will dispatch events\n * asynchronously. To allow immediate silencing, a mute call is added which\n * causes events scheduled to no longer be raised.\n */\nvar AsyncObserver = /** @class */ (function () {\n function AsyncObserver(observer) {\n this.observer = observer;\n /**\n * When set to true, will not raise future events. Necessary to deal with\n * async detachment of listener.\n */\n this.muted = false;\n }\n AsyncObserver.prototype.next = function (value) {\n this.scheduleEvent(this.observer.next, value);\n };\n AsyncObserver.prototype.error = function (error) {\n this.scheduleEvent(this.observer.error, error);\n };\n AsyncObserver.prototype.mute = function () {\n this.muted = true;\n };\n AsyncObserver.prototype.scheduleEvent = function (eventHandler, event) {\n var _this = this;\n if (!this.muted) {\n setTimeout(function () {\n if (!_this.muted) {\n eventHandler(event);\n }\n }, 0);\n }\n };\n return AsyncObserver;\n}());\nexport { AsyncObserver };\n\n//# sourceMappingURL=async_observer.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { assert, fail } from './assert';\nimport * as log from './log';\nimport { Deferred } from './promise';\nimport { Code, FirestoreError } from './error';\nvar AsyncQueue = /** @class */ (function () {\n function AsyncQueue() {\n // The last promise in the queue.\n this.tail = Promise.resolve();\n // A list with timeout handles and their respective deferred promises.\n // Contains an entry for each operation that is queued to run in the future\n // (i.e. it has a delay that has not yet elapsed). Prior to cleanup, this list\n // may also contain entries that have already been run (in which case `handle` is\n // null).\n this.delayedOperations = [];\n // The number of operations that are queued to be run in the future (i.e. they\n // have a delay that has not yet elapsed). Unlike `delayedOperations`, this\n // is guaranteed to only contain operations that have not yet been run.\n //\n // Visible for testing.\n this.delayedOperationsCount = 0;\n // Flag set while there's an outstanding AsyncQueue operation, used for\n // assertion sanity-checks.\n this.operationInProgress = false;\n }\n /**\n * Adds a new operation to the queue. Returns a promise that will be resolved\n * when the promise returned by the new operation is (with its value).\n *\n * Can optionally specify a delay (in milliseconds) to wait before queuing the\n * operation.\n */\n AsyncQueue.prototype.schedule = function (op, delay) {\n var _this = this;\n if (this.failure) {\n fail('AsyncQueue is already failed: ' +\n (this.failure.stack || this.failure.message));\n }\n if ((delay || 0) > 0) {\n this.delayedOperationsCount++;\n var delayedOp_1 = {\n handle: null,\n op: op,\n deferred: new Deferred()\n };\n delayedOp_1.handle = setTimeout(function () {\n _this.scheduleInternal(function () {\n return delayedOp_1.op().then(function (result) {\n delayedOp_1.deferred.resolve(result);\n });\n });\n delayedOp_1.handle = null;\n _this.delayedOperationsCount--;\n if (_this.delayedOperationsCount === 0) {\n _this.delayedOperations = [];\n }\n }, delay);\n this.delayedOperations.push(delayedOp_1);\n return delayedOp_1.deferred.promise;\n }\n else {\n return this.scheduleInternal(op);\n }\n };\n AsyncQueue.prototype.scheduleInternal = function (op) {\n var _this = this;\n this.tail = this.tail.then(function () {\n _this.operationInProgress = true;\n return op()\n .catch(function (error) {\n _this.failure = error;\n _this.operationInProgress = false;\n var message = error.stack || error.message || '';\n log.error('INTERNAL UNHANDLED ERROR: ', message);\n // Escape the promise chain and throw the error globally so that\n // e.g. any global crash reporting library detects and reports it.\n // (but not for simulated errors in our tests since this breaks mocha)\n if (message.indexOf('Firestore Test Simulated Error') < 0) {\n setTimeout(function () {\n throw error;\n }, 0);\n }\n // Re-throw the error so that this.tail becomes a rejected Promise and\n // all further attempts to chain (via .then) will just short-circuit\n // and return the rejected Promise.\n throw error;\n })\n .then(function () {\n _this.operationInProgress = false;\n });\n });\n return this.tail;\n };\n /**\n * Verifies there's an operation currently in-progress on the AsyncQueue.\n * Unfortunately we can't verify that the running code is in the promise chain\n * of that operation, so this isn't a foolproof check, but it should be enough\n * to catch some bugs.\n */\n AsyncQueue.prototype.verifyOperationInProgress = function () {\n assert(this.operationInProgress, 'verifyOpInProgress() called when no op in progress on this queue.');\n };\n /**\n * Waits until all currently scheduled tasks are finished executing. Tasks\n * scheduled with a delay can be rejected or queued for immediate execution.\n */\n AsyncQueue.prototype.drain = function (executeDelayedTasks) {\n var _this = this;\n this.delayedOperations.forEach(function (entry) {\n if (entry.handle) {\n clearTimeout(entry.handle);\n if (executeDelayedTasks) {\n _this.scheduleInternal(entry.op).then(entry.deferred.resolve, entry.deferred.reject);\n }\n else {\n entry.deferred.reject(new FirestoreError(Code.CANCELLED, 'Operation cancelled by shutdown'));\n }\n }\n });\n this.delayedOperations = [];\n this.delayedOperationsCount = 0;\n return this.schedule(function () { return Promise.resolve(); });\n };\n return AsyncQueue;\n}());\nexport { AsyncQueue };\n\n//# sourceMappingURL=async_queue.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Simple wrapper around a nullable UID. Mostly exists to make code more\n * readable.\n */\nvar User = /** @class */ (function () {\n function User(uid) {\n this.uid = uid;\n }\n User.prototype.isUnauthenticated = function () {\n return this.uid == null;\n };\n /**\n * Returns a key representing this user, suitable for inclusion in a\n * dictionary.\n */\n User.prototype.toKey = function () {\n if (this.isUnauthenticated()) {\n return 'anonymous-user';\n }\n else {\n return 'uid:' + this.uid;\n }\n };\n User.prototype.isEqual = function (otherUser) {\n return otherUser.uid === this.uid;\n };\n /** A user with a null UID. */\n User.UNAUTHENTICATED = new User(null);\n // TODO(mikelehen): Look into getting a proper uid-equivalent for\n // non-FirebaseAuth providers.\n User.GOOGLE_CREDENTIALS = new User('google-credentials-uid');\n User.FIRST_PARTY = new User('first-party-uid');\n return User;\n}());\nexport { User };\n\n//# sourceMappingURL=user.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { User } from '../auth/user';\nimport { assert, fail } from '../util/assert';\nimport { Code, FirestoreError } from '../util/error';\nvar OAuthToken = /** @class */ (function () {\n function OAuthToken(value, user) {\n this.user = user;\n this.type = 'OAuth';\n this.authHeaders = { Authorization: \"Bearer \" + value };\n }\n return OAuthToken;\n}());\nexport { OAuthToken };\n/** A CredentialsProvider that always yields an empty token. */\nvar EmptyCredentialsProvider = /** @class */ (function () {\n function EmptyCredentialsProvider() {\n /**\n * Stores the User listener registered with setUserChangeListener()\n * This isn't actually necessary since the UID never changes, but we use this\n * to verify the listen contract is adhered to in tests.\n */\n this.userListener = null;\n }\n EmptyCredentialsProvider.prototype.getToken = function (forceRefresh) {\n return Promise.resolve(null);\n };\n EmptyCredentialsProvider.prototype.setUserChangeListener = function (listener) {\n assert(!this.userListener, 'Can only call setUserChangeListener() once.');\n this.userListener = listener;\n // Fire with initial user.\n listener(User.UNAUTHENTICATED);\n };\n EmptyCredentialsProvider.prototype.removeUserChangeListener = function () {\n assert(this.userListener !== null, 'removeUserChangeListener() when no listener registered');\n this.userListener = null;\n };\n return EmptyCredentialsProvider;\n}());\nexport { EmptyCredentialsProvider };\nvar FirebaseCredentialsProvider = /** @class */ (function () {\n function FirebaseCredentialsProvider(app) {\n var _this = this;\n this.app = app;\n /**\n * The auth token listener registered with FirebaseApp, retained here so we\n * can unregister it.\n */\n this.tokenListener = null;\n /**\n * Counter used to detect if the user changed while a getToken request was\n * outstanding.\n */\n this.userCounter = 0;\n /** The User listener registered with setUserChangeListener(). */\n this.userListener = null;\n // We listen for token changes but all we really care about is knowing when\n // the uid may have changed.\n this.tokenListener = function () {\n var newUser = _this.getUser();\n if (!_this.currentUser || !newUser.isEqual(_this.currentUser)) {\n _this.currentUser = newUser;\n _this.userCounter++;\n if (_this.userListener) {\n _this.userListener(_this.currentUser);\n }\n }\n };\n this.userCounter = 0;\n // Will fire at least once where we set this.currentUser\n this.app.INTERNAL.addAuthTokenListener(this.tokenListener);\n }\n FirebaseCredentialsProvider.prototype.getToken = function (forceRefresh) {\n var _this = this;\n assert(this.tokenListener != null, 'getToken cannot be called after listener removed.');\n // Take note of the current value of the userCounter so that this method can\n // fail (with an ABORTED error) if there is a user change while the request\n // is outstanding.\n var initialUserCounter = this.userCounter;\n return this.app.INTERNAL.getToken(forceRefresh).then(function (tokenData) {\n // Cancel the request since the user changed while the request was\n // outstanding so the response is likely for a previous user (which\n // user, we can't be sure).\n if (_this.userCounter !== initialUserCounter) {\n throw new FirestoreError(Code.ABORTED, 'getToken aborted due to uid change.');\n }\n else {\n if (tokenData) {\n assert(typeof tokenData.accessToken === 'string', 'Invalid tokenData returned from getToken():' + tokenData);\n return new OAuthToken(tokenData.accessToken, _this.currentUser);\n }\n else {\n return null;\n }\n }\n });\n };\n FirebaseCredentialsProvider.prototype.setUserChangeListener = function (listener) {\n assert(!this.userListener, 'Can only call setUserChangeListener() once.');\n this.userListener = listener;\n // Fire the initial event, but only if we received the initial user\n if (this.currentUser) {\n listener(this.currentUser);\n }\n };\n FirebaseCredentialsProvider.prototype.removeUserChangeListener = function () {\n assert(this.tokenListener != null, 'removeUserChangeListener() called twice');\n assert(this.userListener !== null, 'removeUserChangeListener() called when no listener registered');\n this.app.INTERNAL.removeAuthTokenListener(this.tokenListener);\n this.tokenListener = null;\n this.userListener = null;\n };\n FirebaseCredentialsProvider.prototype.getUser = function () {\n // TODO(mikelehen): Remove this check once we're shipping with firebase.js.\n if (typeof this.app.INTERNAL.getUid !== 'function') {\n fail('This version of the Firestore SDK requires at least version' +\n ' 3.7.0 of firebase.js.');\n }\n var currentUid = this.app.INTERNAL.getUid();\n assert(currentUid === null || typeof currentUid === 'string', 'Received invalid UID: ' + currentUid);\n return new User(currentUid);\n };\n return FirebaseCredentialsProvider;\n}());\nexport { FirebaseCredentialsProvider };\n/*\n * FirstPartyToken provides a fresh token each time its value\n * is requested, because if the token is too old, requests will be rejected.\n * TODO(b/33147818) this implementation violates the current assumption that\n * tokens are immutable. We need to either revisit this assumption or come\n * up with some way for FPA to use the listen/unlisten interface.\n */\nvar FirstPartyToken = /** @class */ (function () {\n function FirstPartyToken(gapi, sessionIndex) {\n this.gapi = gapi;\n this.sessionIndex = sessionIndex;\n this.type = 'FirstParty';\n this.user = User.FIRST_PARTY;\n assert(this.gapi &&\n this.gapi['auth'] &&\n this.gapi['auth']['getAuthHeaderValueForFirstParty'], 'unexpected gapi interface');\n }\n Object.defineProperty(FirstPartyToken.prototype, \"authHeaders\", {\n get: function () {\n return {\n Authorization: this.gapi['auth']['getAuthHeaderValueForFirstParty']([]),\n 'X-Goog-AuthUser': this.sessionIndex\n };\n },\n enumerable: true,\n configurable: true\n });\n return FirstPartyToken;\n}());\nexport { FirstPartyToken };\n/*\n * Provides user credentials required for the Firestore JavaScript SDK\n * to authenticate the user, using technique that is only available\n * to applications hosted by Google.\n */\nvar FirstPartyCredentialsProvider = /** @class */ (function () {\n function FirstPartyCredentialsProvider(gapi, sessionIndex) {\n this.gapi = gapi;\n this.sessionIndex = sessionIndex;\n assert(this.gapi &&\n this.gapi['auth'] &&\n this.gapi['auth']['getAuthHeaderValueForFirstParty'], 'unexpected gapi interface');\n }\n FirstPartyCredentialsProvider.prototype.getToken = function (forceRefresh) {\n return Promise.resolve(new FirstPartyToken(this.gapi, this.sessionIndex));\n };\n // TODO(33108925): can someone switch users w/o a page refresh?\n // TODO(33110621): need to understand token/session lifecycle\n FirstPartyCredentialsProvider.prototype.setUserChangeListener = function (listener) {\n // Fire with initial uid.\n listener(User.FIRST_PARTY);\n };\n FirstPartyCredentialsProvider.prototype.removeUserChangeListener = function () { };\n return FirstPartyCredentialsProvider;\n}());\nexport { FirstPartyCredentialsProvider };\n/**\n * Builds a CredentialsProvider depending on the type of\n * the credentials passed in.\n */\nexport function makeCredentialsProvider(credentials) {\n if (!credentials) {\n return new EmptyCredentialsProvider();\n }\n switch (credentials.type) {\n case 'gapi':\n return new FirstPartyCredentialsProvider(credentials.client, credentials.sessionIndex || '0');\n case 'provider':\n return credentials.client;\n default:\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'makeCredentialsProvider failed due to invalid credential type');\n }\n}\n\n//# sourceMappingURL=credentials.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport function isPartialObserver(obj) {\n return implementsAnyMethods(obj, ['next', 'error', 'complete']);\n}\n/**\n * Returns true if obj is an object and contains at least one of the specified\n * methods.\n */\nfunction implementsAnyMethods(obj, methods) {\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n var object = obj;\n for (var _i = 0, methods_1 = methods; _i < methods_1.length; _i++) {\n var method = methods_1[_i];\n if (method in object && typeof object[method] === 'function') {\n return true;\n }\n }\n return false;\n}\n\n//# sourceMappingURL=observer.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { makeConstructorPrivate } from '../util/api';\n/**\n * An opaque base class for FieldValue sentinel objects in our public API,\n * with public static methods for creating said sentinel objects.\n */\n// tslint:disable-next-line:class-as-namespace We use this as a base class.\nvar FieldValueImpl = /** @class */ (function () {\n function FieldValueImpl() {\n }\n FieldValueImpl.delete = function () {\n return DeleteFieldValueImpl.instance;\n };\n FieldValueImpl.serverTimestamp = function () {\n return ServerTimestampFieldValueImpl.instance;\n };\n FieldValueImpl.prototype.isEqual = function (other) {\n return this === other;\n };\n return FieldValueImpl;\n}());\nexport { FieldValueImpl };\nvar DeleteFieldValueImpl = /** @class */ (function (_super) {\n __extends(DeleteFieldValueImpl, _super);\n function DeleteFieldValueImpl() {\n return _super.call(this) || this;\n }\n /** Singleton instance. */\n DeleteFieldValueImpl.instance = new DeleteFieldValueImpl();\n return DeleteFieldValueImpl;\n}(FieldValueImpl));\nexport { DeleteFieldValueImpl };\nvar ServerTimestampFieldValueImpl = /** @class */ (function (_super) {\n __extends(ServerTimestampFieldValueImpl, _super);\n function ServerTimestampFieldValueImpl() {\n return _super.call(this) || this;\n }\n /** Singleton instance. */\n ServerTimestampFieldValueImpl.instance = new ServerTimestampFieldValueImpl();\n return ServerTimestampFieldValueImpl;\n}(FieldValueImpl));\nexport { ServerTimestampFieldValueImpl };\n// Public instance that disallows construction at runtime. This constructor is\n// used when exporting FieldValueImpl on firebase.firestore.FieldValue and will\n// be called FieldValue publicly. Internally we still use FieldValueImpl which\n// has a type-checked private constructor. Note that FieldValueImpl and\n// PublicFieldValue can be used interchangeably in instanceof checks.\n// For our internal TypeScript code PublicFieldValue doesn't exist as a type,\n// and so we need to use FieldValueImpl as type and export it too.\n// tslint:disable-next-line:variable-name We treat this as a class name.\nexport var PublicFieldValue = makeConstructorPrivate(FieldValueImpl, 'Use FieldValue.() instead.');\n\n//# sourceMappingURL=field_value.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Timestamp } from '../core/timestamp';\nimport { ObjectValue } from '../model/field_value';\nimport { ArrayValue, BlobValue, BooleanValue, DoubleValue, GeoPointValue, IntegerValue, NullValue, RefValue, StringValue, TimestampValue } from '../model/field_value';\nimport { FieldMask, FieldTransform, PatchMutation, ServerTimestampTransform, SetMutation, TransformMutation } from '../model/mutation';\nimport { FieldPath } from '../model/path';\nimport { assert, fail } from '../util/assert';\nimport { Code, FirestoreError } from '../util/error';\nimport { isPlainObject, valueDescription } from '../util/input_validation';\nimport { primitiveComparator } from '../util/misc';\nimport * as objUtils from '../util/obj';\nimport { SortedMap } from '../util/sorted_map';\nimport * as typeUtils from '../util/types';\nimport { Blob } from './blob';\nimport { FieldPath as ExternalFieldPath, fromDotSeparatedString } from './field_path';\nimport { DeleteFieldValueImpl, FieldValueImpl, ServerTimestampFieldValueImpl } from './field_value';\nimport { GeoPoint } from './geo_point';\nvar RESERVED_FIELD_REGEX = /^__.*__$/;\n/** The result of parsing document data (e.g. for a setData call). */\nvar ParsedSetData = /** @class */ (function () {\n function ParsedSetData(data, fieldMask, fieldTransforms) {\n this.data = data;\n this.fieldMask = fieldMask;\n this.fieldTransforms = fieldTransforms;\n }\n ParsedSetData.prototype.toMutations = function (key, precondition) {\n var mutations = [];\n if (this.fieldMask !== null) {\n mutations.push(new PatchMutation(key, this.data, this.fieldMask, precondition));\n }\n else {\n mutations.push(new SetMutation(key, this.data, precondition));\n }\n if (this.fieldTransforms.length > 0) {\n mutations.push(new TransformMutation(key, this.fieldTransforms));\n }\n return mutations;\n };\n return ParsedSetData;\n}());\nexport { ParsedSetData };\n/** The result of parsing \"update\" data (i.e. for an updateData call). */\nvar ParsedUpdateData = /** @class */ (function () {\n function ParsedUpdateData(data, fieldMask, fieldTransforms) {\n this.data = data;\n this.fieldMask = fieldMask;\n this.fieldTransforms = fieldTransforms;\n }\n ParsedUpdateData.prototype.toMutations = function (key, precondition) {\n var mutations = [\n new PatchMutation(key, this.data, this.fieldMask, precondition)\n ];\n if (this.fieldTransforms.length > 0) {\n mutations.push(new TransformMutation(key, this.fieldTransforms));\n }\n return mutations;\n };\n return ParsedUpdateData;\n}());\nexport { ParsedUpdateData };\n/*\n * Represents what type of API method provided the data being parsed; useful\n * for determining which error conditions apply during parsing and providing\n * better error messages.\n */\nvar UserDataSource;\n(function (UserDataSource) {\n UserDataSource[UserDataSource[\"Set\"] = 0] = \"Set\";\n UserDataSource[UserDataSource[\"Update\"] = 1] = \"Update\";\n UserDataSource[UserDataSource[\"MergeSet\"] = 2] = \"MergeSet\";\n UserDataSource[UserDataSource[\"QueryValue\"] = 3] = \"QueryValue\"; // from a where clause or cursor bound\n})(UserDataSource || (UserDataSource = {}));\nfunction isWrite(dataSource) {\n switch (dataSource) {\n case UserDataSource.Set: // fall through\n case UserDataSource.MergeSet: // fall through\n case UserDataSource.Update:\n return true;\n case UserDataSource.QueryValue:\n return false;\n default:\n throw fail(\"Unexpected case for UserDataSource: \" + dataSource);\n }\n}\n/** A \"context\" object passed around while parsing user data. */\nvar ParseContext = /** @class */ (function () {\n /**\n * Initializes a ParseContext with the given source and path.\n *\n * @param dataSource Indicates what kind of API method this data came from.\n * @param methodName The name of the method the user called to create this\n * ParseContext.\n * @param path A path within the object being parsed. This could be an empty\n * path (in which case the context represents the root of the data being\n * parsed), or a nonempty path (indicating the context represents a nested\n * location within the data).\n * @param arrayElement Whether or not this context corresponds to an element\n * of an array.\n * @param fieldTransforms A mutable list of field transforms encountered while\n * parsing the data.\n * @param fieldMask A mutable list of field paths encountered while parsing\n * the data.\n *\n * TODO(b/34871131): We don't support array paths right now, so path can be\n * null to indicate the context represents any location within an array (in\n * which case certain features will not work and errors will be somewhat\n * compromised).\n */\n function ParseContext(dataSource, methodName, path, arrayElement, fieldTransforms, fieldMask) {\n this.dataSource = dataSource;\n this.methodName = methodName;\n this.path = path;\n this.arrayElement = arrayElement;\n // Minor hack: If fieldTransforms is undefined, we assume this is an\n // external call and we need to validate the entire path.\n if (fieldTransforms === undefined) {\n this.validatePath();\n }\n this.arrayElement = arrayElement !== undefined ? arrayElement : false;\n this.fieldTransforms = fieldTransforms || [];\n this.fieldMask = fieldMask || [];\n }\n ParseContext.prototype.childContextForField = function (field) {\n var childPath = this.path == null ? null : this.path.child(field);\n var context = new ParseContext(this.dataSource, this.methodName, childPath, \n /*arrayElement=*/ false, this.fieldTransforms, this.fieldMask);\n context.validatePathSegment(field);\n return context;\n };\n ParseContext.prototype.childContextForFieldPath = function (field) {\n var childPath = this.path == null ? null : this.path.child(field);\n var context = new ParseContext(this.dataSource, this.methodName, childPath, \n /*arrayElement=*/ false, this.fieldTransforms, this.fieldMask);\n context.validatePath();\n return context;\n };\n ParseContext.prototype.childContextForArray = function (index) {\n // TODO(b/34871131): We don't support array paths right now; so make path\n // null.\n return new ParseContext(this.dataSource, this.methodName, \n /*path=*/ null, \n /*arrayElement=*/ true, this.fieldTransforms, this.fieldMask);\n };\n ParseContext.prototype.createError = function (reason) {\n var fieldDescription = this.path === null || this.path.isEmpty()\n ? ''\n : \" (found in field \" + this.path.toString() + \")\";\n return new FirestoreError(Code.INVALID_ARGUMENT, \"Function \" + this.methodName + \"() called with invalid data. \" +\n reason +\n fieldDescription);\n };\n ParseContext.prototype.validatePath = function () {\n // TODO(b/34871131): Remove null check once we have proper paths for fields\n // within arrays.\n if (this.path === null) {\n return;\n }\n for (var i = 0; i < this.path.length; i++) {\n this.validatePathSegment(this.path.get(i));\n }\n };\n ParseContext.prototype.validatePathSegment = function (segment) {\n if (isWrite(this.dataSource) && RESERVED_FIELD_REGEX.test(segment)) {\n throw this.createError('Document fields cannot begin and end with __');\n }\n };\n ParseContext.prototype.isWrite = function () {\n return (this.dataSource === UserDataSource.Set ||\n this.dataSource === UserDataSource.Update);\n };\n return ParseContext;\n}());\n/**\n * A placeholder object for DocumentReferences in this file, in order to\n * avoid a circular dependency. See the comments for `DataPreConverter` for\n * the full context.\n */\nvar DocumentKeyReference = /** @class */ (function () {\n function DocumentKeyReference(databaseId, key) {\n this.databaseId = databaseId;\n this.key = key;\n }\n return DocumentKeyReference;\n}());\nexport { DocumentKeyReference };\n/**\n * Helper for parsing raw user input (provided via the API) into internal model\n * classes.\n */\nvar UserDataConverter = /** @class */ (function () {\n function UserDataConverter(preConverter) {\n this.preConverter = preConverter;\n }\n /** Parse document data from a non-merge set() call. */\n UserDataConverter.prototype.parseSetData = function (methodName, input) {\n var context = new ParseContext(UserDataSource.Set, methodName, FieldPath.EMPTY_PATH);\n validatePlainObject('Data must be an object, but it was:', context, input);\n var updateData = this.parseData(input, context);\n return new ParsedSetData(updateData, \n /* fieldMask= */ null, context.fieldTransforms);\n };\n /** Parse document data from a set() call with '{merge:true}'. */\n UserDataConverter.prototype.parseMergeData = function (methodName, input) {\n var context = new ParseContext(UserDataSource.MergeSet, methodName, FieldPath.EMPTY_PATH);\n validatePlainObject('Data must be an object, but it was:', context, input);\n var updateData = this.parseData(input, context);\n var fieldMask = new FieldMask(context.fieldMask);\n return new ParsedSetData(updateData, fieldMask, context.fieldTransforms);\n };\n /** Parse update data from an update() call. */\n UserDataConverter.prototype.parseUpdateData = function (methodName, input) {\n var _this = this;\n var context = new ParseContext(UserDataSource.Update, methodName, FieldPath.EMPTY_PATH);\n validatePlainObject('Data must be an object, but it was:', context, input);\n var fieldMaskPaths = [];\n var updateData = ObjectValue.EMPTY;\n objUtils.forEach(input, function (key, value) {\n var path = fieldPathFromDotSeparatedString(methodName, key);\n var childContext = context.childContextForFieldPath(path);\n value = _this.runPreConverter(value, childContext);\n if (value instanceof DeleteFieldValueImpl) {\n // Add it to the field mask, but don't add anything to updateData.\n fieldMaskPaths.push(path);\n }\n else {\n var parsedValue = _this.parseData(value, childContext);\n if (parsedValue != null) {\n fieldMaskPaths.push(path);\n updateData = updateData.set(path, parsedValue);\n }\n }\n });\n var mask = new FieldMask(fieldMaskPaths);\n return new ParsedUpdateData(updateData, mask, context.fieldTransforms);\n };\n /** Parse update data from a list of field/value arguments. */\n UserDataConverter.prototype.parseUpdateVarargs = function (methodName, field, value, moreFieldsAndValues) {\n var context = new ParseContext(UserDataSource.Update, methodName, FieldPath.EMPTY_PATH);\n var keys = [fieldPathFromArgument(methodName, field)];\n var values = [value];\n if (moreFieldsAndValues.length % 2 !== 0) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Function \" + methodName + \"() needs to be called with an even number \" +\n 'of arguments that alternate between field names and values.');\n }\n for (var i = 0; i < moreFieldsAndValues.length; i += 2) {\n keys.push(fieldPathFromArgument(methodName, moreFieldsAndValues[i]));\n values.push(moreFieldsAndValues[i + 1]);\n }\n var fieldMaskPaths = [];\n var updateData = ObjectValue.EMPTY;\n for (var i = 0; i < keys.length; ++i) {\n var path = keys[i];\n var childContext = context.childContextForFieldPath(path);\n var value_1 = this.runPreConverter(values[i], childContext);\n if (value_1 instanceof DeleteFieldValueImpl) {\n // Add it to the field mask, but don't add anything to updateData.\n fieldMaskPaths.push(path);\n }\n else {\n var parsedValue = this.parseData(value_1, childContext);\n if (parsedValue != null) {\n fieldMaskPaths.push(path);\n updateData = updateData.set(path, parsedValue);\n }\n }\n }\n var mask = new FieldMask(fieldMaskPaths);\n return new ParsedUpdateData(updateData, mask, context.fieldTransforms);\n };\n /**\n * Parse a \"query value\" (e.g. value in a where filter or a value in a cursor\n * bound).\n */\n UserDataConverter.prototype.parseQueryValue = function (methodName, input) {\n var context = new ParseContext(UserDataSource.QueryValue, methodName, FieldPath.EMPTY_PATH);\n var parsed = this.parseData(input, context);\n assert(parsed != null, 'Parsed data should not be null.');\n assert(context.fieldTransforms.length === 0, 'Field transforms should have been disallowed.');\n return parsed;\n };\n /** Sends data through this.preConverter, handling any thrown errors. */\n UserDataConverter.prototype.runPreConverter = function (input, context) {\n try {\n return this.preConverter(input);\n }\n catch (e) {\n var message = errorMessage(e);\n throw context.createError(message);\n }\n };\n /**\n * Internal helper for parsing user data.\n *\n * @param input Data to be parsed.\n * @param context A context object representing the current path being parsed,\n * the source of the data being parsed, etc.\n * @return The parsed value, or null if the value was a FieldValue sentinel\n * that should not be included in the resulting parsed data.\n */\n UserDataConverter.prototype.parseData = function (input, context) {\n input = this.runPreConverter(input, context);\n if (input instanceof Array) {\n // TODO(b/34871131): Include the path containing the array in the error\n // message.\n if (context.arrayElement) {\n throw context.createError('Nested arrays are not supported');\n }\n // If context.path is null we are already inside an array and we don't\n // support field mask paths more granular than the top-level array.\n if (context.path) {\n context.fieldMask.push(context.path);\n }\n return this.parseArray(input, context);\n }\n else if (looksLikeJsonObject(input)) {\n validatePlainObject('Unsupported field value:', context, input);\n return this.parseObject(input, context);\n }\n else {\n // If context.path is null, we are inside an array and we should have\n // already added the root of the array to the field mask.\n if (context.path) {\n context.fieldMask.push(context.path);\n }\n return this.parseScalarValue(input, context);\n }\n };\n UserDataConverter.prototype.parseArray = function (array, context) {\n var result = [];\n var entryIndex = 0;\n for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {\n var entry = array_1[_i];\n var parsedEntry = this.parseData(entry, context.childContextForArray(entryIndex));\n if (parsedEntry == null) {\n // Just include nulls in the array for fields being replaced with a\n // sentinel.\n parsedEntry = NullValue.INSTANCE;\n }\n result.push(parsedEntry);\n entryIndex++;\n }\n return new ArrayValue(result);\n };\n UserDataConverter.prototype.parseObject = function (obj, context) {\n var _this = this;\n var result = new SortedMap(primitiveComparator);\n objUtils.forEach(obj, function (key, val) {\n var parsedValue = _this.parseData(val, context.childContextForField(key));\n if (parsedValue != null) {\n result = result.insert(key, parsedValue);\n }\n });\n return new ObjectValue(result);\n };\n /**\n * Helper to parse a scalar value (i.e. not an Object or Array)\n *\n * @return The parsed value, or null if the value was a FieldValue sentinel\n * that should not be included in the resulting parsed data.\n */\n UserDataConverter.prototype.parseScalarValue = function (value, context) {\n if (value === null) {\n return NullValue.INSTANCE;\n }\n else if (typeof value === 'number') {\n if (typeUtils.isSafeInteger(value)) {\n return new IntegerValue(value);\n }\n else {\n return new DoubleValue(value);\n }\n }\n else if (typeof value === 'boolean') {\n return BooleanValue.of(value);\n }\n else if (typeof value === 'string') {\n return new StringValue(value);\n }\n else if (value instanceof Date) {\n return new TimestampValue(Timestamp.fromDate(value));\n }\n else if (value instanceof GeoPoint) {\n return new GeoPointValue(value);\n }\n else if (value instanceof Blob) {\n return new BlobValue(value);\n }\n else if (value instanceof DocumentKeyReference) {\n return new RefValue(value.databaseId, value.key);\n }\n else if (value instanceof FieldValueImpl) {\n if (value instanceof DeleteFieldValueImpl) {\n if (context.dataSource === UserDataSource.MergeSet) {\n return null;\n }\n else if (context.dataSource === UserDataSource.Update) {\n assert(context.path == null || context.path.length > 0, 'FieldValue.delete() at the top level should have already' +\n ' been handled.');\n throw context.createError('FieldValue.delete() can only appear at the top level ' +\n 'of your update data');\n }\n else {\n // We shouldn't encounter delete sentinels for queries or non-merge set() calls.\n throw context.createError('FieldValue.delete() can only be used with update() and set() with {merge:true}');\n }\n }\n else if (value instanceof ServerTimestampFieldValueImpl) {\n if (!isWrite(context.dataSource)) {\n throw context.createError('FieldValue.serverTimestamp() can only be used with set()' +\n ' and update()');\n }\n if (context.path === null) {\n throw context.createError('FieldValue.serverTimestamp() is not currently' +\n ' supported inside arrays');\n }\n context.fieldTransforms.push(new FieldTransform(context.path, ServerTimestampTransform.instance));\n // Return null so this value is omitted from the parsed result.\n return null;\n }\n else {\n return fail('Unknown FieldValue type: ' + value);\n }\n }\n else {\n throw context.createError(\"Unsupported field value: \" + valueDescription(value));\n }\n };\n return UserDataConverter;\n}());\nexport { UserDataConverter };\n/**\n * Checks whether an object looks like a JSON object that should be converted\n * into a struct. Normal class/prototype instances are considered to look like\n * JSON objects since they should be converted to a struct value. Arrays, Dates,\n * GeoPoints, etc. are not considered to look like JSON objects since they map\n * to specific FieldValue types other than ObjectValue.\n */\nfunction looksLikeJsonObject(input) {\n return (typeof input === 'object' &&\n input !== null &&\n !(input instanceof Array) &&\n !(input instanceof Date) &&\n !(input instanceof GeoPoint) &&\n !(input instanceof Blob) &&\n !(input instanceof DocumentKeyReference) &&\n !(input instanceof FieldValueImpl));\n}\nfunction validatePlainObject(message, context, input) {\n if (!looksLikeJsonObject(input) || !isPlainObject(input)) {\n var description = valueDescription(input);\n if (description === 'an object') {\n // Massage the error if it was an object.\n throw context.createError(message + ' a custom object');\n }\n else {\n throw context.createError(message + ' ' + description);\n }\n }\n}\n/**\n * Helper that calls fromDotSeparatedString() but wraps any error thrown.\n */\nexport function fieldPathFromArgument(methodName, path) {\n if (path instanceof ExternalFieldPath) {\n return path._internalPath;\n }\n else if (typeof path === 'string') {\n return fieldPathFromDotSeparatedString(methodName, path);\n }\n else {\n var message = 'Field path arguments must be of type string or FieldPath.';\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Function \" + methodName + \"() called with invalid data. \" + message);\n }\n}\n/**\n * Wraps fromDotSeparatedString with an error message about the method that\n * was thrown.\n * @param methodName The publicly visible method name\n * @param path The dot-separated string form of a field path which will be split\n * on dots.\n */\nfunction fieldPathFromDotSeparatedString(methodName, path) {\n try {\n return fromDotSeparatedString(path)._internalPath;\n }\n catch (e) {\n var message = errorMessage(e);\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Function \" + methodName + \"() called with invalid data. \" + message);\n }\n}\n/**\n * Extracts the message from a caught exception, which should be an Error object\n * though JS doesn't guarantee that.\n */\nfunction errorMessage(error) {\n return error instanceof Error ? error.message : error.toString();\n}\n\n//# sourceMappingURL=user_data_converter.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { FieldPath as ExternalFieldPath } from './field_path';\nimport { DatabaseId, DatabaseInfo } from '../core/database_info';\nimport { FirestoreClient } from '../core/firestore_client';\nimport { Bound, Direction, fieldFilter, OrderBy, Query as InternalQuery, RelationFilter, RelationOp } from '../core/query';\nimport { ChangeType } from '../core/view_snapshot';\nimport { NoDocument } from '../model/document';\nimport { DocumentKey } from '../model/document_key';\nimport { ArrayValue, FieldValueOptions, ObjectValue, RefValue } from '../model/field_value';\nimport { DeleteMutation, Precondition } from '../model/mutation';\nimport { ResourcePath } from '../model/path';\nimport { PlatformSupport } from '../platform/platform';\nimport { makeConstructorPrivate } from '../util/api';\nimport { assert, fail } from '../util/assert';\nimport { AsyncObserver } from '../util/async_observer';\nimport { AsyncQueue } from '../util/async_queue';\nimport { Code, FirestoreError } from '../util/error';\nimport { invalidClassError, validateArgType, validateAtLeastNumberOfArgs, validateBetweenNumberOfArgs, validateDefined, validateExactNumberOfArgs, validateNamedOptionalType, validateNamedOptionalPropertyEquals, validateNamedType, validateOptionalArgType, validateOptionNames, valueDescription } from '../util/input_validation';\nimport * as log from '../util/log';\nimport { LogLevel } from '../util/log';\nimport { AutoId } from '../util/misc';\nimport * as objUtils from '../util/obj';\nimport { EmptyCredentialsProvider, FirebaseCredentialsProvider, makeCredentialsProvider } from './credentials';\nimport { isPartialObserver } from './observer';\nimport { DocumentKeyReference, fieldPathFromArgument, UserDataConverter } from './user_data_converter';\n// The objects that are a part of this API are exposed to third-parties as\n// compiled javascript so we want to flag our private members with a leading\n// underscore to discourage their use.\n// tslint:disable:strip-private-property-underscore\nvar DEFAULT_HOST = 'firestore.googleapis.com';\nvar DEFAULT_SSL = true;\n/**\n * A concrete type describing all the values that can be applied via a\n * user-supplied firestore.Settings object. This is a separate type so that\n * defaults can be supplied and the value can be checked for equality.\n */\nvar FirestoreSettings = /** @class */ (function () {\n function FirestoreSettings(settings) {\n if (settings.host === undefined) {\n if (settings.ssl !== undefined) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Can't provide ssl option if host option is not set\");\n }\n this.host = DEFAULT_HOST;\n this.ssl = DEFAULT_SSL;\n }\n else {\n validateNamedType('settings', 'string', 'host', settings.host);\n this.host = settings.host;\n validateNamedOptionalType('settings', 'boolean', 'ssl', settings.ssl);\n this.ssl = objUtils.defaulted(settings.ssl, DEFAULT_SSL);\n }\n validateOptionNames('settings', settings, ['host', 'ssl', 'credentials']);\n validateNamedOptionalType('settings', 'object', 'credentials', settings.credentials);\n this.credentials = settings.credentials;\n }\n FirestoreSettings.prototype.isEqual = function (other) {\n return (this.host === other.host &&\n this.ssl === other.ssl &&\n this.credentials === other.credentials);\n };\n return FirestoreSettings;\n}());\nvar FirestoreConfig = /** @class */ (function () {\n function FirestoreConfig() {\n }\n return FirestoreConfig;\n}());\n/**\n * The root reference to the database.\n */\nvar Firestore = /** @class */ (function () {\n function Firestore(databaseIdOrApp) {\n var _this = this;\n // Public for use in tests.\n // TODO(mikelehen): Use modularized initialization instead.\n this._queue = new AsyncQueue();\n this.INTERNAL = {\n delete: function () {\n if (_this._firestoreClient) {\n return _this._firestoreClient.shutdown();\n }\n else {\n return Promise.resolve();\n }\n }\n };\n var config = new FirestoreConfig();\n if (typeof databaseIdOrApp.options === 'object') {\n // This is very likely a Firebase app object\n // TODO(b/34177605): Can we somehow use instanceof?\n var app = databaseIdOrApp;\n config.firebaseApp = app;\n config.databaseId = Firestore.databaseIdFromApp(app);\n config.persistenceKey = config.firebaseApp.name;\n config.credentials = new FirebaseCredentialsProvider(app);\n }\n else {\n var external_1 = databaseIdOrApp;\n if (!external_1.projectId) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Must provide projectId');\n }\n config.databaseId = new DatabaseId(external_1.projectId, external_1.database);\n // Use a default persistenceKey that lines up with FirebaseApp.\n config.persistenceKey = '[DEFAULT]';\n config.credentials = new EmptyCredentialsProvider();\n }\n config.settings = new FirestoreSettings({});\n this._config = config;\n this._databaseId = config.databaseId;\n }\n Firestore.prototype.settings = function (settingsLiteral) {\n validateExactNumberOfArgs('Firestore.settings', arguments, 1);\n validateArgType('Firestore.settings', 'object', 1, settingsLiteral);\n if (objUtils.contains(settingsLiteral, 'persistence')) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, '\"persistence\" is now specified with a separate call to ' +\n 'firestore.enablePersistence().');\n }\n var newSettings = new FirestoreSettings(settingsLiteral);\n if (this._firestoreClient && !this._config.settings.isEqual(newSettings)) {\n throw new FirestoreError(Code.FAILED_PRECONDITION, 'Firestore has already been started and its settings can no longer ' +\n 'be changed. You can only call settings() before calling any other ' +\n 'methods on a Firestore object.');\n }\n this._config.settings = newSettings;\n if (newSettings.credentials !== undefined) {\n this._config.credentials = makeCredentialsProvider(newSettings.credentials);\n }\n };\n Firestore.prototype.enableNetwork = function () {\n this.ensureClientConfigured();\n return this._firestoreClient.enableNetwork();\n };\n Firestore.prototype.disableNetwork = function () {\n this.ensureClientConfigured();\n return this._firestoreClient.disableNetwork();\n };\n Firestore.prototype.enablePersistence = function () {\n if (this._firestoreClient) {\n throw new FirestoreError(Code.FAILED_PRECONDITION, 'Firestore has already been started and persistence can no longer ' +\n 'be enabled. You can only call enablePersistence() before calling ' +\n 'any other methods on a Firestore object.');\n }\n return this.configureClient(/* persistence= */ true);\n };\n Firestore.prototype.ensureClientConfigured = function () {\n if (!this._firestoreClient) {\n this.configureClient(/* persistence= */ false);\n }\n return this._firestoreClient;\n };\n Firestore.prototype.configureClient = function (persistence) {\n var _this = this;\n assert(!!this._config.settings.host, 'FirestoreSettings.host cannot be falsey');\n assert(!this._firestoreClient, 'configureClient() called multiple times');\n var databaseInfo = new DatabaseInfo(this._config.databaseId, this._config.persistenceKey, this._config.settings.host, this._config.settings.ssl);\n var preConverter = function (value) {\n if (value instanceof DocumentReference) {\n var thisDb = _this._config.databaseId;\n var otherDb = value.firestore._config.databaseId;\n if (!otherDb.isEqual(thisDb)) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Document reference is for database ' +\n (otherDb.projectId + \"/\" + otherDb.database + \" but should be \") +\n (\"for database \" + thisDb.projectId + \"/\" + thisDb.database));\n }\n return new DocumentKeyReference(_this._config.databaseId, value._key);\n }\n else {\n return value;\n }\n };\n this._dataConverter = new UserDataConverter(preConverter);\n this._firestoreClient = new FirestoreClient(PlatformSupport.getPlatform(), databaseInfo, this._config.credentials, this._queue);\n return this._firestoreClient.start(persistence);\n };\n Firestore.databaseIdFromApp = function (app) {\n var options = app.options;\n if (!objUtils.contains(options, 'projectId')) {\n // TODO(b/62673263): We can safely remove the special handling of\n // 'firestoreId' once alpha testers have upgraded.\n if (objUtils.contains(options, 'firestoreId')) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, '\"firestoreId\" is now specified as \"projectId\" in ' +\n 'firebase.initializeApp.');\n }\n throw new FirestoreError(Code.INVALID_ARGUMENT, '\"projectId\" not provided in firebase.initializeApp.');\n }\n if (objUtils.contains(options, 'firestoreOptions')) {\n // TODO(b/62673263): We can safely remove the special handling of\n // 'firestoreOptions' once alpha testers have upgraded.\n throw new FirestoreError(Code.INVALID_ARGUMENT, '\"firestoreOptions\" values are now specified with ' +\n 'Firestore.settings()');\n }\n var projectId = options['projectId'];\n if (!projectId || typeof projectId !== 'string') {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'projectId must be a string in FirebaseApp.options');\n }\n return new DatabaseId(projectId);\n };\n Object.defineProperty(Firestore.prototype, \"app\", {\n get: function () {\n if (!this._config.firebaseApp) {\n throw new FirestoreError(Code.FAILED_PRECONDITION, \"Firestore was not initialized using the Firebase SDK. 'app' is \" +\n 'not available');\n }\n return this._config.firebaseApp;\n },\n enumerable: true,\n configurable: true\n });\n Firestore.prototype.collection = function (pathString) {\n validateExactNumberOfArgs('Firestore.collection', arguments, 1);\n validateArgType('Firestore.collection', 'string', 1, pathString);\n if (!pathString) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Must provide a non-empty collection path to collection()');\n }\n this.ensureClientConfigured();\n return new CollectionReference(ResourcePath.fromString(pathString), this);\n };\n Firestore.prototype.doc = function (pathString) {\n validateExactNumberOfArgs('Firestore.doc', arguments, 1);\n validateArgType('Firestore.doc', 'string', 1, pathString);\n if (!pathString) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Must provide a non-empty document path to doc()');\n }\n this.ensureClientConfigured();\n return DocumentReference.forPath(ResourcePath.fromString(pathString), this);\n };\n Firestore.prototype.runTransaction = function (updateFunction) {\n var _this = this;\n validateExactNumberOfArgs('Firestore.runTransaction', arguments, 1);\n validateArgType('Firestore.runTransaction', 'function', 1, updateFunction);\n return this.ensureClientConfigured().transaction(function (transaction) {\n return updateFunction(new Transaction(_this, transaction));\n });\n };\n Firestore.prototype.batch = function () {\n this.ensureClientConfigured();\n return new WriteBatch(this);\n };\n Object.defineProperty(Firestore, \"logLevel\", {\n get: function () {\n switch (log.getLogLevel()) {\n case LogLevel.DEBUG:\n return 'debug';\n case LogLevel.ERROR:\n return 'error';\n case LogLevel.SILENT:\n return 'silent';\n default:\n return fail('Unknown log level: ' + log.getLogLevel());\n }\n },\n enumerable: true,\n configurable: true\n });\n Firestore.setLogLevel = function (level) {\n validateExactNumberOfArgs('Firestore.setLogLevel', arguments, 1);\n validateArgType('Firestore.setLogLevel', 'string', 1, level);\n switch (level) {\n case 'debug':\n log.setLogLevel(log.LogLevel.DEBUG);\n break;\n case 'error':\n log.setLogLevel(log.LogLevel.ERROR);\n break;\n case 'silent':\n log.setLogLevel(log.LogLevel.SILENT);\n break;\n default:\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid log level: ' + level);\n }\n };\n return Firestore;\n}());\nexport { Firestore };\n/**\n * A reference to a transaction.\n */\nvar Transaction = /** @class */ (function () {\n function Transaction(_firestore, _transaction) {\n this._firestore = _firestore;\n this._transaction = _transaction;\n }\n Transaction.prototype.get = function (documentRef) {\n var _this = this;\n validateExactNumberOfArgs('Transaction.get', arguments, 1);\n var ref = validateReference('Transaction.get', documentRef, this._firestore);\n return this._transaction\n .lookup([ref._key])\n .then(function (docs) {\n if (!docs || docs.length !== 1) {\n return fail('Mismatch in docs returned from document lookup.');\n }\n var doc = docs[0];\n if (doc instanceof NoDocument) {\n return new DocumentSnapshot(_this._firestore, ref._key, null, false);\n }\n return new DocumentSnapshot(_this._firestore, ref._key, doc, false);\n });\n };\n Transaction.prototype.set = function (documentRef, value, options) {\n validateBetweenNumberOfArgs('Transaction.set', arguments, 2, 3);\n var ref = validateReference('Transaction.set', documentRef, this._firestore);\n options = validateSetOptions('Transaction.set', options);\n var parsed = options.merge\n ? this._firestore._dataConverter.parseMergeData('Transaction.set', value)\n : this._firestore._dataConverter.parseSetData('Transaction.set', value);\n this._transaction.set(ref._key, parsed);\n return this;\n };\n Transaction.prototype.update = function (documentRef, fieldOrUpdateData, value) {\n var moreFieldsAndValues = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n moreFieldsAndValues[_i - 3] = arguments[_i];\n }\n var ref;\n var parsed;\n if (typeof fieldOrUpdateData === 'string' ||\n fieldOrUpdateData instanceof ExternalFieldPath) {\n validateAtLeastNumberOfArgs('Transaction.update', arguments, 3);\n ref = validateReference('Transaction.update', documentRef, this._firestore);\n parsed = this._firestore._dataConverter.parseUpdateVarargs('Transaction.update', fieldOrUpdateData, value, moreFieldsAndValues);\n }\n else {\n validateExactNumberOfArgs('Transaction.update', arguments, 2);\n ref = validateReference('Transaction.update', documentRef, this._firestore);\n parsed = this._firestore._dataConverter.parseUpdateData('Transaction.update', fieldOrUpdateData);\n }\n this._transaction.update(ref._key, parsed);\n return this;\n };\n Transaction.prototype.delete = function (documentRef) {\n validateExactNumberOfArgs('Transaction.delete', arguments, 1);\n var ref = validateReference('Transaction.delete', documentRef, this._firestore);\n this._transaction.delete(ref._key);\n return this;\n };\n return Transaction;\n}());\nexport { Transaction };\nvar WriteBatch = /** @class */ (function () {\n function WriteBatch(_firestore) {\n this._firestore = _firestore;\n this._mutations = [];\n this._committed = false;\n }\n WriteBatch.prototype.set = function (documentRef, value, options) {\n validateBetweenNumberOfArgs('WriteBatch.set', arguments, 2, 3);\n this.verifyNotCommitted();\n var ref = validateReference('WriteBatch.set', documentRef, this._firestore);\n options = validateSetOptions('WriteBatch.set', options);\n var parsed = options.merge\n ? this._firestore._dataConverter.parseMergeData('WriteBatch.set', value)\n : this._firestore._dataConverter.parseSetData('WriteBatch.set', value);\n this._mutations = this._mutations.concat(parsed.toMutations(ref._key, Precondition.NONE));\n return this;\n };\n WriteBatch.prototype.update = function (documentRef, fieldOrUpdateData, value) {\n var moreFieldsAndValues = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n moreFieldsAndValues[_i - 3] = arguments[_i];\n }\n this.verifyNotCommitted();\n var ref;\n var parsed;\n if (typeof fieldOrUpdateData === 'string' ||\n fieldOrUpdateData instanceof ExternalFieldPath) {\n validateAtLeastNumberOfArgs('WriteBatch.update', arguments, 3);\n ref = validateReference('WriteBatch.update', documentRef, this._firestore);\n parsed = this._firestore._dataConverter.parseUpdateVarargs('WriteBatch.update', fieldOrUpdateData, value, moreFieldsAndValues);\n }\n else {\n validateExactNumberOfArgs('WriteBatch.update', arguments, 2);\n ref = validateReference('WriteBatch.update', documentRef, this._firestore);\n parsed = this._firestore._dataConverter.parseUpdateData('WriteBatch.update', fieldOrUpdateData);\n }\n this._mutations = this._mutations.concat(parsed.toMutations(ref._key, Precondition.exists(true)));\n return this;\n };\n WriteBatch.prototype.delete = function (documentRef) {\n validateExactNumberOfArgs('WriteBatch.delete', arguments, 1);\n this.verifyNotCommitted();\n var ref = validateReference('WriteBatch.delete', documentRef, this._firestore);\n this._mutations = this._mutations.concat(new DeleteMutation(ref._key, Precondition.NONE));\n return this;\n };\n WriteBatch.prototype.commit = function () {\n this.verifyNotCommitted();\n this._committed = true;\n if (this._mutations.length > 0) {\n return this._firestore.ensureClientConfigured().write(this._mutations);\n }\n else {\n return Promise.resolve();\n }\n };\n WriteBatch.prototype.verifyNotCommitted = function () {\n if (this._committed) {\n throw new FirestoreError(Code.FAILED_PRECONDITION, 'A write batch can no longer be used after commit() ' +\n 'has been called.');\n }\n };\n return WriteBatch;\n}());\nexport { WriteBatch };\n/**\n * A reference to a particular document in a collection in the database.\n */\nvar DocumentReference = /** @class */ (function () {\n function DocumentReference(_key, firestore) {\n this._key = _key;\n this.firestore = firestore;\n this._firestoreClient = this.firestore.ensureClientConfigured();\n }\n DocumentReference.forPath = function (path, firestore) {\n if (path.length % 2 !== 0) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid document reference. Document ' +\n 'references must have an even number of segments, but ' +\n (path.canonicalString() + \" has \" + path.length));\n }\n return new DocumentReference(new DocumentKey(path), firestore);\n };\n Object.defineProperty(DocumentReference.prototype, \"id\", {\n get: function () {\n return this._key.path.lastSegment();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentReference.prototype, \"parent\", {\n get: function () {\n return new CollectionReference(this._key.path.popLast(), this.firestore);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentReference.prototype, \"path\", {\n get: function () {\n return this._key.path.canonicalString();\n },\n enumerable: true,\n configurable: true\n });\n DocumentReference.prototype.collection = function (pathString) {\n validateExactNumberOfArgs('DocumentReference.collection', arguments, 1);\n validateArgType('DocumentReference.collection', 'string', 1, pathString);\n if (!pathString) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Must provide a non-empty collection name to collection()');\n }\n var path = ResourcePath.fromString(pathString);\n return new CollectionReference(this._key.path.child(path), this.firestore);\n };\n DocumentReference.prototype.isEqual = function (other) {\n if (!(other instanceof DocumentReference)) {\n throw invalidClassError('isEqual', 'DocumentReference', 1, other);\n }\n return this.firestore === other.firestore && this._key.isEqual(other._key);\n };\n DocumentReference.prototype.set = function (value, options) {\n validateBetweenNumberOfArgs('DocumentReference.set', arguments, 1, 2);\n options = validateSetOptions('DocumentReference.set', options);\n var parsed = options.merge\n ? this.firestore._dataConverter.parseMergeData('DocumentReference.set', value)\n : this.firestore._dataConverter.parseSetData('DocumentReference.set', value);\n return this._firestoreClient.write(parsed.toMutations(this._key, Precondition.NONE));\n };\n DocumentReference.prototype.update = function (fieldOrUpdateData, value) {\n var moreFieldsAndValues = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n moreFieldsAndValues[_i - 2] = arguments[_i];\n }\n var parsed;\n if (typeof fieldOrUpdateData === 'string' ||\n fieldOrUpdateData instanceof ExternalFieldPath) {\n validateAtLeastNumberOfArgs('DocumentReference.update', arguments, 2);\n parsed = this.firestore._dataConverter.parseUpdateVarargs('DocumentReference.update', fieldOrUpdateData, value, moreFieldsAndValues);\n }\n else {\n validateExactNumberOfArgs('DocumentReference.update', arguments, 1);\n parsed = this.firestore._dataConverter.parseUpdateData('DocumentReference.update', fieldOrUpdateData);\n }\n return this._firestoreClient.write(parsed.toMutations(this._key, Precondition.exists(true)));\n };\n DocumentReference.prototype.delete = function () {\n validateExactNumberOfArgs('DocumentReference.delete', arguments, 0);\n return this._firestoreClient.write([\n new DeleteMutation(this._key, Precondition.NONE)\n ]);\n };\n DocumentReference.prototype.onSnapshot = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n validateBetweenNumberOfArgs('DocumentReference.onSnapshot', arguments, 1, 4);\n var options = {\n includeMetadataChanges: false\n };\n var observer;\n var currArg = 0;\n if (typeof args[currArg] === 'object' &&\n !isPartialObserver(args[currArg])) {\n options = args[currArg];\n validateOptionNames('DocumentReference.onSnapshot', options, [\n 'includeMetadataChanges'\n ]);\n validateNamedOptionalType('DocumentReference.onSnapshot', 'boolean', 'includeMetadataChanges', options.includeMetadataChanges);\n currArg++;\n }\n var internalOptions = {\n includeDocumentMetadataChanges: options.includeMetadataChanges,\n includeQueryMetadataChanges: options.includeMetadataChanges\n };\n if (isPartialObserver(args[currArg])) {\n observer = args[currArg];\n }\n else {\n validateArgType('DocumentReference.onSnapshot', 'function', currArg, args[currArg]);\n validateOptionalArgType('DocumentReference.onSnapshot', 'function', currArg + 1, args[currArg + 1]);\n validateOptionalArgType('DocumentReference.onSnapshot', 'function', currArg + 2, args[currArg + 2]);\n observer = {\n next: args[currArg],\n error: args[currArg + 1],\n complete: args[currArg + 2]\n };\n }\n return this.onSnapshotInternal(internalOptions, observer);\n };\n DocumentReference.prototype.onSnapshotInternal = function (options, observer) {\n var _this = this;\n var errHandler = function (err) {\n console.error('Uncaught Error in onSnapshot:', err);\n };\n if (observer.error) {\n errHandler = observer.error.bind(observer);\n }\n var asyncObserver = new AsyncObserver({\n next: function (snapshot) {\n if (observer.next) {\n assert(snapshot.docs.size <= 1, 'Too many documents returned on a document query');\n var doc = snapshot.docs.get(_this._key);\n observer.next(new DocumentSnapshot(_this.firestore, _this._key, doc, snapshot.fromCache));\n }\n },\n error: errHandler\n });\n var internalListener = this._firestoreClient.listen(InternalQuery.atPath(this._key.path), asyncObserver, options);\n return function () {\n asyncObserver.mute();\n _this._firestoreClient.unlisten(internalListener);\n };\n };\n DocumentReference.prototype.get = function () {\n var _this = this;\n validateExactNumberOfArgs('DocumentReference.get', arguments, 0);\n return new Promise(function (resolve, reject) {\n var unlisten = _this.onSnapshotInternal({\n includeQueryMetadataChanges: true,\n includeDocumentMetadataChanges: true,\n waitForSyncWhenOnline: true\n }, {\n next: function (snap) {\n // Remove query first before passing event to user to avoid\n // user actions affecting the now stale query.\n unlisten();\n if (!snap.exists && snap.metadata.fromCache) {\n // TODO(dimond): If we're online and the document doesn't\n // exist then we resolve with a doc.exists set to false. If\n // we're offline however, we reject the Promise in this\n // case. Two options: 1) Cache the negative response from\n // the server so we can deliver that even when you're\n // offline 2) Actually reject the Promise in the online case\n // if the document doesn't exist.\n reject(new FirestoreError(Code.ABORTED, 'Failed to get document because the client is ' + 'offline.'));\n }\n else {\n resolve(snap);\n }\n },\n error: reject\n });\n });\n };\n return DocumentReference;\n}());\nexport { DocumentReference };\nvar SnapshotMetadata = /** @class */ (function () {\n function SnapshotMetadata(hasPendingWrites, fromCache) {\n this.hasPendingWrites = hasPendingWrites;\n this.fromCache = fromCache;\n }\n SnapshotMetadata.prototype.isEqual = function (other) {\n return (this.hasPendingWrites === other.hasPendingWrites &&\n this.fromCache === other.fromCache);\n };\n return SnapshotMetadata;\n}());\nvar DocumentSnapshot = /** @class */ (function () {\n function DocumentSnapshot(_firestore, _key, _document, _fromCache) {\n this._firestore = _firestore;\n this._key = _key;\n this._document = _document;\n this._fromCache = _fromCache;\n }\n DocumentSnapshot.prototype.data = function (options) {\n validateBetweenNumberOfArgs('DocumentSnapshot.data', arguments, 0, 1);\n options = validateSnapshotOptions('DocumentSnapshot.data', options);\n return !this._document\n ? undefined\n : this.convertObject(this._document.data, FieldValueOptions.fromSnapshotOptions(options));\n };\n DocumentSnapshot.prototype.get = function (fieldPath, options) {\n validateBetweenNumberOfArgs('DocumentSnapshot.get', arguments, 1, 2);\n options = validateSnapshotOptions('DocumentSnapshot.get', options);\n if (this._document) {\n var value = this._document.data.field(fieldPathFromArgument('DocumentSnapshot.get', fieldPath));\n if (value !== undefined) {\n return this.convertValue(value, FieldValueOptions.fromSnapshotOptions(options));\n }\n }\n return undefined;\n };\n Object.defineProperty(DocumentSnapshot.prototype, \"id\", {\n get: function () {\n return this._key.path.lastSegment();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentSnapshot.prototype, \"ref\", {\n get: function () {\n return new DocumentReference(this._key, this._firestore);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentSnapshot.prototype, \"exists\", {\n get: function () {\n return this._document !== null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentSnapshot.prototype, \"metadata\", {\n get: function () {\n return new SnapshotMetadata(this._document !== null && this._document.hasLocalMutations, this._fromCache);\n },\n enumerable: true,\n configurable: true\n });\n DocumentSnapshot.prototype.isEqual = function (other) {\n if (!(other instanceof DocumentSnapshot)) {\n throw invalidClassError('isEqual', 'DocumentSnapshot', 1, other);\n }\n return (this._firestore === other._firestore &&\n this._fromCache === other._fromCache &&\n this._key.isEqual(other._key) &&\n (this._document === null\n ? other._document === null\n : this._document.isEqual(other._document)));\n };\n DocumentSnapshot.prototype.convertObject = function (data, options) {\n var _this = this;\n var result = {};\n data.forEach(function (key, value) {\n result[key] = _this.convertValue(value, options);\n });\n return result;\n };\n DocumentSnapshot.prototype.convertValue = function (value, options) {\n if (value instanceof ObjectValue) {\n return this.convertObject(value, options);\n }\n else if (value instanceof ArrayValue) {\n return this.convertArray(value, options);\n }\n else if (value instanceof RefValue) {\n var key = value.value(options);\n var database = this._firestore.ensureClientConfigured().databaseId();\n if (!value.databaseId.isEqual(database)) {\n // TODO(b/64130202): Somehow support foreign references.\n log.error(\"Document \" + this._key.path + \" contains a document \" +\n \"reference within a different database (\" +\n (value.databaseId.projectId + \"/\" + value.databaseId.database + \") which is not \") +\n \"supported. It will be treated as a reference in the current \" +\n (\"database (\" + database.projectId + \"/\" + database.database + \") \") +\n \"instead.\");\n }\n return new DocumentReference(key, this._firestore);\n }\n else {\n return value.value(options);\n }\n };\n DocumentSnapshot.prototype.convertArray = function (data, options) {\n var _this = this;\n return data.internalValue.map(function (value) {\n return _this.convertValue(value, options);\n });\n };\n return DocumentSnapshot;\n}());\nexport { DocumentSnapshot };\nvar QueryDocumentSnapshot = /** @class */ (function (_super) {\n __extends(QueryDocumentSnapshot, _super);\n function QueryDocumentSnapshot(firestore, key, document, fromCache) {\n return _super.call(this, firestore, key, document, fromCache) || this;\n }\n QueryDocumentSnapshot.prototype.data = function (options) {\n var data = _super.prototype.data.call(this, options);\n assert(typeof data === 'object', 'Document in a QueryDocumentSnapshot should exist');\n return data;\n };\n return QueryDocumentSnapshot;\n}(DocumentSnapshot));\nexport { QueryDocumentSnapshot };\nvar Query = /** @class */ (function () {\n function Query(_query, firestore) {\n this._query = _query;\n this.firestore = firestore;\n }\n Query.prototype.where = function (field, opStr, value) {\n validateExactNumberOfArgs('Query.where', arguments, 3);\n validateArgType('Query.where', 'string', 2, opStr);\n validateDefined('Query.where', 3, value);\n var fieldValue;\n var fieldPath = fieldPathFromArgument('Query.where', field);\n if (fieldPath.isKeyField()) {\n if (typeof value === 'string') {\n if (value.indexOf('/') !== -1) {\n // TODO(dimond): Allow slashes once ancestor queries are supported\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Function Query.where() requires its third parameter to be a ' +\n 'valid document ID if the first parameter is ' +\n 'FieldPath.documentId(), but it contains a slash.');\n }\n if (value === '') {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Function Query.where() requires its third parameter to be a ' +\n 'valid document ID if the first parameter is ' +\n 'FieldPath.documentId(), but it was an empty string.');\n }\n var path = this._query.path.child(new ResourcePath([value]));\n assert(path.length % 2 === 0, 'Path should be a document key');\n fieldValue = new RefValue(this.firestore._databaseId, new DocumentKey(path));\n }\n else if (value instanceof DocumentReference) {\n var ref = value;\n fieldValue = new RefValue(this.firestore._databaseId, ref._key);\n }\n else {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Function Query.where() requires its third parameter to be a \" +\n \"string or a DocumentReference if the first parameter is \" +\n \"FieldPath.documentId(), but it was: \" +\n (valueDescription(value) + \".\"));\n }\n }\n else {\n fieldValue = this.firestore._dataConverter.parseQueryValue('Query.where', value);\n }\n var filter = fieldFilter(fieldPath, RelationOp.fromString(opStr), fieldValue);\n this.validateNewFilter(filter);\n return new Query(this._query.addFilter(filter), this.firestore);\n };\n Query.prototype.orderBy = function (field, directionStr) {\n validateBetweenNumberOfArgs('Query.orderBy', arguments, 1, 2);\n validateOptionalArgType('Query.orderBy', 'string', 2, directionStr);\n var direction;\n if (directionStr === undefined || directionStr === 'asc') {\n direction = Direction.ASCENDING;\n }\n else if (directionStr === 'desc') {\n direction = Direction.DESCENDING;\n }\n else {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Function Query.orderBy() has unknown direction '\" + directionStr + \"', \" +\n \"expected 'asc' or 'desc'.\");\n }\n if (this._query.startAt !== null) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid query. You must not call Query.startAt() or ' +\n 'Query.startAfter() before calling Query.orderBy().');\n }\n if (this._query.endAt !== null) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid query. You must not call Query.endAt() or ' +\n 'Query.endBefore() before calling Query.orderBy().');\n }\n var fieldPath = fieldPathFromArgument('Query.orderBy', field);\n var orderBy = new OrderBy(fieldPath, direction);\n this.validateNewOrderBy(orderBy);\n return new Query(this._query.addOrderBy(orderBy), this.firestore);\n };\n Query.prototype.limit = function (n) {\n validateExactNumberOfArgs('Query.limit', arguments, 1);\n validateArgType('Query.limit', 'number', 1, n);\n if (n <= 0) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Invalid Query. Query limit (\" + n + \") is invalid. Limit must be \" +\n 'positive.');\n }\n return new Query(this._query.withLimit(n), this.firestore);\n };\n Query.prototype.startAt = function (docOrField) {\n var fields = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n fields[_i - 1] = arguments[_i];\n }\n validateAtLeastNumberOfArgs('Query.startAt', arguments, 1);\n var bound = this.boundFromDocOrFields('Query.startAt', docOrField, fields, \n /*before=*/ true);\n return new Query(this._query.withStartAt(bound), this.firestore);\n };\n Query.prototype.startAfter = function (docOrField) {\n var fields = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n fields[_i - 1] = arguments[_i];\n }\n validateAtLeastNumberOfArgs('Query.startAfter', arguments, 1);\n var bound = this.boundFromDocOrFields('Query.startAfter', docOrField, fields, \n /*before=*/ false);\n return new Query(this._query.withStartAt(bound), this.firestore);\n };\n Query.prototype.endBefore = function (docOrField) {\n var fields = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n fields[_i - 1] = arguments[_i];\n }\n validateAtLeastNumberOfArgs('Query.endBefore', arguments, 1);\n var bound = this.boundFromDocOrFields('Query.endBefore', docOrField, fields, \n /*before=*/ true);\n return new Query(this._query.withEndAt(bound), this.firestore);\n };\n Query.prototype.endAt = function (docOrField) {\n var fields = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n fields[_i - 1] = arguments[_i];\n }\n validateAtLeastNumberOfArgs('Query.endAt', arguments, 1);\n var bound = this.boundFromDocOrFields('Query.endAt', docOrField, fields, \n /*before=*/ false);\n return new Query(this._query.withEndAt(bound), this.firestore);\n };\n Query.prototype.isEqual = function (other) {\n if (!(other instanceof Query)) {\n throw invalidClassError('isEqual', 'Query', 1, other);\n }\n return (this.firestore === other.firestore && this._query.isEqual(other._query));\n };\n /** Helper function to create a bound from a document or fields */\n Query.prototype.boundFromDocOrFields = function (methodName, docOrField, fields, before) {\n validateDefined(methodName, 1, docOrField);\n if (docOrField instanceof DocumentSnapshot) {\n if (fields.length > 0) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Too many arguments provided to \" + methodName + \"().\");\n }\n var snap = docOrField;\n if (!snap.exists) {\n throw new FirestoreError(Code.NOT_FOUND, \"Can't use a DocumentSnapshot that doesn't exist for \" +\n (methodName + \"().\"));\n }\n return this.boundFromDocument(methodName, snap._document, before);\n }\n else {\n var allFields = [docOrField].concat(fields);\n return this.boundFromFields(methodName, allFields, before);\n }\n };\n /**\n * Create a Bound from a query and a document.\n *\n * Note that the Bound will always include the key of the document\n * and so only the provided document will compare equal to the returned\n * position.\n *\n * Will throw if the document does not contain all fields of the order by\n * of the query.\n */\n Query.prototype.boundFromDocument = function (methodName, doc, before) {\n var components = [];\n // Because people expect to continue/end a query at the exact document\n // provided, we need to use the implicit sort order rather than the explicit\n // sort order, because it's guaranteed to contain the document key. That way\n // the position becomes unambiguous and the query continues/ends exactly at\n // the provided document. Without the key (by using the explicit sort\n // orders), multiple documents could match the position, yielding duplicate\n // results.\n for (var _i = 0, _a = this._query.orderBy; _i < _a.length; _i++) {\n var orderBy = _a[_i];\n if (orderBy.field.isKeyField()) {\n components.push(new RefValue(this.firestore._databaseId, doc.key));\n }\n else {\n var value = doc.field(orderBy.field);\n if (value !== undefined) {\n components.push(value);\n }\n else {\n var field = orderBy.field.canonicalString();\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Invalid query. You are trying to start or end a query using a \" +\n (\"document for which the field '\" + field + \"' (used as the \") +\n \"orderBy) does not exist.\");\n }\n }\n }\n return new Bound(components, before);\n };\n /**\n * Converts a list of field values to a Bound for the given query.\n */\n Query.prototype.boundFromFields = function (methodName, values, before) {\n // Use explicit order by's because it has to match the query the user made\n var orderBy = this._query.explicitOrderBy;\n if (values.length > orderBy.length) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Too many arguments provided to \" + methodName + \"(). \" +\n \"The number of arguments must be less than or equal to the \" +\n \"number of Query.orderBy() clauses\");\n }\n var components = [];\n for (var i = 0; i < values.length; i++) {\n var rawValue = values[i];\n var orderByComponent = orderBy[i];\n if (orderByComponent.field.isKeyField()) {\n if (typeof rawValue !== 'string') {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Invalid query. Expected a string for document ID in \" +\n (methodName + \"(), but got a \" + typeof rawValue));\n }\n if (rawValue.indexOf('/') !== -1) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Invalid query. Document ID '\" + rawValue + \"' contains a slash in \" +\n (methodName + \"()\"));\n }\n var key = new DocumentKey(this._query.path.child(rawValue));\n components.push(new RefValue(this.firestore._databaseId, key));\n }\n else {\n var wrapped = this.firestore._dataConverter.parseQueryValue(methodName, rawValue);\n components.push(wrapped);\n }\n }\n return new Bound(components, before);\n };\n Query.prototype.onSnapshot = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n validateBetweenNumberOfArgs('Query.onSnapshot', arguments, 1, 4);\n var options = {};\n var observer;\n var currArg = 0;\n if (typeof args[currArg] === 'object' &&\n !isPartialObserver(args[currArg])) {\n options = args[currArg];\n validateOptionNames('Query.onSnapshot', options, [\n 'includeQueryMetadataChanges',\n 'includeDocumentMetadataChanges'\n ]);\n validateNamedOptionalType('Query.onSnapshot', 'boolean', 'includeDocumentMetadataChanges', options.includeDocumentMetadataChanges);\n validateNamedOptionalType('Query.onSnapshot', 'boolean', 'includeQueryMetadataChanges', options.includeQueryMetadataChanges);\n currArg++;\n }\n if (isPartialObserver(args[currArg])) {\n observer = args[currArg];\n }\n else {\n validateArgType('Query.onSnapshot', 'function', currArg, args[currArg]);\n validateOptionalArgType('Query.onSnapshot', 'function', currArg + 1, args[currArg + 1]);\n validateOptionalArgType('Query.onSnapshot', 'function', currArg + 2, args[currArg + 2]);\n observer = {\n next: args[currArg],\n error: args[currArg + 1],\n complete: args[currArg + 2]\n };\n }\n return this.onSnapshotInternal(options, observer);\n };\n Query.prototype.onSnapshotInternal = function (options, observer) {\n var _this = this;\n var errHandler = function (err) {\n console.error('Uncaught Error in onSnapshot:', err);\n };\n if (observer.error) {\n errHandler = observer.error.bind(observer);\n }\n var asyncObserver = new AsyncObserver({\n next: function (result) {\n if (observer.next) {\n observer.next(new QuerySnapshot(_this.firestore, _this._query, result));\n }\n },\n error: errHandler\n });\n var firestoreClient = this.firestore.ensureClientConfigured();\n var internalListener = firestoreClient.listen(this._query, asyncObserver, options);\n return function () {\n asyncObserver.mute();\n firestoreClient.unlisten(internalListener);\n };\n };\n Query.prototype.get = function () {\n var _this = this;\n validateExactNumberOfArgs('Query.get', arguments, 0);\n return new Promise(function (resolve, reject) {\n var unlisten = _this.onSnapshotInternal({\n includeDocumentMetadataChanges: false,\n includeQueryMetadataChanges: true,\n waitForSyncWhenOnline: true\n }, {\n next: function (result) {\n // Remove query first before passing event to user to avoid\n // user actions affecting the now stale query.\n unlisten();\n resolve(result);\n },\n error: reject\n });\n });\n };\n Query.prototype.validateNewFilter = function (filter) {\n if (filter instanceof RelationFilter && filter.isInequality()) {\n var existingField = this._query.getInequalityFilterField();\n if (existingField !== null && !existingField.isEqual(filter.field)) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid query. All where filters with an inequality' +\n ' (<, <=, >, or >=) must be on the same field. But you have' +\n (\" inequality filters on '\" + existingField.toString() + \"'\") +\n (\" and '\" + filter.field.toString() + \"'\"));\n }\n var firstOrderByField = this._query.getFirstOrderByField();\n if (firstOrderByField !== null) {\n this.validateOrderByAndInequalityMatch(filter.field, firstOrderByField);\n }\n }\n };\n Query.prototype.validateNewOrderBy = function (orderBy) {\n if (this._query.getFirstOrderByField() === null) {\n // This is the first order by. It must match any inequality.\n var inequalityField = this._query.getInequalityFilterField();\n if (inequalityField !== null) {\n this.validateOrderByAndInequalityMatch(inequalityField, orderBy.field);\n }\n }\n };\n Query.prototype.validateOrderByAndInequalityMatch = function (inequality, orderBy) {\n if (!orderBy.isEqual(inequality)) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, \"Invalid query. You have a where filter with an inequality \" +\n (\"(<, <=, >, or >=) on field '\" + inequality.toString() + \"' \") +\n (\"and so you must also use '\" + inequality.toString() + \"' \") +\n \"as your first Query.orderBy(), but your first Query.orderBy() \" +\n (\"is on field '\" + orderBy.toString() + \"' instead.\"));\n }\n };\n return Query;\n}());\nexport { Query };\nvar QuerySnapshot = /** @class */ (function () {\n function QuerySnapshot(_firestore, _originalQuery, _snapshot) {\n this._firestore = _firestore;\n this._originalQuery = _originalQuery;\n this._snapshot = _snapshot;\n this._cachedChanges = null;\n this.metadata = new SnapshotMetadata(_snapshot.hasPendingWrites, _snapshot.fromCache);\n }\n Object.defineProperty(QuerySnapshot.prototype, \"docs\", {\n get: function () {\n var result = [];\n this.forEach(function (doc) { return result.push(doc); });\n return result;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuerySnapshot.prototype, \"empty\", {\n get: function () {\n return this._snapshot.docs.isEmpty();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuerySnapshot.prototype, \"size\", {\n get: function () {\n return this._snapshot.docs.size;\n },\n enumerable: true,\n configurable: true\n });\n QuerySnapshot.prototype.forEach = function (callback, thisArg) {\n var _this = this;\n validateBetweenNumberOfArgs('QuerySnapshot.forEach', arguments, 1, 2);\n validateArgType('QuerySnapshot.forEach', 'function', 1, callback);\n this._snapshot.docs.forEach(function (doc) {\n callback.call(thisArg, _this.convertToDocumentImpl(doc));\n });\n };\n Object.defineProperty(QuerySnapshot.prototype, \"query\", {\n get: function () {\n return new Query(this._originalQuery, this._firestore);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(QuerySnapshot.prototype, \"docChanges\", {\n get: function () {\n if (!this._cachedChanges) {\n this._cachedChanges = changesFromSnapshot(this._firestore, this._snapshot);\n }\n return this._cachedChanges;\n },\n enumerable: true,\n configurable: true\n });\n /** Check the equality. The call can be very expensive. */\n QuerySnapshot.prototype.isEqual = function (other) {\n if (!(other instanceof QuerySnapshot)) {\n throw invalidClassError('isEqual', 'QuerySnapshot', 1, other);\n }\n return (this._firestore === other._firestore &&\n this._originalQuery.isEqual(other._originalQuery) &&\n this._snapshot.isEqual(other._snapshot));\n };\n QuerySnapshot.prototype.convertToDocumentImpl = function (doc) {\n return new QueryDocumentSnapshot(this._firestore, doc.key, doc, this.metadata.fromCache);\n };\n return QuerySnapshot;\n}());\nexport { QuerySnapshot };\nvar CollectionReference = /** @class */ (function (_super) {\n __extends(CollectionReference, _super);\n function CollectionReference(path, firestore) {\n var _this = _super.call(this, InternalQuery.atPath(path), firestore) || this;\n if (path.length % 2 !== 1) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Invalid collection reference. Collection ' +\n 'references must have an odd number of segments, but ' +\n (path.canonicalString() + \" has \" + path.length));\n }\n return _this;\n }\n Object.defineProperty(CollectionReference.prototype, \"id\", {\n get: function () {\n return this._query.path.lastSegment();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CollectionReference.prototype, \"parent\", {\n get: function () {\n var parentPath = this._query.path.popLast();\n if (parentPath.isEmpty()) {\n return null;\n }\n else {\n return new DocumentReference(new DocumentKey(parentPath), this.firestore);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CollectionReference.prototype, \"path\", {\n get: function () {\n return this._query.path.canonicalString();\n },\n enumerable: true,\n configurable: true\n });\n CollectionReference.prototype.doc = function (pathString) {\n validateBetweenNumberOfArgs('CollectionReference.doc', arguments, 0, 1);\n // We allow omission of 'pathString' but explicitly prohibit passing in both\n // 'undefined' and 'null'.\n if (arguments.length === 0) {\n pathString = AutoId.newId();\n }\n validateArgType('CollectionReference.doc', 'string', 1, pathString);\n if (pathString === '') {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Document path must be a non-empty string');\n }\n var path = ResourcePath.fromString(pathString);\n return DocumentReference.forPath(this._query.path.child(path), this.firestore);\n };\n CollectionReference.prototype.add = function (value) {\n validateExactNumberOfArgs('CollectionReference.add', arguments, 1);\n validateArgType('CollectionReference.add', 'object', 1, value);\n var docRef = this.doc();\n return docRef.set(value).then(function () { return docRef; });\n };\n return CollectionReference;\n}(Query));\nexport { CollectionReference };\nfunction validateSetOptions(methodName, options) {\n if (options === undefined) {\n return {\n merge: false\n };\n }\n validateOptionNames(methodName, options, ['merge']);\n validateNamedOptionalType(methodName, 'boolean', 'merge', options.merge);\n return options;\n}\nfunction validateSnapshotOptions(methodName, options) {\n if (options === undefined) {\n return {};\n }\n validateOptionNames(methodName, options, ['serverTimestamps']);\n validateNamedOptionalPropertyEquals(methodName, 'options', 'serverTimestamps', options.serverTimestamps, ['estimate', 'previous', 'none']);\n return options;\n}\nfunction validateReference(methodName, documentRef, firestore) {\n if (!(documentRef instanceof DocumentReference)) {\n throw invalidClassError(methodName, 'DocumentReference', 1, documentRef);\n }\n else if (documentRef.firestore !== firestore) {\n throw new FirestoreError(Code.INVALID_ARGUMENT, 'Provided document reference is from a different Firestore instance.');\n }\n else {\n return documentRef;\n }\n}\n/**\n * Calculates the array of firestore.DocumentChange's for a given ViewSnapshot.\n *\n * Exported for testing.\n */\nexport function changesFromSnapshot(firestore, snapshot) {\n if (snapshot.oldDocs.isEmpty()) {\n // Special case the first snapshot because index calculation is easy and\n // fast\n var lastDoc_1;\n var index_1 = 0;\n return snapshot.docChanges.map(function (change) {\n var doc = new QueryDocumentSnapshot(firestore, change.doc.key, change.doc, snapshot.fromCache);\n assert(change.type === ChangeType.Added, 'Invalid event type for first snapshot');\n assert(!lastDoc_1 || snapshot.query.docComparator(lastDoc_1, change.doc) < 0, 'Got added events in wrong order');\n lastDoc_1 = change.doc;\n return {\n type: 'added',\n doc: doc,\n oldIndex: -1,\n newIndex: index_1++\n };\n });\n }\n else {\n // A DocumentSet that is updated incrementally as changes are applied to use\n // to lookup the index of a document.\n var indexTracker_1 = snapshot.oldDocs;\n return snapshot.docChanges.map(function (change) {\n var doc = new QueryDocumentSnapshot(firestore, change.doc.key, change.doc, snapshot.fromCache);\n var oldIndex = -1;\n var newIndex = -1;\n if (change.type !== ChangeType.Added) {\n oldIndex = indexTracker_1.indexOf(change.doc.key);\n assert(oldIndex >= 0, 'Index for document not found');\n indexTracker_1 = indexTracker_1.delete(change.doc.key);\n }\n if (change.type !== ChangeType.Removed) {\n indexTracker_1 = indexTracker_1.add(change.doc);\n newIndex = indexTracker_1.indexOf(change.doc.key);\n }\n return { type: resultChangeType(change.type), doc: doc, oldIndex: oldIndex, newIndex: newIndex };\n });\n }\n}\nfunction resultChangeType(type) {\n switch (type) {\n case ChangeType.Added:\n return 'added';\n case ChangeType.Modified:\n case ChangeType.Metadata:\n return 'modified';\n case ChangeType.Removed:\n return 'removed';\n default:\n return fail('Unknown change type: ' + type);\n }\n}\n// Export the classes with a private constructor (it will fail if invoked\n// at runtime). Note that this still allows instanceof checks.\n// We're treating the variables as class names, so disable checking for lower\n// case variable names.\n// tslint:disable:variable-name\nexport var PublicFirestore = makeConstructorPrivate(Firestore, 'Use firebase.firestore() instead.');\nexport var PublicTransaction = makeConstructorPrivate(Transaction, 'Use firebase.firestore().runTransaction() instead.');\nexport var PublicWriteBatch = makeConstructorPrivate(WriteBatch, 'Use firebase.firestore().batch() instead.');\nexport var PublicDocumentReference = makeConstructorPrivate(DocumentReference, 'Use firebase.firestore().doc() instead.');\nexport var PublicDocumentSnapshot = makeConstructorPrivate(DocumentSnapshot);\nexport var PublicQueryDocumentSnapshot = makeConstructorPrivate(QueryDocumentSnapshot);\nexport var PublicQuery = makeConstructorPrivate(Query);\nexport var PublicQuerySnapshot = makeConstructorPrivate(QuerySnapshot);\nexport var PublicCollectionReference = makeConstructorPrivate(CollectionReference, 'Use firebase.firestore().collection() instead.');\n// tslint:enable:variable-name\n\n//# sourceMappingURL=database.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { PublicBlob } from '../api/blob';\nimport { Firestore, PublicCollectionReference, PublicDocumentReference, PublicDocumentSnapshot, PublicFirestore, PublicQuery, PublicQueryDocumentSnapshot, PublicQuerySnapshot, PublicTransaction, PublicWriteBatch } from '../api/database';\nimport { FieldPath } from '../api/field_path';\nimport { PublicFieldValue } from '../api/field_value';\nimport { GeoPoint } from '../api/geo_point';\nimport { shallowCopy } from '../util/obj';\nvar firestoreNamespace = {\n Firestore: PublicFirestore,\n GeoPoint: GeoPoint,\n Blob: PublicBlob,\n Transaction: PublicTransaction,\n WriteBatch: PublicWriteBatch,\n DocumentReference: PublicDocumentReference,\n DocumentSnapshot: PublicDocumentSnapshot,\n Query: PublicQuery,\n QueryDocumentSnapshot: PublicQueryDocumentSnapshot,\n QuerySnapshot: PublicQuerySnapshot,\n CollectionReference: PublicCollectionReference,\n FieldPath: FieldPath,\n FieldValue: PublicFieldValue,\n setLogLevel: Firestore.setLogLevel\n};\n/**\n * Configures Firestore as part of the Firebase SDK by calling registerService.\n */\nexport function configureForFirebase(firebase) {\n firebase.INTERNAL.registerService('firestore', function (app) { return new Firestore(app); }, shallowCopy(firestoreNamespace));\n}\n/**\n * Exports the Firestore namespace into the provided `exportObject` object under\n * the key 'firestore'. This is used for wrapped binary that exposes Firestore\n * as a goog module.\n */\nexport function configureForStandalone(exportObject) {\n var copiedNamespace = shallowCopy(firestoreNamespace);\n // Unlike the use with Firebase, the standalone allows the use of the\n // constructor, so export it's internal class\n copiedNamespace['Firestore'] = Firestore;\n exportObject['firestore'] = copiedNamespace;\n}\n\n//# sourceMappingURL=config.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport firebase from '@firebase/app';\nimport './src/platform_browser/browser_init';\nimport { configureForFirebase } from './src/platform/config';\nexport function registerFirestore(instance) {\n configureForFirebase(instance);\n}\nregisterFirestore(firebase);\n\n//# sourceMappingURL=index.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Constants used in the Firebase Storage library.\n */\n/**\n * Domain and scheme for API calls.\n */\nexport var domainBase = 'https://firebasestorage.googleapis.com';\n/**\n * Domain and scheme for object downloads.\n */\nexport var downloadBase = 'https://firebasestorage.googleapis.com';\n/**\n * Base URL for non-upload calls to the API.\n */\nexport var apiBaseUrl = '/v0';\n/**\n * Base URL for upload calls to the API.\n */\nexport var apiUploadBaseUrl = '/v0';\nexport function setDomainBase(domainBase) {\n domainBase = domainBase;\n}\nexport var configOption = 'storageBucket';\n/**\n * 1 minute\n */\nexport var shortMaxOperationRetryTime = 1 * 60 * 1000;\n/**\n * 2 minutes\n */\nexport var defaultMaxOperationRetryTime = 2 * 60 * 1000;\n/**\n * 10 minutes\n */\nexport var defaultMaxUploadRetryTime = 10 * 60 * 100;\n/**\n * This is the value of Number.MIN_SAFE_INTEGER, which is not well supported\n * enough for us to use it directly.\n */\nexport var minSafeInteger = -9007199254740991;\n\n//# sourceMappingURL=constants.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { configOption } from './constants';\nvar FirebaseStorageError = /** @class */ (function () {\n function FirebaseStorageError(code, message) {\n this.code_ = prependCode(code);\n this.message_ = 'Firebase Storage: ' + message;\n this.serverResponse_ = null;\n this.name_ = 'FirebaseError';\n }\n FirebaseStorageError.prototype.codeProp = function () {\n return this.code;\n };\n FirebaseStorageError.prototype.codeEquals = function (code) {\n return prependCode(code) === this.codeProp();\n };\n FirebaseStorageError.prototype.serverResponseProp = function () {\n return this.serverResponse_;\n };\n FirebaseStorageError.prototype.setServerResponseProp = function (serverResponse) {\n this.serverResponse_ = serverResponse;\n };\n Object.defineProperty(FirebaseStorageError.prototype, \"name\", {\n get: function () {\n return this.name_;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FirebaseStorageError.prototype, \"code\", {\n get: function () {\n return this.code_;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FirebaseStorageError.prototype, \"message\", {\n get: function () {\n return this.message_;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FirebaseStorageError.prototype, \"serverResponse\", {\n get: function () {\n return this.serverResponse_;\n },\n enumerable: true,\n configurable: true\n });\n return FirebaseStorageError;\n}());\nexport { FirebaseStorageError };\nexport var errors = {};\nexport var Code = {\n // Shared between all platforms\n UNKNOWN: 'unknown',\n OBJECT_NOT_FOUND: 'object-not-found',\n BUCKET_NOT_FOUND: 'bucket-not-found',\n PROJECT_NOT_FOUND: 'project-not-found',\n QUOTA_EXCEEDED: 'quota-exceeded',\n UNAUTHENTICATED: 'unauthenticated',\n UNAUTHORIZED: 'unauthorized',\n RETRY_LIMIT_EXCEEDED: 'retry-limit-exceeded',\n INVALID_CHECKSUM: 'invalid-checksum',\n CANCELED: 'canceled',\n // JS specific\n INVALID_EVENT_NAME: 'invalid-event-name',\n INVALID_URL: 'invalid-url',\n INVALID_DEFAULT_BUCKET: 'invalid-default-bucket',\n NO_DEFAULT_BUCKET: 'no-default-bucket',\n CANNOT_SLICE_BLOB: 'cannot-slice-blob',\n SERVER_FILE_WRONG_SIZE: 'server-file-wrong-size',\n NO_DOWNLOAD_URL: 'no-download-url',\n INVALID_ARGUMENT: 'invalid-argument',\n INVALID_ARGUMENT_COUNT: 'invalid-argument-count',\n APP_DELETED: 'app-deleted',\n INVALID_ROOT_OPERATION: 'invalid-root-operation',\n INVALID_FORMAT: 'invalid-format',\n INTERNAL_ERROR: 'internal-error'\n};\nexport function prependCode(code) {\n return 'storage/' + code;\n}\nexport function unknown() {\n var message = 'An unknown error occurred, please check the error payload for ' +\n 'server response.';\n return new FirebaseStorageError(Code.UNKNOWN, message);\n}\nexport function objectNotFound(path) {\n return new FirebaseStorageError(Code.OBJECT_NOT_FOUND, \"Object '\" + path + \"' does not exist.\");\n}\nexport function bucketNotFound(bucket) {\n return new FirebaseStorageError(Code.BUCKET_NOT_FOUND, \"Bucket '\" + bucket + \"' does not exist.\");\n}\nexport function projectNotFound(project) {\n return new FirebaseStorageError(Code.PROJECT_NOT_FOUND, \"Project '\" + project + \"' does not exist.\");\n}\nexport function quotaExceeded(bucket) {\n return new FirebaseStorageError(Code.QUOTA_EXCEEDED, \"Quota for bucket '\" +\n bucket +\n \"' exceeded, please view quota on \" +\n 'https://firebase.google.com/pricing/.');\n}\nexport function unauthenticated() {\n var message = 'User is not authenticated, please authenticate using Firebase ' +\n 'Authentication and try again.';\n return new FirebaseStorageError(Code.UNAUTHENTICATED, message);\n}\nexport function unauthorized(path) {\n return new FirebaseStorageError(Code.UNAUTHORIZED, \"User does not have permission to access '\" + path + \"'.\");\n}\nexport function retryLimitExceeded() {\n return new FirebaseStorageError(Code.RETRY_LIMIT_EXCEEDED, 'Max retry time for operation exceeded, please try again.');\n}\nexport function invalidChecksum(path, checksum, calculated) {\n return new FirebaseStorageError(Code.INVALID_CHECKSUM, \"Uploaded/downloaded object '\" +\n path +\n \"' has checksum '\" +\n checksum +\n \"' which does not match '\" +\n calculated +\n \"'. Please retry the upload/download.\");\n}\nexport function canceled() {\n return new FirebaseStorageError(Code.CANCELED, 'User canceled the upload/download.');\n}\nexport function invalidEventName(name) {\n return new FirebaseStorageError(Code.INVALID_EVENT_NAME, \"Invalid event name '\" + name + \"'.\");\n}\nexport function invalidUrl(url) {\n return new FirebaseStorageError(Code.INVALID_URL, \"Invalid URL '\" + url + \"'.\");\n}\nexport function invalidDefaultBucket(bucket) {\n return new FirebaseStorageError(Code.INVALID_DEFAULT_BUCKET, \"Invalid default bucket '\" + bucket + \"'.\");\n}\nexport function noDefaultBucket() {\n return new FirebaseStorageError(Code.NO_DEFAULT_BUCKET, 'No default bucket ' +\n \"found. Did you set the '\" +\n configOption +\n \"' property when initializing the app?\");\n}\nexport function cannotSliceBlob() {\n return new FirebaseStorageError(Code.CANNOT_SLICE_BLOB, 'Cannot slice blob for upload. Please retry the upload.');\n}\nexport function serverFileWrongSize() {\n return new FirebaseStorageError(Code.SERVER_FILE_WRONG_SIZE, 'Server recorded incorrect upload file size, please retry the upload.');\n}\nexport function noDownloadURL() {\n return new FirebaseStorageError(Code.NO_DOWNLOAD_URL, 'The given file does not have any download URLs.');\n}\nexport function invalidArgument(index, fnName, message) {\n return new FirebaseStorageError(Code.INVALID_ARGUMENT, 'Invalid argument in `' + fnName + '` at index ' + index + ': ' + message);\n}\nexport function invalidArgumentCount(argMin, argMax, fnName, real) {\n var countPart;\n var plural;\n if (argMin === argMax) {\n countPart = argMin;\n plural = argMin === 1 ? 'argument' : 'arguments';\n }\n else {\n countPart = 'between ' + argMin + ' and ' + argMax;\n plural = 'arguments';\n }\n return new FirebaseStorageError(Code.INVALID_ARGUMENT_COUNT, 'Invalid argument count in `' +\n fnName +\n '`: Expected ' +\n countPart +\n ' ' +\n plural +\n ', received ' +\n real +\n '.');\n}\nexport function appDeleted() {\n return new FirebaseStorageError(Code.APP_DELETED, 'The Firebase app was deleted.');\n}\n/**\n * @param name The name of the operation that was invalid.\n */\nexport function invalidRootOperation(name) {\n return new FirebaseStorageError(Code.INVALID_ROOT_OPERATION, \"The operation '\" +\n name +\n \"' cannot be performed on a root reference, create a non-root \" +\n \"reference using child, such as .child('file.png').\");\n}\n/**\n * @param format The format that was not valid.\n * @param message A message describing the format violation.\n */\nexport function invalidFormat(format, message) {\n return new FirebaseStorageError(Code.INVALID_FORMAT, \"String does not match format '\" + format + \"': \" + message);\n}\n/**\n * @param message A message describing the internal error.\n */\nexport function internalError(message) {\n throw new FirebaseStorageError(Code.INTERNAL_ERROR, 'Internal error: ' + message);\n}\n\n//# sourceMappingURL=error.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as errorsExports from './error';\nexport var StringFormat = {\n RAW: 'raw',\n BASE64: 'base64',\n BASE64URL: 'base64url',\n DATA_URL: 'data_url'\n};\nexport function formatValidator(stringFormat) {\n switch (stringFormat) {\n case StringFormat.RAW:\n case StringFormat.BASE64:\n case StringFormat.BASE64URL:\n case StringFormat.DATA_URL:\n return;\n default:\n throw 'Expected one of the event types: [' +\n StringFormat.RAW +\n ', ' +\n StringFormat.BASE64 +\n ', ' +\n StringFormat.BASE64URL +\n ', ' +\n StringFormat.DATA_URL +\n '].';\n }\n}\n/**\n * @struct\n */\nvar StringData = /** @class */ (function () {\n function StringData(data, opt_contentType) {\n this.data = data;\n this.contentType = opt_contentType || null;\n }\n return StringData;\n}());\nexport { StringData };\nexport function dataFromString(format, string) {\n switch (format) {\n case StringFormat.RAW:\n return new StringData(utf8Bytes_(string));\n case StringFormat.BASE64:\n case StringFormat.BASE64URL:\n return new StringData(base64Bytes_(format, string));\n case StringFormat.DATA_URL:\n return new StringData(dataURLBytes_(string), dataURLContentType_(string));\n }\n // assert(false);\n throw errorsExports.unknown();\n}\nexport function utf8Bytes_(string) {\n var b = [];\n for (var i = 0; i < string.length; i++) {\n var c = string.charCodeAt(i);\n if (c <= 127) {\n b.push(c);\n }\n else {\n if (c <= 2047) {\n b.push(192 | (c >> 6), 128 | (c & 63));\n }\n else {\n if ((c & 64512) == 55296) {\n // The start of a surrogate pair.\n var valid = i < string.length - 1 &&\n (string.charCodeAt(i + 1) & 64512) == 56320;\n if (!valid) {\n // The second surrogate wasn't there.\n b.push(239, 191, 189);\n }\n else {\n var hi = c;\n var lo = string.charCodeAt(++i);\n c = 65536 | ((hi & 1023) << 10) | (lo & 1023);\n b.push(240 | (c >> 18), 128 | ((c >> 12) & 63), 128 | ((c >> 6) & 63), 128 | (c & 63));\n }\n }\n else {\n if ((c & 64512) == 56320) {\n // Invalid low surrogate.\n b.push(239, 191, 189);\n }\n else {\n b.push(224 | (c >> 12), 128 | ((c >> 6) & 63), 128 | (c & 63));\n }\n }\n }\n }\n }\n return new Uint8Array(b);\n}\nexport function percentEncodedBytes_(string) {\n var decoded;\n try {\n decoded = decodeURIComponent(string);\n }\n catch (e) {\n throw errorsExports.invalidFormat(StringFormat.DATA_URL, 'Malformed data URL.');\n }\n return utf8Bytes_(decoded);\n}\nexport function base64Bytes_(format, string) {\n switch (format) {\n case StringFormat.BASE64: {\n var hasMinus = string.indexOf('-') !== -1;\n var hasUnder = string.indexOf('_') !== -1;\n if (hasMinus || hasUnder) {\n var invalidChar = hasMinus ? '-' : '_';\n throw errorsExports.invalidFormat(format, \"Invalid character '\" +\n invalidChar +\n \"' found: is it base64url encoded?\");\n }\n break;\n }\n case StringFormat.BASE64URL: {\n var hasPlus = string.indexOf('+') !== -1;\n var hasSlash = string.indexOf('/') !== -1;\n if (hasPlus || hasSlash) {\n var invalidChar = hasPlus ? '+' : '/';\n throw errorsExports.invalidFormat(format, \"Invalid character '\" + invalidChar + \"' found: is it base64 encoded?\");\n }\n string = string.replace(/-/g, '+').replace(/_/g, '/');\n break;\n }\n }\n var bytes;\n try {\n bytes = atob(string);\n }\n catch (e) {\n throw errorsExports.invalidFormat(format, 'Invalid character found');\n }\n var array = new Uint8Array(bytes.length);\n for (var i = 0; i < bytes.length; i++) {\n array[i] = bytes.charCodeAt(i);\n }\n return array;\n}\n/**\n * @struct\n */\nvar DataURLParts = /** @class */ (function () {\n function DataURLParts(dataURL) {\n this.base64 = false;\n this.contentType = null;\n var matches = dataURL.match(/^data:([^,]+)?,/);\n if (matches === null) {\n throw errorsExports.invalidFormat(StringFormat.DATA_URL, \"Must be formatted 'data:[][;base64],\");\n }\n var middle = matches[1] || null;\n if (middle != null) {\n this.base64 = endsWith(middle, ';base64');\n this.contentType = this.base64\n ? middle.substring(0, middle.length - ';base64'.length)\n : middle;\n }\n this.rest = dataURL.substring(dataURL.indexOf(',') + 1);\n }\n return DataURLParts;\n}());\nexport function dataURLBytes_(string) {\n var parts = new DataURLParts(string);\n if (parts.base64) {\n return base64Bytes_(StringFormat.BASE64, parts.rest);\n }\n else {\n return percentEncodedBytes_(parts.rest);\n }\n}\nexport function dataURLContentType_(string) {\n var parts = new DataURLParts(string);\n return parts.contentType;\n}\nfunction endsWith(s, end) {\n var longEnough = s.length >= end.length;\n if (!longEnough) {\n return false;\n }\n return s.substring(s.length - end.length) === end;\n}\n\n//# sourceMappingURL=string.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var TaskEvent = {\n /** Triggered whenever the task changes or progress is updated. */\n STATE_CHANGED: 'state_changed'\n};\nexport var InternalTaskState = {\n RUNNING: 'running',\n PAUSING: 'pausing',\n PAUSED: 'paused',\n SUCCESS: 'success',\n CANCELING: 'canceling',\n CANCELED: 'canceled',\n ERROR: 'error'\n};\nexport var TaskState = {\n /** The task is currently transferring data. */\n RUNNING: 'running',\n /** The task was paused by the user. */\n PAUSED: 'paused',\n /** The task completed successfully. */\n SUCCESS: 'success',\n /** The task was canceled. */\n CANCELED: 'canceled',\n /** The task failed with an error. */\n ERROR: 'error'\n};\nexport function taskStateFromInternalTaskState(state) {\n switch (state) {\n case InternalTaskState.RUNNING:\n case InternalTaskState.PAUSING:\n case InternalTaskState.CANCELING:\n return TaskState.RUNNING;\n case InternalTaskState.PAUSED:\n return TaskState.PAUSED;\n case InternalTaskState.SUCCESS:\n return TaskState.SUCCESS;\n case InternalTaskState.CANCELED:\n return TaskState.CANCELED;\n case InternalTaskState.ERROR:\n return TaskState.ERROR;\n default:\n // TODO(andysoto): assert(false);\n return TaskState.ERROR;\n }\n}\n\n//# sourceMappingURL=taskenums.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @enum{number}\n */\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[ErrorCode[\"NO_ERROR\"] = 0] = \"NO_ERROR\";\n ErrorCode[ErrorCode[\"NETWORK_ERROR\"] = 1] = \"NETWORK_ERROR\";\n ErrorCode[ErrorCode[\"ABORT\"] = 2] = \"ABORT\";\n})(ErrorCode || (ErrorCode = {}));\n\n//# sourceMappingURL=xhrio.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Contains methods for working with objects.\n */\nexport function contains(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\nexport function forEach(obj, f) {\n for (var key in obj) {\n if (contains(obj, key)) {\n f(key, obj[key]);\n }\n }\n}\nexport function clone(obj) {\n if (obj == null) {\n return {};\n }\n var c = {};\n forEach(obj, function (key, val) {\n c[key] = val;\n });\n return c;\n}\n\n//# sourceMappingURL=object.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Implements the promise abstraction interface for external\n * (public SDK) packaging, which just passes through to the firebase-app impl.\n */\n/**\n * @template T\n * @param {function((function(T): void),\n * (function(!Error): void))} resolver\n */\nexport function make(resolver) {\n return new Promise(resolver);\n}\n/**\n * @template T\n */\nexport function resolve(value) {\n return Promise.resolve(value);\n}\nexport function reject(error) {\n return Promise.reject(error);\n}\n\n//# sourceMappingURL=promise_external.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @return False if the object is undefined or null, true otherwise.\n */\nexport function isDef(p) {\n return p != null;\n}\nexport function isJustDef(p) {\n return p !== void 0;\n}\nexport function isFunction(p) {\n return typeof p === 'function';\n}\nexport function isObject(p) {\n return typeof p === 'object';\n}\nexport function isNonNullObject(p) {\n return isObject(p) && p !== null;\n}\nexport function isNonArrayObject(p) {\n return isObject(p) && !Array.isArray(p);\n}\nexport function isString(p) {\n return typeof p === 'string' || p instanceof String;\n}\nexport function isNumber(p) {\n return typeof p === 'number' || p instanceof Number;\n}\nexport function isNativeBlob(p) {\n return isNativeBlobDefined() && p instanceof Blob;\n}\nexport function isNativeBlobDefined() {\n return typeof Blob !== 'undefined';\n}\n\n//# sourceMappingURL=type.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as errorsExports from './error';\nimport * as object from './object';\nimport * as promiseimpl from './promise_external';\nimport * as type from './type';\nimport * as XhrIoExports from './xhrio';\n/**\n * We use this instead of goog.net.XhrIo because goog.net.XhrIo is hyuuuuge and\n * doesn't work in React Native on Android.\n */\nvar NetworkXhrIo = /** @class */ (function () {\n function NetworkXhrIo() {\n var _this = this;\n this.sent_ = false;\n this.xhr_ = new XMLHttpRequest();\n this.errorCode_ = XhrIoExports.ErrorCode.NO_ERROR;\n this.sendPromise_ = promiseimpl.make(function (resolve, reject) {\n _this.xhr_.addEventListener('abort', function (event) {\n _this.errorCode_ = XhrIoExports.ErrorCode.ABORT;\n resolve(_this);\n });\n _this.xhr_.addEventListener('error', function (event) {\n _this.errorCode_ = XhrIoExports.ErrorCode.NETWORK_ERROR;\n resolve(_this);\n });\n _this.xhr_.addEventListener('load', function (event) {\n resolve(_this);\n });\n });\n }\n /**\n * @override\n */\n NetworkXhrIo.prototype.send = function (url, method, opt_body, opt_headers) {\n var _this = this;\n if (this.sent_) {\n throw errorsExports.internalError('cannot .send() more than once');\n }\n this.sent_ = true;\n this.xhr_.open(method, url, true);\n if (type.isDef(opt_headers)) {\n var headers = opt_headers;\n object.forEach(headers, function (key, val) {\n _this.xhr_.setRequestHeader(key, val.toString());\n });\n }\n if (type.isDef(opt_body)) {\n this.xhr_.send(opt_body);\n }\n else {\n this.xhr_.send();\n }\n return this.sendPromise_;\n };\n /**\n * @override\n */\n NetworkXhrIo.prototype.getErrorCode = function () {\n if (!this.sent_) {\n throw errorsExports.internalError('cannot .getErrorCode() before sending');\n }\n return this.errorCode_;\n };\n /**\n * @override\n */\n NetworkXhrIo.prototype.getStatus = function () {\n if (!this.sent_) {\n throw errorsExports.internalError('cannot .getStatus() before sending');\n }\n try {\n return this.xhr_.status;\n }\n catch (e) {\n return -1;\n }\n };\n /**\n * @override\n */\n NetworkXhrIo.prototype.getResponseText = function () {\n if (!this.sent_) {\n throw errorsExports.internalError('cannot .getResponseText() before sending');\n }\n return this.xhr_.responseText;\n };\n /**\n * Aborts the request.\n * @override\n */\n NetworkXhrIo.prototype.abort = function () {\n this.xhr_.abort();\n };\n /**\n * @override\n */\n NetworkXhrIo.prototype.getResponseHeader = function (header) {\n return this.xhr_.getResponseHeader(header);\n };\n /**\n * @override\n */\n NetworkXhrIo.prototype.addUploadProgressListener = function (listener) {\n if (type.isDef(this.xhr_.upload)) {\n this.xhr_.upload.addEventListener('progress', listener);\n }\n };\n /**\n * @override\n */\n NetworkXhrIo.prototype.removeUploadProgressListener = function (listener) {\n if (type.isDef(this.xhr_.upload)) {\n this.xhr_.upload.removeEventListener('progress', listener);\n }\n };\n return NetworkXhrIo;\n}());\nexport { NetworkXhrIo };\n\n//# sourceMappingURL=xhrio_network.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NetworkXhrIo } from './xhrio_network';\n/**\n * Factory-like class for creating XhrIo instances.\n */\nvar XhrIoPool = /** @class */ (function () {\n function XhrIoPool() {\n }\n XhrIoPool.prototype.createXhrIo = function () {\n return new NetworkXhrIo();\n };\n return XhrIoPool;\n}());\nexport { XhrIoPool };\n\n//# sourceMappingURL=xhriopool.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as type from './type';\n/**\n * Returns the Object resulting from parsing the given JSON, or null if the\n * given string does not represent a JSON object.\n */\nexport function jsonObjectOrNull(s) {\n var obj;\n try {\n obj = JSON.parse(s);\n }\n catch (e) {\n return null;\n }\n if (type.isNonArrayObject(obj)) {\n return obj;\n }\n else {\n return null;\n }\n}\n\n//# sourceMappingURL=json.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Functionality related to the parsing/composition of bucket/\n * object location.\n */\nimport * as errorsExports from './error';\n/**\n * @struct\n */\nvar Location = /** @class */ (function () {\n function Location(bucket, path) {\n this.bucket = bucket;\n this.path_ = path;\n }\n Object.defineProperty(Location.prototype, \"path\", {\n get: function () {\n return this.path_;\n },\n enumerable: true,\n configurable: true\n });\n Location.prototype.fullServerUrl = function () {\n var encode = encodeURIComponent;\n return '/b/' + encode(this.bucket) + '/o/' + encode(this.path);\n };\n Location.prototype.bucketOnlyServerUrl = function () {\n var encode = encodeURIComponent;\n return '/b/' + encode(this.bucket) + '/o';\n };\n Location.makeFromBucketSpec = function (bucketString) {\n var bucketLocation;\n try {\n bucketLocation = Location.makeFromUrl(bucketString);\n }\n catch (e) {\n // Not valid URL, use as-is. This lets you put bare bucket names in\n // config.\n return new Location(bucketString, '');\n }\n if (bucketLocation.path === '') {\n return bucketLocation;\n }\n else {\n throw errorsExports.invalidDefaultBucket(bucketString);\n }\n };\n Location.makeFromUrl = function (url) {\n var location = null;\n var bucketDomain = '([A-Za-z0-9.\\\\-]+)';\n function gsModify(loc) {\n if (loc.path.charAt(loc.path.length - 1) === '/') {\n loc.path_ = loc.path_.slice(0, -1);\n }\n }\n var gsPath = '(/(.*))?$';\n var path = '(/([^?#]*).*)?$';\n var gsRegex = new RegExp('^gs://' + bucketDomain + gsPath, 'i');\n var gsIndices = { bucket: 1, path: 3 };\n function httpModify(loc) {\n loc.path_ = decodeURIComponent(loc.path);\n }\n var version = 'v[A-Za-z0-9_]+';\n var httpRegex = new RegExp('^https?://firebasestorage\\\\.googleapis\\\\.com/' +\n version +\n '/b/' +\n bucketDomain +\n '/o' +\n path, 'i');\n var httpIndices = { bucket: 1, path: 3 };\n var groups = [\n { regex: gsRegex, indices: gsIndices, postModify: gsModify },\n { regex: httpRegex, indices: httpIndices, postModify: httpModify }\n ];\n for (var i = 0; i < groups.length; i++) {\n var group = groups[i];\n var captures = group.regex.exec(url);\n if (captures) {\n var bucketValue = captures[group.indices.bucket];\n var pathValue = captures[group.indices.path];\n if (!pathValue) {\n pathValue = '';\n }\n location = new Location(bucketValue, pathValue);\n group.postModify(location);\n break;\n }\n }\n if (location == null) {\n throw errorsExports.invalidUrl(url);\n }\n return location;\n };\n return Location;\n}());\nexport { Location };\n\n//# sourceMappingURL=location.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Contains helper methods for manipulating paths.\n */\n/**\n * @return Null if the path is already at the root.\n */\nexport function parent(path) {\n if (path.length == 0) {\n return null;\n }\n var index = path.lastIndexOf('/');\n if (index === -1) {\n return '';\n }\n var newPath = path.slice(0, index);\n return newPath;\n}\nexport function child(path, childPath) {\n var canonicalChildPath = childPath\n .split('/')\n .filter(function (component) {\n return component.length > 0;\n })\n .join('/');\n if (path.length === 0) {\n return canonicalChildPath;\n }\n else {\n return path + '/' + canonicalChildPath;\n }\n}\n/**\n * Returns the last component of a path.\n * '/foo/bar' -> 'bar'\n * '/foo/bar/baz/' -> 'baz/'\n * '/a' -> 'a'\n */\nexport function lastComponent(path) {\n var index = path.lastIndexOf('/', path.length - 2);\n if (index === -1) {\n return path;\n }\n else {\n return path.slice(index + 1);\n }\n}\n\n//# sourceMappingURL=path.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Functions to create and manipulate URLs for the server API.\n */\nimport * as constants from './constants';\nimport * as object from './object';\nexport function makeNormalUrl(urlPart) {\n return constants.domainBase + constants.apiBaseUrl + urlPart;\n}\nexport function makeDownloadUrl(urlPart) {\n return constants.downloadBase + constants.apiBaseUrl + urlPart;\n}\nexport function makeUploadUrl(urlPart) {\n return constants.domainBase + constants.apiUploadBaseUrl + urlPart;\n}\nexport function makeQueryString(params) {\n var encode = encodeURIComponent;\n var queryPart = '?';\n object.forEach(params, function (key, val) {\n var nextPart = encode(key) + '=' + encode(val);\n queryPart = queryPart + nextPart + '&';\n });\n // Chop off the extra '&' or '?' on the end\n queryPart = queryPart.slice(0, -1);\n return queryPart;\n}\n\n//# sourceMappingURL=url.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as json from './json';\nimport { Location } from './location';\nimport * as path from './path';\nimport * as type from './type';\nimport * as UrlUtils from './url';\nexport function noXform_(metadata, value) {\n return value;\n}\n/**\n * @struct\n */\nvar Mapping = /** @class */ (function () {\n function Mapping(server, opt_local, opt_writable, opt_xform) {\n this.server = server;\n this.local = opt_local || server;\n this.writable = !!opt_writable;\n this.xform = opt_xform || noXform_;\n }\n return Mapping;\n}());\nexport { Mapping };\nvar mappings_ = null;\nexport function xformPath(fullPath) {\n var valid = type.isString(fullPath);\n if (!valid || fullPath.length < 2) {\n return fullPath;\n }\n else {\n fullPath = fullPath;\n return path.lastComponent(fullPath);\n }\n}\nexport function getMappings() {\n if (mappings_) {\n return mappings_;\n }\n var mappings = [];\n mappings.push(new Mapping('bucket'));\n mappings.push(new Mapping('generation'));\n mappings.push(new Mapping('metageneration'));\n mappings.push(new Mapping('name', 'fullPath', true));\n function mappingsXformPath(metadata, fullPath) {\n return xformPath(fullPath);\n }\n var nameMapping = new Mapping('name');\n nameMapping.xform = mappingsXformPath;\n mappings.push(nameMapping);\n /**\n * Coerces the second param to a number, if it is defined.\n */\n function xformSize(metadata, size) {\n if (type.isDef(size)) {\n return +size;\n }\n else {\n return size;\n }\n }\n var sizeMapping = new Mapping('size');\n sizeMapping.xform = xformSize;\n mappings.push(sizeMapping);\n mappings.push(new Mapping('timeCreated'));\n mappings.push(new Mapping('updated'));\n mappings.push(new Mapping('md5Hash', null, true));\n mappings.push(new Mapping('cacheControl', null, true));\n mappings.push(new Mapping('contentDisposition', null, true));\n mappings.push(new Mapping('contentEncoding', null, true));\n mappings.push(new Mapping('contentLanguage', null, true));\n mappings.push(new Mapping('contentType', null, true));\n mappings.push(new Mapping('metadata', 'customMetadata', true));\n /**\n * Transforms a comma-separated string of tokens into a list of download\n * URLs.\n */\n function xformTokens(metadata, tokens) {\n var valid = type.isString(tokens) && tokens.length > 0;\n if (!valid) {\n // This can happen if objects are uploaded through GCS and retrieved\n // through list, so we don't want to throw an Error.\n return [];\n }\n var encode = encodeURIComponent;\n var tokensList = tokens.split(',');\n var urls = tokensList.map(function (token) {\n var bucket = metadata['bucket'];\n var path = metadata['fullPath'];\n var urlPart = '/b/' + encode(bucket) + '/o/' + encode(path);\n var base = UrlUtils.makeDownloadUrl(urlPart);\n var queryString = UrlUtils.makeQueryString({\n alt: 'media',\n token: token\n });\n return base + queryString;\n });\n return urls;\n }\n mappings.push(new Mapping('downloadTokens', 'downloadURLs', false, xformTokens));\n mappings_ = mappings;\n return mappings_;\n}\nexport function addRef(metadata, authWrapper) {\n function generateRef() {\n var bucket = metadata['bucket'];\n var path = metadata['fullPath'];\n var loc = new Location(bucket, path);\n return authWrapper.makeStorageReference(loc);\n }\n Object.defineProperty(metadata, 'ref', { get: generateRef });\n}\nexport function fromResource(authWrapper, resource, mappings) {\n var metadata = {};\n metadata['type'] = 'file';\n var len = mappings.length;\n for (var i = 0; i < len; i++) {\n var mapping = mappings[i];\n metadata[mapping.local] = mapping.xform(metadata, resource[mapping.server]);\n }\n addRef(metadata, authWrapper);\n return metadata;\n}\nexport function fromResourceString(authWrapper, resourceString, mappings) {\n var obj = json.jsonObjectOrNull(resourceString);\n if (obj === null) {\n return null;\n }\n var resource = obj;\n return fromResource(authWrapper, resource, mappings);\n}\nexport function toResourceString(metadata, mappings) {\n var resource = {};\n var len = mappings.length;\n for (var i = 0; i < len; i++) {\n var mapping = mappings[i];\n if (mapping.writable) {\n resource[mapping.server] = metadata[mapping.local];\n }\n }\n return JSON.stringify(resource);\n}\nexport function metadataValidator(p) {\n var validType = p && type.isObject(p);\n if (!validType) {\n throw 'Expected Metadata object.';\n }\n for (var key in p) {\n var val = p[key];\n if (key === 'customMetadata') {\n if (!type.isObject(val)) {\n throw 'Expected object for \\'customMetadata\\' mapping.';\n }\n }\n else {\n if (type.isNonNullObject(val)) {\n throw \"Mapping for '\" + key + \"' cannot be an object.\";\n }\n }\n }\n}\n\n//# sourceMappingURL=metadata.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as errorsExports from './error';\nimport * as MetadataUtils from './metadata';\nimport * as type from './type';\n/**\n * @param name Name of the function.\n * @param specs Argument specs.\n * @param passed The actual arguments passed to the function.\n * @throws {fbs.Error} If the arguments are invalid.\n */\nexport function validate(name, specs, passed) {\n var minArgs = specs.length;\n var maxArgs = specs.length;\n for (var i = 0; i < specs.length; i++) {\n if (specs[i].optional) {\n minArgs = i;\n break;\n }\n }\n var validLength = minArgs <= passed.length && passed.length <= maxArgs;\n if (!validLength) {\n throw errorsExports.invalidArgumentCount(minArgs, maxArgs, name, passed.length);\n }\n for (var i = 0; i < passed.length; i++) {\n try {\n specs[i].validator(passed[i]);\n }\n catch (e) {\n if (e instanceof Error) {\n throw errorsExports.invalidArgument(i, name, e.message);\n }\n else {\n throw errorsExports.invalidArgument(i, name, e);\n }\n }\n }\n}\n/**\n * @struct\n */\nvar ArgSpec = /** @class */ (function () {\n function ArgSpec(validator, opt_optional) {\n var self = this;\n this.validator = function (p) {\n if (self.optional && !type.isJustDef(p)) {\n return;\n }\n validator(p);\n };\n this.optional = !!opt_optional;\n }\n return ArgSpec;\n}());\nexport { ArgSpec };\nexport function and_(v1, v2) {\n return function (p) {\n v1(p);\n v2(p);\n };\n}\nexport function stringSpec(opt_validator, opt_optional) {\n function stringValidator(p) {\n if (!type.isString(p)) {\n throw 'Expected string.';\n }\n }\n var validator;\n if (opt_validator) {\n validator = and_(stringValidator, opt_validator);\n }\n else {\n validator = stringValidator;\n }\n return new ArgSpec(validator, opt_optional);\n}\nexport function uploadDataSpec() {\n function validator(p) {\n var valid = p instanceof Uint8Array ||\n p instanceof ArrayBuffer ||\n (type.isNativeBlobDefined() && p instanceof Blob);\n if (!valid) {\n throw 'Expected Blob or File.';\n }\n }\n return new ArgSpec(validator);\n}\nexport function metadataSpec(opt_optional) {\n return new ArgSpec(MetadataUtils.metadataValidator, opt_optional);\n}\nexport function nonNegativeNumberSpec() {\n function validator(p) {\n var valid = type.isNumber(p) && p >= 0;\n if (!valid) {\n throw 'Expected a number 0 or greater.';\n }\n }\n return new ArgSpec(validator);\n}\nexport function looseObjectSpec(opt_validator, opt_optional) {\n function validator(p) {\n var isLooseObject = p === null || (type.isDef(p) && p instanceof Object);\n if (!isLooseObject) {\n throw 'Expected an Object.';\n }\n if (opt_validator !== undefined && opt_validator !== null) {\n opt_validator(p);\n }\n }\n return new ArgSpec(validator, opt_optional);\n}\nexport function nullFunctionSpec(opt_optional) {\n function validator(p) {\n var valid = p === null || type.isFunction(p);\n if (!valid) {\n throw 'Expected a Function.';\n }\n }\n return new ArgSpec(validator, opt_optional);\n}\n\n//# sourceMappingURL=args.js.map\n","import * as type from './type';\nfunction getBlobBuilder() {\n if (typeof BlobBuilder !== 'undefined') {\n return BlobBuilder;\n }\n else if (typeof WebKitBlobBuilder !== 'undefined') {\n return WebKitBlobBuilder;\n }\n else {\n return undefined;\n }\n}\n/**\n * Concatenates one or more values together and converts them to a Blob.\n *\n * @param var_args The values that will make up the resulting blob.\n * @return The blob.\n */\nexport function getBlob() {\n var var_args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n var_args[_i] = arguments[_i];\n }\n var BlobBuilder = getBlobBuilder();\n if (BlobBuilder !== undefined) {\n var bb = new BlobBuilder();\n for (var i = 0; i < var_args.length; i++) {\n bb.append(var_args[i]);\n }\n return bb.getBlob();\n }\n else {\n if (type.isNativeBlobDefined()) {\n return new Blob(var_args);\n }\n else {\n throw Error(\"This browser doesn't seem to support creating Blobs\");\n }\n }\n}\n/**\n * Slices the blob. The returned blob contains data from the start byte\n * (inclusive) till the end byte (exclusive). Negative indices cannot be used.\n *\n * @param blob The blob to be sliced.\n * @param start Index of the starting byte.\n * @param end Index of the ending byte.\n * @return The blob slice or null if not supported.\n */\nexport function sliceBlob(blob, start, end) {\n if (blob.webkitSlice) {\n return blob.webkitSlice(start, end);\n }\n else if (blob.mozSlice) {\n return blob.mozSlice(start, end);\n }\n else if (blob.slice) {\n return blob.slice(start, end);\n }\n return null;\n}\n\n//# sourceMappingURL=fs.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @file Provides a Blob-like wrapper for various binary types (including the\n * native Blob type). This makes it possible to upload types like ArrayBuffers,\n * making uploads possible in environments without the native Blob type.\n */\nimport * as fs from './fs';\nimport * as string from './string';\nimport { StringFormat } from './string';\nimport * as type from './type';\n/**\n * @param opt_elideCopy If true, doesn't copy mutable input data\n * (e.g. Uint8Arrays). Pass true only if you know the objects will not be\n * modified after this blob's construction.\n */\nvar FbsBlob = /** @class */ (function () {\n function FbsBlob(data, opt_elideCopy) {\n var size = 0;\n var blobType = '';\n if (type.isNativeBlob(data)) {\n this.data_ = data;\n size = data.size;\n blobType = data.type;\n }\n else if (data instanceof ArrayBuffer) {\n if (opt_elideCopy) {\n this.data_ = new Uint8Array(data);\n }\n else {\n this.data_ = new Uint8Array(data.byteLength);\n this.data_.set(new Uint8Array(data));\n }\n size = this.data_.length;\n }\n else if (data instanceof Uint8Array) {\n if (opt_elideCopy) {\n this.data_ = data;\n }\n else {\n this.data_ = new Uint8Array(data.length);\n this.data_.set(data);\n }\n size = data.length;\n }\n this.size_ = size;\n this.type_ = blobType;\n }\n FbsBlob.prototype.size = function () {\n return this.size_;\n };\n FbsBlob.prototype.type = function () {\n return this.type_;\n };\n FbsBlob.prototype.slice = function (startByte, endByte) {\n if (type.isNativeBlob(this.data_)) {\n var realBlob = this.data_;\n var sliced = fs.sliceBlob(realBlob, startByte, endByte);\n if (sliced === null) {\n return null;\n }\n return new FbsBlob(sliced);\n }\n else {\n var slice = new Uint8Array(this.data_.buffer, startByte, endByte - startByte);\n return new FbsBlob(slice, true);\n }\n };\n FbsBlob.getBlob = function () {\n var var_args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n var_args[_i] = arguments[_i];\n }\n if (type.isNativeBlobDefined()) {\n var blobby = var_args.map(function (val) {\n if (val instanceof FbsBlob) {\n return val.data_;\n }\n else {\n return val;\n }\n });\n return new FbsBlob(fs.getBlob.apply(null, blobby));\n }\n else {\n var uint8Arrays = var_args.map(function (val) {\n if (type.isString(val)) {\n return string.dataFromString(StringFormat.RAW, val).data;\n }\n else {\n // Blobs don't exist, so this has to be a Uint8Array.\n return val.data_;\n }\n });\n var finalLength_1 = 0;\n uint8Arrays.forEach(function (array) {\n finalLength_1 += array.byteLength;\n });\n var merged_1 = new Uint8Array(finalLength_1);\n var index_1 = 0;\n uint8Arrays.forEach(function (array) {\n for (var i = 0; i < array.length; i++) {\n merged_1[index_1++] = array[i];\n }\n });\n return new FbsBlob(merged_1, true);\n }\n };\n FbsBlob.prototype.uploadData = function () {\n return this.data_;\n };\n return FbsBlob;\n}());\nexport { FbsBlob };\n\n//# sourceMappingURL=blob.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns true if the object is contained in the array (compared with ===).\n * @template T\n */\nexport function contains(array, elem) {\n return array.indexOf(elem) !== -1;\n}\n/**\n * Returns a shallow copy of the array or array-like object (e.g. arguments).\n * @template T\n */\nexport function clone(arraylike) {\n return Array.prototype.slice.call(arraylike);\n}\n/**\n * Removes the given element from the given array, if it is contained.\n * Directly modifies the passed-in array.\n * @template T\n */\nexport function remove(array, elem) {\n var i = array.indexOf(elem);\n if (i !== -1) {\n array.splice(i, 1);\n }\n}\n\n//# sourceMappingURL=array.js.map\n","var RequestInfo = /** @class */ (function () {\n function RequestInfo(url, method, \n /**\n * Returns the value with which to resolve the request's promise. Only called\n * if the request is successful. Throw from this function to reject the\n * returned Request's promise with the thrown error.\n * Note: The XhrIo passed to this function may be reused after this callback\n * returns. Do not keep a reference to it in any way.\n */\n handler, timeout) {\n this.url = url;\n this.method = method;\n this.handler = handler;\n this.timeout = timeout;\n this.urlParams = {};\n this.headers = {};\n this.body = null;\n this.errorHandler = null;\n /**\n * Called with the current number of bytes uploaded and total size (-1 if not\n * computable) of the request body (i.e. used to report upload progress).\n */\n this.progressCallback = null;\n this.successCodes = [200];\n this.additionalRetryCodes = [];\n }\n return RequestInfo;\n}());\nexport { RequestInfo };\n\n//# sourceMappingURL=requestinfo.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as array from './array';\nimport { FbsBlob } from './blob';\nimport * as errorsExports from './error';\nimport * as MetadataUtils from './metadata';\nimport * as object from './object';\nimport { RequestInfo } from './requestinfo';\nimport * as type from './type';\nimport * as UrlUtils from './url';\n/**\n * Throws the UNKNOWN FirebaseStorageError if cndn is false.\n */\nexport function handlerCheck(cndn) {\n if (!cndn) {\n throw errorsExports.unknown();\n }\n}\nexport function metadataHandler(authWrapper, mappings) {\n function handler(xhr, text) {\n var metadata = MetadataUtils.fromResourceString(authWrapper, text, mappings);\n handlerCheck(metadata !== null);\n return metadata;\n }\n return handler;\n}\nexport function sharedErrorHandler(location) {\n function errorHandler(xhr, err) {\n var newErr;\n if (xhr.getStatus() === 401) {\n newErr = errorsExports.unauthenticated();\n }\n else {\n if (xhr.getStatus() === 402) {\n newErr = errorsExports.quotaExceeded(location.bucket);\n }\n else {\n if (xhr.getStatus() === 403) {\n newErr = errorsExports.unauthorized(location.path);\n }\n else {\n newErr = err;\n }\n }\n }\n newErr.setServerResponseProp(err.serverResponseProp());\n return newErr;\n }\n return errorHandler;\n}\nexport function objectErrorHandler(location) {\n var shared = sharedErrorHandler(location);\n function errorHandler(xhr, err) {\n var newErr = shared(xhr, err);\n if (xhr.getStatus() === 404) {\n newErr = errorsExports.objectNotFound(location.path);\n }\n newErr.setServerResponseProp(err.serverResponseProp());\n return newErr;\n }\n return errorHandler;\n}\nexport function getMetadata(authWrapper, location, mappings) {\n var urlPart = location.fullServerUrl();\n var url = UrlUtils.makeNormalUrl(urlPart);\n var method = 'GET';\n var timeout = authWrapper.maxOperationRetryTime();\n var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\n requestInfo.errorHandler = objectErrorHandler(location);\n return requestInfo;\n}\nexport function updateMetadata(authWrapper, location, metadata, mappings) {\n var urlPart = location.fullServerUrl();\n var url = UrlUtils.makeNormalUrl(urlPart);\n var method = 'PATCH';\n var body = MetadataUtils.toResourceString(metadata, mappings);\n var headers = { 'Content-Type': 'application/json; charset=utf-8' };\n var timeout = authWrapper.maxOperationRetryTime();\n var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\n requestInfo.headers = headers;\n requestInfo.body = body;\n requestInfo.errorHandler = objectErrorHandler(location);\n return requestInfo;\n}\nexport function deleteObject(authWrapper, location) {\n var urlPart = location.fullServerUrl();\n var url = UrlUtils.makeNormalUrl(urlPart);\n var method = 'DELETE';\n var timeout = authWrapper.maxOperationRetryTime();\n function handler(xhr, text) { }\n var requestInfo = new RequestInfo(url, method, handler, timeout);\n requestInfo.successCodes = [200, 204];\n requestInfo.errorHandler = objectErrorHandler(location);\n return requestInfo;\n}\nexport function determineContentType_(metadata, blob) {\n return ((metadata && metadata['contentType']) ||\n (blob && blob.type()) ||\n 'application/octet-stream');\n}\nexport function metadataForUpload_(location, blob, opt_metadata) {\n var metadata = object.clone(opt_metadata);\n metadata['fullPath'] = location.path;\n metadata['size'] = blob.size();\n if (!metadata['contentType']) {\n metadata['contentType'] = determineContentType_(null, blob);\n }\n return metadata;\n}\nexport function multipartUpload(authWrapper, location, mappings, blob, opt_metadata) {\n var urlPart = location.bucketOnlyServerUrl();\n var headers = {\n 'X-Goog-Upload-Protocol': 'multipart'\n };\n function genBoundary() {\n var str = '';\n for (var i = 0; i < 2; i++) {\n str =\n str +\n Math.random()\n .toString()\n .slice(2);\n }\n return str;\n }\n var boundary = genBoundary();\n headers['Content-Type'] = 'multipart/related; boundary=' + boundary;\n var metadata = metadataForUpload_(location, blob, opt_metadata);\n var metadataString = MetadataUtils.toResourceString(metadata, mappings);\n var preBlobPart = '--' +\n boundary +\n '\\r\\n' +\n 'Content-Type: application/json; charset=utf-8\\r\\n\\r\\n' +\n metadataString +\n '\\r\\n--' +\n boundary +\n '\\r\\n' +\n 'Content-Type: ' +\n metadata['contentType'] +\n '\\r\\n\\r\\n';\n var postBlobPart = '\\r\\n--' + boundary + '--';\n var body = FbsBlob.getBlob(preBlobPart, blob, postBlobPart);\n if (body === null) {\n throw errorsExports.cannotSliceBlob();\n }\n var urlParams = { name: metadata['fullPath'] };\n var url = UrlUtils.makeUploadUrl(urlPart);\n var method = 'POST';\n var timeout = authWrapper.maxUploadRetryTime();\n var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\n requestInfo.urlParams = urlParams;\n requestInfo.headers = headers;\n requestInfo.body = body.uploadData();\n requestInfo.errorHandler = sharedErrorHandler(location);\n return requestInfo;\n}\n/**\n * @param current The number of bytes that have been uploaded so far.\n * @param total The total number of bytes in the upload.\n * @param opt_finalized True if the server has finished the upload.\n * @param opt_metadata The upload metadata, should\n * only be passed if opt_finalized is true.\n * @struct\n */\nvar ResumableUploadStatus = /** @class */ (function () {\n function ResumableUploadStatus(current, total, finalized, metadata) {\n this.current = current;\n this.total = total;\n this.finalized = !!finalized;\n this.metadata = metadata || null;\n }\n return ResumableUploadStatus;\n}());\nexport { ResumableUploadStatus };\nexport function checkResumeHeader_(xhr, opt_allowed) {\n var status;\n try {\n status = xhr.getResponseHeader('X-Goog-Upload-Status');\n }\n catch (e) {\n handlerCheck(false);\n }\n var allowed = opt_allowed || ['active'];\n handlerCheck(array.contains(allowed, status));\n return status;\n}\nexport function createResumableUpload(authWrapper, location, mappings, blob, opt_metadata) {\n var urlPart = location.bucketOnlyServerUrl();\n var metadata = metadataForUpload_(location, blob, opt_metadata);\n var urlParams = { name: metadata['fullPath'] };\n var url = UrlUtils.makeUploadUrl(urlPart);\n var method = 'POST';\n var headers = {\n 'X-Goog-Upload-Protocol': 'resumable',\n 'X-Goog-Upload-Command': 'start',\n 'X-Goog-Upload-Header-Content-Length': blob.size(),\n 'X-Goog-Upload-Header-Content-Type': metadata['contentType'],\n 'Content-Type': 'application/json; charset=utf-8'\n };\n var body = MetadataUtils.toResourceString(metadata, mappings);\n var timeout = authWrapper.maxUploadRetryTime();\n function handler(xhr, text) {\n checkResumeHeader_(xhr);\n var url;\n try {\n url = xhr.getResponseHeader('X-Goog-Upload-URL');\n }\n catch (e) {\n handlerCheck(false);\n }\n handlerCheck(type.isString(url));\n return url;\n }\n var requestInfo = new RequestInfo(url, method, handler, timeout);\n requestInfo.urlParams = urlParams;\n requestInfo.headers = headers;\n requestInfo.body = body;\n requestInfo.errorHandler = sharedErrorHandler(location);\n return requestInfo;\n}\n/**\n * @param url From a call to fbs.requests.createResumableUpload.\n */\nexport function getResumableUploadStatus(authWrapper, location, url, blob) {\n var headers = { 'X-Goog-Upload-Command': 'query' };\n function handler(xhr, text) {\n var status = checkResumeHeader_(xhr, ['active', 'final']);\n var sizeString;\n try {\n sizeString = xhr.getResponseHeader('X-Goog-Upload-Size-Received');\n }\n catch (e) {\n handlerCheck(false);\n }\n var size = parseInt(sizeString, 10);\n handlerCheck(!isNaN(size));\n return new ResumableUploadStatus(size, blob.size(), status === 'final');\n }\n var method = 'POST';\n var timeout = authWrapper.maxUploadRetryTime();\n var requestInfo = new RequestInfo(url, method, handler, timeout);\n requestInfo.headers = headers;\n requestInfo.errorHandler = sharedErrorHandler(location);\n return requestInfo;\n}\n/**\n * Any uploads via the resumable upload API must transfer a number of bytes\n * that is a multiple of this number.\n */\nexport var resumableUploadChunkSize = 256 * 1024;\n/**\n * @param url From a call to fbs.requests.createResumableUpload.\n * @param chunkSize Number of bytes to upload.\n * @param opt_status The previous status.\n * If not passed or null, we start from the beginning.\n * @throws fbs.Error If the upload is already complete, the passed in status\n * has a final size inconsistent with the blob, or the blob cannot be sliced\n * for upload.\n */\nexport function continueResumableUpload(location, authWrapper, url, blob, chunkSize, mappings, opt_status, opt_progressCallback) {\n // TODO(andysoto): standardize on internal asserts\n // assert(!(opt_status && opt_status.finalized));\n var status = new ResumableUploadStatus(0, 0);\n if (opt_status) {\n status.current = opt_status.current;\n status.total = opt_status.total;\n }\n else {\n status.current = 0;\n status.total = blob.size();\n }\n if (blob.size() !== status.total) {\n throw errorsExports.serverFileWrongSize();\n }\n var bytesLeft = status.total - status.current;\n var bytesToUpload = bytesLeft;\n if (chunkSize > 0) {\n bytesToUpload = Math.min(bytesToUpload, chunkSize);\n }\n var startByte = status.current;\n var endByte = startByte + bytesToUpload;\n var uploadCommand = bytesToUpload === bytesLeft ? 'upload, finalize' : 'upload';\n var headers = {\n 'X-Goog-Upload-Command': uploadCommand,\n 'X-Goog-Upload-Offset': status.current\n };\n var body = blob.slice(startByte, endByte);\n if (body === null) {\n throw errorsExports.cannotSliceBlob();\n }\n function handler(xhr, text) {\n // TODO(andysoto): Verify the MD5 of each uploaded range:\n // the 'x-range-md5' header comes back with status code 308 responses.\n // We'll only be able to bail out though, because you can't re-upload a\n // range that you previously uploaded.\n var uploadStatus = checkResumeHeader_(xhr, ['active', 'final']);\n var newCurrent = status.current + bytesToUpload;\n var size = blob.size();\n var metadata;\n if (uploadStatus === 'final') {\n metadata = metadataHandler(authWrapper, mappings)(xhr, text);\n }\n else {\n metadata = null;\n }\n return new ResumableUploadStatus(newCurrent, size, uploadStatus === 'final', metadata);\n }\n var method = 'POST';\n var timeout = authWrapper.maxUploadRetryTime();\n var requestInfo = new RequestInfo(url, method, handler, timeout);\n requestInfo.headers = headers;\n requestInfo.body = body.uploadData();\n requestInfo.progressCallback = opt_progressCallback || null;\n requestInfo.errorHandler = sharedErrorHandler(location);\n return requestInfo;\n}\n\n//# sourceMappingURL=requests.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as type from './type';\n/**\n * @struct\n */\nvar Observer = /** @class */ (function () {\n function Observer(nextOrObserver, opt_error, opt_complete) {\n var asFunctions = type.isFunction(nextOrObserver) ||\n type.isDef(opt_error) ||\n type.isDef(opt_complete);\n if (asFunctions) {\n this.next = nextOrObserver;\n this.error = opt_error || null;\n this.complete = opt_complete || null;\n }\n else {\n var observer = nextOrObserver;\n this.next = observer.next || null;\n this.error = observer.error || null;\n this.complete = observer.complete || null;\n }\n }\n return Observer;\n}());\nexport { Observer };\n\n//# sourceMappingURL=observer.js.map\n","var UploadTaskSnapshot = /** @class */ (function () {\n function UploadTaskSnapshot(bytesTransferred, totalBytes, state, metadata, task, ref) {\n this.bytesTransferred = bytesTransferred;\n this.totalBytes = totalBytes;\n this.state = state;\n this.metadata = metadata;\n this.task = task;\n this.ref = ref;\n }\n Object.defineProperty(UploadTaskSnapshot.prototype, \"downloadURL\", {\n get: function () {\n if (this.metadata !== null) {\n var urls = this.metadata['downloadURLs'];\n if (urls != null && urls[0] != null) {\n return urls[0];\n }\n else {\n return null;\n }\n }\n else {\n return null;\n }\n },\n enumerable: true,\n configurable: true\n });\n return UploadTaskSnapshot;\n}());\nexport { UploadTaskSnapshot };\n\n//# sourceMappingURL=tasksnapshot.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Method for invoking a callback asynchronously.\n */\nimport * as promiseimpl from './promise_external';\n/**\n * Returns a function that invokes f with its arguments asynchronously as a\n * microtask, i.e. as soon as possible after the current script returns back\n * into browser code.\n */\nexport function async(f) {\n return function () {\n var argsToForward = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n argsToForward[_i] = arguments[_i];\n }\n promiseimpl.resolve(true).then(function () {\n f.apply(null, argsToForward);\n });\n };\n}\n\n//# sourceMappingURL=async.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Defines types for interacting with blob transfer tasks.\n */\nimport { InternalTaskState } from './implementation/taskenums';\nimport { Observer } from './implementation/observer';\nimport { TaskEvent, TaskState } from './implementation/taskenums';\nimport { UploadTaskSnapshot } from './tasksnapshot';\nimport * as fbsArgs from './implementation/args';\nimport * as fbsArray from './implementation/array';\nimport { async as fbsAsync } from './implementation/async';\nimport * as errors from './implementation/error';\nimport * as fbsPromiseimpl from './implementation/promise_external';\nimport * as fbsRequests from './implementation/requests';\nimport * as fbsTaskEnums from './implementation/taskenums';\nimport * as typeUtils from './implementation/type';\n/**\n * Represents a blob being uploaded. Can be used to pause/resume/cancel the\n * upload and manage callbacks for various events.\n */\nvar UploadTask = /** @class */ (function () {\n /**\n * @param ref The firebaseStorage.Reference object this task came\n * from, untyped to avoid cyclic dependencies.\n * @param blob The blob to upload.\n */\n function UploadTask(ref, authWrapper, location, mappings, blob, metadata) {\n if (metadata === void 0) { metadata = null; }\n var _this = this;\n this.transferred_ = 0;\n this.needToFetchStatus_ = false;\n this.needToFetchMetadata_ = false;\n this.observers_ = [];\n this.error_ = null;\n this.uploadUrl_ = null;\n this.request_ = null;\n this.chunkMultiplier_ = 1;\n this.resolve_ = null;\n this.reject_ = null;\n this.ref_ = ref;\n this.authWrapper_ = authWrapper;\n this.location_ = location;\n this.blob_ = blob;\n this.metadata_ = metadata;\n this.mappings_ = mappings;\n this.resumable_ = this.shouldDoResumable_(this.blob_);\n this.state_ = InternalTaskState.RUNNING;\n this.errorHandler_ = function (error) {\n _this.request_ = null;\n _this.chunkMultiplier_ = 1;\n if (error.codeEquals(errors.Code.CANCELED)) {\n _this.needToFetchStatus_ = true;\n _this.completeTransitions_();\n }\n else {\n _this.error_ = error;\n _this.transition_(InternalTaskState.ERROR);\n }\n };\n this.metadataErrorHandler_ = function (error) {\n _this.request_ = null;\n if (error.codeEquals(errors.Code.CANCELED)) {\n _this.completeTransitions_();\n }\n else {\n _this.error_ = error;\n _this.transition_(InternalTaskState.ERROR);\n }\n };\n this.promise_ = fbsPromiseimpl.make(function (resolve, reject) {\n _this.resolve_ = resolve;\n _this.reject_ = reject;\n _this.start_();\n });\n // Prevent uncaught rejections on the internal promise from bubbling out\n // to the top level with a dummy handler.\n this.promise_.then(null, function () { });\n }\n UploadTask.prototype.makeProgressCallback_ = function () {\n var _this = this;\n var sizeBefore = this.transferred_;\n return function (loaded, total) {\n _this.updateProgress_(sizeBefore + loaded);\n };\n };\n UploadTask.prototype.shouldDoResumable_ = function (blob) {\n return blob.size() > 256 * 1024;\n };\n UploadTask.prototype.start_ = function () {\n if (this.state_ !== InternalTaskState.RUNNING) {\n // This can happen if someone pauses us in a resume callback, for example.\n return;\n }\n if (this.request_ !== null) {\n return;\n }\n if (this.resumable_) {\n if (this.uploadUrl_ === null) {\n this.createResumable_();\n }\n else {\n if (this.needToFetchStatus_) {\n this.fetchStatus_();\n }\n else {\n if (this.needToFetchMetadata_) {\n // Happens if we miss the metadata on upload completion.\n this.fetchMetadata_();\n }\n else {\n this.continueUpload_();\n }\n }\n }\n }\n else {\n this.oneShotUpload_();\n }\n };\n UploadTask.prototype.resolveToken_ = function (callback) {\n var _this = this;\n this.authWrapper_.getAuthToken().then(function (authToken) {\n switch (_this.state_) {\n case InternalTaskState.RUNNING:\n callback(authToken);\n break;\n case InternalTaskState.CANCELING:\n _this.transition_(InternalTaskState.CANCELED);\n break;\n case InternalTaskState.PAUSING:\n _this.transition_(InternalTaskState.PAUSED);\n break;\n default:\n }\n });\n };\n // TODO(andysoto): assert false\n UploadTask.prototype.createResumable_ = function () {\n var _this = this;\n this.resolveToken_(function (authToken) {\n var requestInfo = fbsRequests.createResumableUpload(_this.authWrapper_, _this.location_, _this.mappings_, _this.blob_, _this.metadata_);\n var createRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\n _this.request_ = createRequest;\n createRequest.getPromise().then(function (url) {\n _this.request_ = null;\n _this.uploadUrl_ = url;\n _this.needToFetchStatus_ = false;\n _this.completeTransitions_();\n }, _this.errorHandler_);\n });\n };\n UploadTask.prototype.fetchStatus_ = function () {\n var _this = this;\n // TODO(andysoto): assert(this.uploadUrl_ !== null);\n var url = this.uploadUrl_;\n this.resolveToken_(function (authToken) {\n var requestInfo = fbsRequests.getResumableUploadStatus(_this.authWrapper_, _this.location_, url, _this.blob_);\n var statusRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\n _this.request_ = statusRequest;\n statusRequest.getPromise().then(function (status) {\n status = status;\n _this.request_ = null;\n _this.updateProgress_(status.current);\n _this.needToFetchStatus_ = false;\n if (status.finalized) {\n _this.needToFetchMetadata_ = true;\n }\n _this.completeTransitions_();\n }, _this.errorHandler_);\n });\n };\n UploadTask.prototype.continueUpload_ = function () {\n var _this = this;\n var chunkSize = fbsRequests.resumableUploadChunkSize * this.chunkMultiplier_;\n var status = new fbsRequests.ResumableUploadStatus(this.transferred_, this.blob_.size());\n // TODO(andysoto): assert(this.uploadUrl_ !== null);\n var url = this.uploadUrl_;\n this.resolveToken_(function (authToken) {\n var requestInfo;\n try {\n requestInfo = fbsRequests.continueResumableUpload(_this.location_, _this.authWrapper_, url, _this.blob_, chunkSize, _this.mappings_, status, _this.makeProgressCallback_());\n }\n catch (e) {\n _this.error_ = e;\n _this.transition_(InternalTaskState.ERROR);\n return;\n }\n var uploadRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\n _this.request_ = uploadRequest;\n uploadRequest\n .getPromise()\n .then(function (newStatus) {\n _this.increaseMultiplier_();\n _this.request_ = null;\n _this.updateProgress_(newStatus.current);\n if (newStatus.finalized) {\n _this.metadata_ = newStatus.metadata;\n _this.transition_(InternalTaskState.SUCCESS);\n }\n else {\n _this.completeTransitions_();\n }\n }, _this.errorHandler_);\n });\n };\n UploadTask.prototype.increaseMultiplier_ = function () {\n var currentSize = fbsRequests.resumableUploadChunkSize * this.chunkMultiplier_;\n // Max chunk size is 32M.\n if (currentSize < 32 * 1024 * 1024) {\n this.chunkMultiplier_ *= 2;\n }\n };\n UploadTask.prototype.fetchMetadata_ = function () {\n var _this = this;\n this.resolveToken_(function (authToken) {\n var requestInfo = fbsRequests.getMetadata(_this.authWrapper_, _this.location_, _this.mappings_);\n var metadataRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\n _this.request_ = metadataRequest;\n metadataRequest.getPromise().then(function (metadata) {\n _this.request_ = null;\n _this.metadata_ = metadata;\n _this.transition_(InternalTaskState.SUCCESS);\n }, _this.metadataErrorHandler_);\n });\n };\n UploadTask.prototype.oneShotUpload_ = function () {\n var _this = this;\n this.resolveToken_(function (authToken) {\n var requestInfo = fbsRequests.multipartUpload(_this.authWrapper_, _this.location_, _this.mappings_, _this.blob_, _this.metadata_);\n var multipartRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\n _this.request_ = multipartRequest;\n multipartRequest.getPromise().then(function (metadata) {\n _this.request_ = null;\n _this.metadata_ = metadata;\n _this.updateProgress_(_this.blob_.size());\n _this.transition_(InternalTaskState.SUCCESS);\n }, _this.errorHandler_);\n });\n };\n UploadTask.prototype.updateProgress_ = function (transferred) {\n var old = this.transferred_;\n this.transferred_ = transferred;\n // A progress update can make the \"transferred\" value smaller (e.g. a\n // partial upload not completed by server, after which the \"transferred\"\n // value may reset to the value at the beginning of the request).\n if (this.transferred_ !== old) {\n this.notifyObservers_();\n }\n };\n UploadTask.prototype.transition_ = function (state) {\n if (this.state_ === state) {\n return;\n }\n switch (state) {\n case InternalTaskState.CANCELING:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.RUNNING ||\n // this.state_ === InternalTaskState.PAUSING);\n this.state_ = state;\n if (this.request_ !== null) {\n this.request_.cancel();\n }\n break;\n case InternalTaskState.PAUSING:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.RUNNING);\n this.state_ = state;\n if (this.request_ !== null) {\n this.request_.cancel();\n }\n break;\n case InternalTaskState.RUNNING:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.PAUSED ||\n // this.state_ === InternalTaskState.PAUSING);\n var wasPaused = this.state_ === InternalTaskState.PAUSED;\n this.state_ = state;\n if (wasPaused) {\n this.notifyObservers_();\n this.start_();\n }\n break;\n case InternalTaskState.PAUSED:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.PAUSING);\n this.state_ = state;\n this.notifyObservers_();\n break;\n case InternalTaskState.CANCELED:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.PAUSED ||\n // this.state_ === InternalTaskState.CANCELING);\n this.error_ = errors.canceled();\n this.state_ = state;\n this.notifyObservers_();\n break;\n case InternalTaskState.ERROR:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.RUNNING ||\n // this.state_ === InternalTaskState.PAUSING ||\n // this.state_ === InternalTaskState.CANCELING);\n this.state_ = state;\n this.notifyObservers_();\n break;\n case InternalTaskState.SUCCESS:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.RUNNING ||\n // this.state_ === InternalTaskState.PAUSING ||\n // this.state_ === InternalTaskState.CANCELING);\n this.state_ = state;\n this.notifyObservers_();\n break;\n }\n };\n UploadTask.prototype.completeTransitions_ = function () {\n switch (this.state_) {\n case InternalTaskState.PAUSING:\n this.transition_(InternalTaskState.PAUSED);\n break;\n case InternalTaskState.CANCELING:\n this.transition_(InternalTaskState.CANCELED);\n break;\n case InternalTaskState.RUNNING:\n this.start_();\n break;\n default:\n // TODO(andysoto): assert(false);\n break;\n }\n };\n Object.defineProperty(UploadTask.prototype, \"snapshot\", {\n get: function () {\n var externalState = fbsTaskEnums.taskStateFromInternalTaskState(this.state_);\n return new UploadTaskSnapshot(this.transferred_, this.blob_.size(), externalState, this.metadata_, this, this.ref_);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Adds a callback for an event.\n * @param type The type of event to listen for.\n */\n UploadTask.prototype.on = function (type, nextOrObserver, error, completed) {\n if (nextOrObserver === void 0) { nextOrObserver = undefined; }\n if (error === void 0) { error = undefined; }\n if (completed === void 0) { completed = undefined; }\n function typeValidator(_p) {\n if (type !== TaskEvent.STATE_CHANGED) {\n throw \"Expected one of the event types: [\" + TaskEvent.STATE_CHANGED + \"].\";\n }\n }\n var nextOrObserverMessage = 'Expected a function or an Object with one of ' +\n '`next`, `error`, `complete` properties.';\n var nextValidator = fbsArgs.nullFunctionSpec(true).validator;\n var observerValidator = fbsArgs.looseObjectSpec(null, true).validator;\n function nextOrObserverValidator(p) {\n try {\n nextValidator(p);\n return;\n }\n catch (e) { }\n try {\n observerValidator(p);\n var anyDefined = typeUtils.isJustDef(p['next']) ||\n typeUtils.isJustDef(p['error']) ||\n typeUtils.isJustDef(p['complete']);\n if (!anyDefined) {\n throw '';\n }\n return;\n }\n catch (e) {\n throw nextOrObserverMessage;\n }\n }\n var specs = [\n fbsArgs.stringSpec(typeValidator),\n fbsArgs.looseObjectSpec(nextOrObserverValidator, true),\n fbsArgs.nullFunctionSpec(true),\n fbsArgs.nullFunctionSpec(true)\n ];\n fbsArgs.validate('on', specs, arguments);\n var self = this;\n function makeBinder(specs) {\n function binder(nextOrObserver, error, opt_complete) {\n if (specs !== null) {\n fbsArgs.validate('on', specs, arguments);\n }\n var observer = new Observer(nextOrObserver, error, completed);\n self.addObserver_(observer);\n return function () {\n self.removeObserver_(observer);\n };\n }\n return binder;\n }\n function binderNextOrObserverValidator(p) {\n if (p === null) {\n throw nextOrObserverMessage;\n }\n nextOrObserverValidator(p);\n }\n var binderSpecs = [\n fbsArgs.looseObjectSpec(binderNextOrObserverValidator),\n fbsArgs.nullFunctionSpec(true),\n fbsArgs.nullFunctionSpec(true)\n ];\n var typeOnly = !(typeUtils.isJustDef(nextOrObserver) ||\n typeUtils.isJustDef(error) ||\n typeUtils.isJustDef(completed));\n if (typeOnly) {\n return makeBinder(binderSpecs);\n }\n else {\n return makeBinder(null)(nextOrObserver, error, completed);\n }\n };\n /**\n * This object behaves like a Promise, and resolves with its snapshot data\n * when the upload completes.\n * @param onFulfilled The fulfillment callback. Promise chaining works as normal.\n * @param onRejected The rejection callback.\n */\n UploadTask.prototype.then = function (onFulfilled, onRejected) {\n // These casts are needed so that TypeScript can infer the types of the\n // resulting Promise.\n return this.promise_.then(onFulfilled, onRejected);\n };\n /**\n * Equivalent to calling `then(null, onRejected)`.\n */\n UploadTask.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n /**\n * Adds the given observer.\n */\n UploadTask.prototype.addObserver_ = function (observer) {\n this.observers_.push(observer);\n this.notifyObserver_(observer);\n };\n /**\n * Removes the given observer.\n */\n UploadTask.prototype.removeObserver_ = function (observer) {\n fbsArray.remove(this.observers_, observer);\n };\n UploadTask.prototype.notifyObservers_ = function () {\n var _this = this;\n this.finishPromise_();\n var observers = fbsArray.clone(this.observers_);\n observers.forEach(function (observer) {\n _this.notifyObserver_(observer);\n });\n };\n UploadTask.prototype.finishPromise_ = function () {\n if (this.resolve_ !== null) {\n var triggered = true;\n switch (fbsTaskEnums.taskStateFromInternalTaskState(this.state_)) {\n case TaskState.SUCCESS:\n fbsAsync(this.resolve_.bind(null, this.snapshot))();\n break;\n case TaskState.CANCELED:\n case TaskState.ERROR:\n var toCall = this.reject_;\n fbsAsync(toCall.bind(null, this.error_))();\n break;\n default:\n triggered = false;\n break;\n }\n if (triggered) {\n this.resolve_ = null;\n this.reject_ = null;\n }\n }\n };\n UploadTask.prototype.notifyObserver_ = function (observer) {\n var externalState = fbsTaskEnums.taskStateFromInternalTaskState(this.state_);\n switch (externalState) {\n case TaskState.RUNNING:\n case TaskState.PAUSED:\n if (observer.next !== null) {\n fbsAsync(observer.next.bind(observer, this.snapshot))();\n }\n break;\n case TaskState.SUCCESS:\n if (observer.complete !== null) {\n fbsAsync(observer.complete.bind(observer))();\n }\n break;\n case TaskState.CANCELED:\n case TaskState.ERROR:\n if (observer.error !== null) {\n fbsAsync(observer.error.bind(observer, this.error_))();\n }\n break;\n default:\n // TODO(andysoto): assert(false);\n if (observer.error !== null) {\n fbsAsync(observer.error.bind(observer, this.error_))();\n }\n }\n };\n /**\n * Resumes a paused task. Has no effect on a currently running or failed task.\n * @return True if the operation took effect, false if ignored.\n */\n UploadTask.prototype.resume = function () {\n fbsArgs.validate('resume', [], arguments);\n var valid = this.state_ === InternalTaskState.PAUSED ||\n this.state_ === InternalTaskState.PAUSING;\n if (valid) {\n this.transition_(InternalTaskState.RUNNING);\n }\n return valid;\n };\n /**\n * Pauses a currently running task. Has no effect on a paused or failed task.\n * @return True if the operation took effect, false if ignored.\n */\n UploadTask.prototype.pause = function () {\n fbsArgs.validate('pause', [], arguments);\n var valid = this.state_ === InternalTaskState.RUNNING;\n if (valid) {\n this.transition_(InternalTaskState.PAUSING);\n }\n return valid;\n };\n /**\n * Cancels a currently running or paused task. Has no effect on a complete or\n * failed task.\n * @return True if the operation took effect, false if ignored.\n */\n UploadTask.prototype.cancel = function () {\n fbsArgs.validate('cancel', [], arguments);\n var valid = this.state_ === InternalTaskState.RUNNING ||\n this.state_ === InternalTaskState.PAUSING;\n if (valid) {\n this.transition_(InternalTaskState.CANCELING);\n }\n return valid;\n };\n return UploadTask;\n}());\nexport { UploadTask };\n\n//# sourceMappingURL=task.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Defines the Firebase Storage Reference class.\n */\nimport * as args from './implementation/args';\nimport { FbsBlob } from './implementation/blob';\nimport * as errorsExports from './implementation/error';\nimport { Location } from './implementation/location';\nimport * as metadata from './implementation/metadata';\nimport * as object from './implementation/object';\nimport * as path from './implementation/path';\nimport * as requests from './implementation/requests';\nimport * as fbsString from './implementation/string';\nimport { StringFormat } from './implementation/string';\nimport * as type from './implementation/type';\nimport { UploadTask } from './task';\n/**\n * Provides methods to interact with a bucket in the Firebase Storage service.\n * @param location An fbs.location, or the URL at\n * which to base this object, in one of the following forms:\n * gs:///\n * http[s]://firebasestorage.googleapis.com/\n * /b//o/\n * Any query or fragment strings will be ignored in the http[s]\n * format. If no value is passed, the storage object will use a URL based on\n * the project ID of the base firebase.App instance.\n */\nvar Reference = /** @class */ (function () {\n function Reference(authWrapper, location) {\n this.authWrapper = authWrapper;\n if (location instanceof Location) {\n this.location = location;\n }\n else {\n this.location = Location.makeFromUrl(location);\n }\n }\n /**\n * @return The URL for the bucket and path this object references,\n * in the form gs:///\n * @override\n */\n Reference.prototype.toString = function () {\n args.validate('toString', [], arguments);\n return 'gs://' + this.location.bucket + '/' + this.location.path;\n };\n Reference.prototype.newRef = function (authWrapper, location) {\n return new Reference(authWrapper, location);\n };\n Reference.prototype.mappings = function () {\n return metadata.getMappings();\n };\n /**\n * @return A reference to the object obtained by\n * appending childPath, removing any duplicate, beginning, or trailing\n * slashes.\n */\n Reference.prototype.child = function (childPath) {\n args.validate('child', [args.stringSpec()], arguments);\n var newPath = path.child(this.location.path, childPath);\n var location = new Location(this.location.bucket, newPath);\n return this.newRef(this.authWrapper, location);\n };\n Object.defineProperty(Reference.prototype, \"parent\", {\n /**\n * @return A reference to the parent of the\n * current object, or null if the current object is the root.\n */\n get: function () {\n var newPath = path.parent(this.location.path);\n if (newPath === null) {\n return null;\n }\n var location = new Location(this.location.bucket, newPath);\n return this.newRef(this.authWrapper, location);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Reference.prototype, \"root\", {\n /**\n * @return An reference to the root of this\n * object's bucket.\n */\n get: function () {\n var location = new Location(this.location.bucket, '');\n return this.newRef(this.authWrapper, location);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Reference.prototype, \"bucket\", {\n get: function () {\n return this.location.bucket;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Reference.prototype, \"fullPath\", {\n get: function () {\n return this.location.path;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Reference.prototype, \"name\", {\n get: function () {\n return path.lastComponent(this.location.path);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Reference.prototype, \"storage\", {\n get: function () {\n return this.authWrapper.service();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Uploads a blob to this object's location.\n * @param data The blob to upload.\n * @return An UploadTask that lets you control and\n * observe the upload.\n */\n Reference.prototype.put = function (data, metadata) {\n if (metadata === void 0) { metadata = null; }\n args.validate('put', [args.uploadDataSpec(), args.metadataSpec(true)], arguments);\n this.throwIfRoot_('put');\n return new UploadTask(this, this.authWrapper, this.location, this.mappings(), new FbsBlob(data), metadata);\n };\n /**\n * Uploads a string to this object's location.\n * @param string The string to upload.\n * @param opt_format The format of the string to upload.\n * @return An UploadTask that lets you control and\n * observe the upload.\n */\n Reference.prototype.putString = function (string, format, opt_metadata) {\n if (format === void 0) { format = StringFormat.RAW; }\n args.validate('putString', [\n args.stringSpec(),\n args.stringSpec(fbsString.formatValidator, true),\n args.metadataSpec(true)\n ], arguments);\n this.throwIfRoot_('putString');\n var data = fbsString.dataFromString(format, string);\n var metadata = object.clone(opt_metadata);\n if (!type.isDef(metadata['contentType']) && type.isDef(data.contentType)) {\n metadata['contentType'] = data.contentType;\n }\n return new UploadTask(this, this.authWrapper, this.location, this.mappings(), new FbsBlob(data.data, true), metadata);\n };\n /**\n * Deletes the object at this location.\n * @return A promise that resolves if the deletion succeeds.\n */\n Reference.prototype.delete = function () {\n args.validate('delete', [], arguments);\n this.throwIfRoot_('delete');\n var self = this;\n return this.authWrapper.getAuthToken().then(function (authToken) {\n var requestInfo = requests.deleteObject(self.authWrapper, self.location);\n return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\n });\n };\n /**\n * A promise that resolves with the metadata for this object. If this\n * object doesn't exist or metadata cannot be retreived, the promise is\n * rejected.\n */\n Reference.prototype.getMetadata = function () {\n args.validate('getMetadata', [], arguments);\n this.throwIfRoot_('getMetadata');\n var self = this;\n return this.authWrapper.getAuthToken().then(function (authToken) {\n var requestInfo = requests.getMetadata(self.authWrapper, self.location, self.mappings());\n return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\n });\n };\n /**\n * Updates the metadata for this object.\n * @param metadata The new metadata for the object.\n * Only values that have been explicitly set will be changed. Explicitly\n * setting a value to null will remove the metadata.\n * @return A promise that resolves\n * with the new metadata for this object.\n * @see firebaseStorage.Reference.prototype.getMetadata\n */\n Reference.prototype.updateMetadata = function (metadata) {\n args.validate('updateMetadata', [args.metadataSpec()], arguments);\n this.throwIfRoot_('updateMetadata');\n var self = this;\n return this.authWrapper.getAuthToken().then(function (authToken) {\n var requestInfo = requests.updateMetadata(self.authWrapper, self.location, metadata, self.mappings());\n return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\n });\n };\n /**\n * @return A promise that resolves with the download\n * URL for this object.\n */\n Reference.prototype.getDownloadURL = function () {\n args.validate('getDownloadURL', [], arguments);\n this.throwIfRoot_('getDownloadURL');\n return this.getMetadata().then(function (metadata) {\n var url = metadata['downloadURLs'][0];\n if (type.isDef(url)) {\n return url;\n }\n else {\n throw errorsExports.noDownloadURL();\n }\n });\n };\n Reference.prototype.throwIfRoot_ = function (name) {\n if (this.location.path === '') {\n throw errorsExports.invalidRootOperation(name);\n }\n };\n return Reference;\n}());\nexport { Reference };\n\n//# sourceMappingURL=reference.js.map\n","import * as promiseimpl from './promise_external';\n/**\n * A request whose promise always fails.\n * @struct\n * @template T\n */\nvar FailRequest = /** @class */ (function () {\n function FailRequest(error) {\n this.promise_ = promiseimpl.reject(error);\n }\n /** @inheritDoc */\n FailRequest.prototype.getPromise = function () {\n return this.promise_;\n };\n /** @inheritDoc */\n FailRequest.prototype.cancel = function (appDelete) {\n if (appDelete === void 0) { appDelete = false; }\n };\n return FailRequest;\n}());\nexport { FailRequest };\n\n//# sourceMappingURL=failrequest.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as object from './object';\nimport * as constants from './constants';\n/**\n * @struct\n */\nvar RequestMap = /** @class */ (function () {\n function RequestMap() {\n this.map_ = {};\n this.id_ = constants.minSafeInteger;\n }\n /**\n * Registers the given request with this map.\n * The request is unregistered when it completes.\n * @param r The request to register.\n */\n RequestMap.prototype.addRequest = function (r) {\n var id = this.id_;\n this.id_++;\n this.map_[id] = r;\n var self = this;\n function unmap() {\n delete self.map_[id];\n }\n r.getPromise().then(unmap, unmap);\n };\n /**\n * Cancels all registered requests.\n */\n RequestMap.prototype.clear = function () {\n object.forEach(this.map_, function (key, val) {\n if (val) {\n val.cancel(true);\n }\n });\n this.map_ = {};\n };\n return RequestMap;\n}());\nexport { RequestMap };\n\n//# sourceMappingURL=requestmap.js.map\n","import * as constants from './constants';\nimport * as errorsExports from './error';\nimport { FailRequest } from './failrequest';\nimport { Location } from './location';\nimport * as promiseimpl from './promise_external';\nimport { RequestMap } from './requestmap';\nimport * as type from './type';\n/**\n * @param app If null, getAuthToken always resolves with null.\n * @param service The storage service associated with this auth wrapper.\n * Untyped to avoid circular type dependencies.\n * @struct\n */\nvar AuthWrapper = /** @class */ (function () {\n function AuthWrapper(app, maker, requestMaker, service, pool) {\n this.bucket_ = null;\n this.deleted_ = false;\n this.app_ = app;\n if (this.app_ !== null) {\n var options = this.app_.options;\n if (type.isDef(options)) {\n this.bucket_ = AuthWrapper.extractBucket_(options);\n }\n }\n this.storageRefMaker_ = maker;\n this.requestMaker_ = requestMaker;\n this.pool_ = pool;\n this.service_ = service;\n this.maxOperationRetryTime_ = constants.defaultMaxOperationRetryTime;\n this.maxUploadRetryTime_ = constants.defaultMaxUploadRetryTime;\n this.requestMap_ = new RequestMap();\n }\n AuthWrapper.extractBucket_ = function (config) {\n var bucketString = config[constants.configOption] || null;\n if (bucketString == null) {\n return null;\n }\n var loc = Location.makeFromBucketSpec(bucketString);\n return loc.bucket;\n };\n AuthWrapper.prototype.getAuthToken = function () {\n // TODO(andysoto): remove ifDef checks after firebase-app implements stubs\n // (b/28673818).\n if (this.app_ !== null &&\n type.isDef(this.app_.INTERNAL) &&\n type.isDef(this.app_.INTERNAL.getToken)) {\n return this.app_.INTERNAL.getToken().then(function (response) {\n if (response !== null) {\n return response.accessToken;\n }\n else {\n return null;\n }\n }, function (_error) {\n return null;\n });\n }\n else {\n return promiseimpl.resolve(null);\n }\n };\n AuthWrapper.prototype.bucket = function () {\n if (this.deleted_) {\n throw errorsExports.appDeleted();\n }\n else {\n return this.bucket_;\n }\n };\n /**\n * The service associated with this auth wrapper. Untyped to avoid circular\n * type dependencies.\n */\n AuthWrapper.prototype.service = function () {\n return this.service_;\n };\n /**\n * Returns a new firebaseStorage.Reference object referencing this AuthWrapper\n * at the given Location.\n * @param loc The Location.\n * @return Actually a firebaseStorage.Reference, typing not allowed\n * because of circular dependency problems.\n */\n AuthWrapper.prototype.makeStorageReference = function (loc) {\n return this.storageRefMaker_(this, loc);\n };\n AuthWrapper.prototype.makeRequest = function (requestInfo, authToken) {\n if (!this.deleted_) {\n var request = this.requestMaker_(requestInfo, authToken, this.pool_);\n this.requestMap_.addRequest(request);\n return request;\n }\n else {\n return new FailRequest(errorsExports.appDeleted());\n }\n };\n /**\n * Stop running requests and prevent more from being created.\n */\n AuthWrapper.prototype.deleteApp = function () {\n this.deleted_ = true;\n this.app_ = null;\n this.requestMap_.clear();\n };\n AuthWrapper.prototype.maxUploadRetryTime = function () {\n return this.maxUploadRetryTime_;\n };\n AuthWrapper.prototype.setMaxUploadRetryTime = function (time) {\n this.maxUploadRetryTime_ = time;\n };\n AuthWrapper.prototype.maxOperationRetryTime = function () {\n return this.maxOperationRetryTime_;\n };\n AuthWrapper.prototype.setMaxOperationRetryTime = function (time) {\n this.maxOperationRetryTime_ = time;\n };\n return AuthWrapper;\n}());\nexport { AuthWrapper };\n\n//# sourceMappingURL=authwrapper.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Defines methods used to actually send HTTP requests from\n * abstract representations.\n */\nimport firebase from '@firebase/app';\nimport * as array from './array';\nimport * as backoff from './backoff';\nimport * as errorsExports from './error';\nimport * as object from './object';\nimport * as promiseimpl from './promise_external';\nimport * as type from './type';\nimport * as UrlUtils from './url';\nimport * as XhrIoExports from './xhrio';\n/**\n * @struct\n * @template T\n */\nvar NetworkRequest = /** @class */ (function () {\n function NetworkRequest(url, method, headers, body, successCodes, additionalRetryCodes, callback, errorCallback, timeout, progressCallback, pool) {\n this.pendingXhr_ = null;\n this.backoffId_ = null;\n this.resolve_ = null;\n this.reject_ = null;\n this.canceled_ = false;\n this.appDelete_ = false;\n this.url_ = url;\n this.method_ = method;\n this.headers_ = headers;\n this.body_ = body;\n this.successCodes_ = successCodes.slice();\n this.additionalRetryCodes_ = additionalRetryCodes.slice();\n this.callback_ = callback;\n this.errorCallback_ = errorCallback;\n this.progressCallback_ = progressCallback;\n this.timeout_ = timeout;\n this.pool_ = pool;\n var self = this;\n this.promise_ = promiseimpl.make(function (resolve, reject) {\n self.resolve_ = resolve;\n self.reject_ = reject;\n self.start_();\n });\n }\n /**\n * Actually starts the retry loop.\n */\n NetworkRequest.prototype.start_ = function () {\n var self = this;\n function doTheRequest(backoffCallback, canceled) {\n if (canceled) {\n backoffCallback(false, new RequestEndStatus(false, null, true));\n return;\n }\n var xhr = self.pool_.createXhrIo();\n self.pendingXhr_ = xhr;\n function progressListener(progressEvent) {\n var loaded = progressEvent.loaded;\n var total = progressEvent.lengthComputable ? progressEvent.total : -1;\n if (self.progressCallback_ !== null) {\n self.progressCallback_(loaded, total);\n }\n }\n if (self.progressCallback_ !== null) {\n xhr.addUploadProgressListener(progressListener);\n }\n xhr\n .send(self.url_, self.method_, self.body_, self.headers_)\n .then(function (xhr) {\n if (self.progressCallback_ !== null) {\n xhr.removeUploadProgressListener(progressListener);\n }\n self.pendingXhr_ = null;\n xhr = xhr;\n var hitServer = xhr.getErrorCode() === XhrIoExports.ErrorCode.NO_ERROR;\n var status = xhr.getStatus();\n if (!hitServer || self.isRetryStatusCode_(status)) {\n var wasCanceled = xhr.getErrorCode() === XhrIoExports.ErrorCode.ABORT;\n backoffCallback(false, new RequestEndStatus(false, null, wasCanceled));\n return;\n }\n var successCode = array.contains(self.successCodes_, status);\n backoffCallback(true, new RequestEndStatus(successCode, xhr));\n });\n }\n /**\n * @param requestWentThrough True if the request eventually went\n * through, false if it hit the retry limit or was canceled.\n */\n function backoffDone(requestWentThrough, status) {\n var resolve = self.resolve_;\n var reject = self.reject_;\n var xhr = status.xhr;\n if (status.wasSuccessCode) {\n try {\n var result = self.callback_(xhr, xhr.getResponseText());\n if (type.isJustDef(result)) {\n resolve(result);\n }\n else {\n resolve();\n }\n }\n catch (e) {\n reject(e);\n }\n }\n else {\n if (xhr !== null) {\n var err = errorsExports.unknown();\n err.setServerResponseProp(xhr.getResponseText());\n if (self.errorCallback_) {\n reject(self.errorCallback_(xhr, err));\n }\n else {\n reject(err);\n }\n }\n else {\n if (status.canceled) {\n var err = self.appDelete_\n ? errorsExports.appDeleted()\n : errorsExports.canceled();\n reject(err);\n }\n else {\n var err = errorsExports.retryLimitExceeded();\n reject(err);\n }\n }\n }\n }\n if (this.canceled_) {\n backoffDone(false, new RequestEndStatus(false, null, true));\n }\n else {\n this.backoffId_ = backoff.start(doTheRequest, backoffDone, this.timeout_);\n }\n };\n /** @inheritDoc */\n NetworkRequest.prototype.getPromise = function () {\n return this.promise_;\n };\n /** @inheritDoc */\n NetworkRequest.prototype.cancel = function (appDelete) {\n this.canceled_ = true;\n this.appDelete_ = appDelete || false;\n if (this.backoffId_ !== null) {\n backoff.stop(this.backoffId_);\n }\n if (this.pendingXhr_ !== null) {\n this.pendingXhr_.abort();\n }\n };\n NetworkRequest.prototype.isRetryStatusCode_ = function (status) {\n // The codes for which to retry came from this page:\n // https://cloud.google.com/storage/docs/exponential-backoff\n var isFiveHundredCode = status >= 500 && status < 600;\n var extraRetryCodes = [\n // Request Timeout: web server didn't receive full request in time.\n 408,\n // Too Many Requests: you're getting rate-limited, basically.\n 429\n ];\n var isExtraRetryCode = array.contains(extraRetryCodes, status);\n var isRequestSpecificRetryCode = array.contains(this.additionalRetryCodes_, status);\n return isFiveHundredCode || isExtraRetryCode || isRequestSpecificRetryCode;\n };\n return NetworkRequest;\n}());\n/**\n * A collection of information about the result of a network request.\n * @param opt_canceled Defaults to false.\n * @struct\n */\nvar RequestEndStatus = /** @class */ (function () {\n function RequestEndStatus(wasSuccessCode, xhr, opt_canceled) {\n this.wasSuccessCode = wasSuccessCode;\n this.xhr = xhr;\n this.canceled = !!opt_canceled;\n }\n return RequestEndStatus;\n}());\nexport { RequestEndStatus };\nexport function addAuthHeader_(headers, authToken) {\n if (authToken !== null && authToken.length > 0) {\n headers['Authorization'] = 'Firebase ' + authToken;\n }\n}\nexport function addVersionHeader_(headers) {\n var number = typeof firebase !== 'undefined' ? firebase.SDK_VERSION : 'AppManager';\n headers['X-Firebase-Storage-Version'] = 'webjs/' + number;\n}\n/**\n * @template T\n */\nexport function makeRequest(requestInfo, authToken, pool) {\n var queryPart = UrlUtils.makeQueryString(requestInfo.urlParams);\n var url = requestInfo.url + queryPart;\n var headers = object.clone(requestInfo.headers);\n addAuthHeader_(headers, authToken);\n addVersionHeader_(headers);\n return new NetworkRequest(url, requestInfo.method, headers, requestInfo.body, requestInfo.successCodes, requestInfo.additionalRetryCodes, requestInfo.handler, requestInfo.errorHandler, requestInfo.timeout, requestInfo.progressCallback, pool);\n}\n\n//# sourceMappingURL=request.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @param f May be invoked\n * before the function returns.\n * @param callback Get all the arguments passed to the function\n * passed to f, including the initial boolean.\n */\nexport function start(f, callback, timeout) {\n // TODO(andysoto): make this code cleaner (probably refactor into an actual\n // type instead of a bunch of functions with state shared in the closure)\n var waitSeconds = 1;\n // Would type this as \"number\" but that doesn't work for Node so ¯\\_(ツ)_/¯\n var timeoutId = null;\n var hitTimeout = false;\n var cancelState = 0;\n function canceled() {\n return cancelState === 2;\n }\n var triggeredCallback = false;\n function triggerCallback() {\n if (!triggeredCallback) {\n triggeredCallback = true;\n callback.apply(null, arguments);\n }\n }\n function callWithDelay(millis) {\n timeoutId = setTimeout(function () {\n timeoutId = null;\n f(handler, canceled());\n }, millis);\n }\n function handler(success) {\n var var_args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n var_args[_i - 1] = arguments[_i];\n }\n if (triggeredCallback) {\n return;\n }\n if (success) {\n triggerCallback.apply(null, arguments);\n return;\n }\n var mustStop = canceled() || hitTimeout;\n if (mustStop) {\n triggerCallback.apply(null, arguments);\n return;\n }\n if (waitSeconds < 64) {\n /* TODO(andysoto): don't back off so quickly if we know we're offline. */\n waitSeconds *= 2;\n }\n var waitMillis;\n if (cancelState === 1) {\n cancelState = 2;\n waitMillis = 0;\n }\n else {\n waitMillis = (waitSeconds + Math.random()) * 1000;\n }\n callWithDelay(waitMillis);\n }\n var stopped = false;\n function stop(wasTimeout) {\n if (stopped) {\n return;\n }\n stopped = true;\n if (triggeredCallback) {\n return;\n }\n if (timeoutId !== null) {\n if (!wasTimeout) {\n cancelState = 2;\n }\n clearTimeout(timeoutId);\n callWithDelay(0);\n }\n else {\n if (!wasTimeout) {\n cancelState = 1;\n }\n }\n }\n callWithDelay(0);\n setTimeout(function () {\n hitTimeout = true;\n stop(true);\n }, timeout);\n return stop;\n}\n/**\n * Stops the retry loop from repeating.\n * If the function is currently \"in between\" retries, it is invoked immediately\n * with the second parameter as \"true\". Otherwise, it will be invoked once more\n * after the current invocation finishes iff the current invocation would have\n * triggered another retry.\n */\nexport function stop(id) {\n id(false);\n}\n\n//# sourceMappingURL=backoff.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as args from './implementation/args';\nimport { AuthWrapper } from './implementation/authwrapper';\nimport { Location } from './implementation/location';\nimport * as fbsPromiseImpl from './implementation/promise_external';\nimport * as RequestExports from './implementation/request';\nimport { Reference } from './reference';\n/**\n * A service that provides firebaseStorage.Reference instances.\n * @param opt_url gs:// url to a custom Storage Bucket\n *\n * @struct\n */\nvar Service = /** @class */ (function () {\n function Service(app, pool, url) {\n this.bucket_ = null;\n function maker(authWrapper, loc) {\n return new Reference(authWrapper, loc);\n }\n this.authWrapper_ = new AuthWrapper(app, maker, RequestExports.makeRequest, this, pool);\n this.app_ = app;\n if (url != null) {\n this.bucket_ = Location.makeFromBucketSpec(url);\n }\n else {\n var authWrapperBucket = this.authWrapper_.bucket();\n if (authWrapperBucket != null) {\n this.bucket_ = new Location(authWrapperBucket, '');\n }\n }\n this.internals_ = new ServiceInternals(this);\n }\n /**\n * Returns a firebaseStorage.Reference for the given path in the default\n * bucket.\n */\n Service.prototype.ref = function (path) {\n function validator(path) {\n if (/^[A-Za-z]+:\\/\\//.test(path)) {\n throw 'Expected child path but got a URL, use refFromURL instead.';\n }\n }\n args.validate('ref', [args.stringSpec(validator, true)], arguments);\n if (this.bucket_ == null) {\n throw new Error('No Storage Bucket defined in Firebase Options.');\n }\n var ref = new Reference(this.authWrapper_, this.bucket_);\n if (path != null) {\n return ref.child(path);\n }\n else {\n return ref;\n }\n };\n /**\n * Returns a firebaseStorage.Reference object for the given absolute URL,\n * which must be a gs:// or http[s]:// URL.\n */\n Service.prototype.refFromURL = function (url) {\n function validator(p) {\n if (!/^[A-Za-z]+:\\/\\//.test(p)) {\n throw 'Expected full URL but got a child path, use ref instead.';\n }\n try {\n Location.makeFromUrl(p);\n }\n catch (e) {\n throw 'Expected valid full URL but got an invalid one.';\n }\n }\n args.validate('refFromURL', [args.stringSpec(validator, false)], arguments);\n return new Reference(this.authWrapper_, url);\n };\n Object.defineProperty(Service.prototype, \"maxUploadRetryTime\", {\n get: function () {\n return this.authWrapper_.maxUploadRetryTime();\n },\n enumerable: true,\n configurable: true\n });\n Service.prototype.setMaxUploadRetryTime = function (time) {\n args.validate('setMaxUploadRetryTime', [args.nonNegativeNumberSpec()], arguments);\n this.authWrapper_.setMaxUploadRetryTime(time);\n };\n Object.defineProperty(Service.prototype, \"maxOperationRetryTime\", {\n get: function () {\n return this.authWrapper_.maxOperationRetryTime();\n },\n enumerable: true,\n configurable: true\n });\n Service.prototype.setMaxOperationRetryTime = function (time) {\n args.validate('setMaxOperationRetryTime', [args.nonNegativeNumberSpec()], arguments);\n this.authWrapper_.setMaxOperationRetryTime(time);\n };\n Object.defineProperty(Service.prototype, \"app\", {\n get: function () {\n return this.app_;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Service.prototype, \"INTERNAL\", {\n get: function () {\n return this.internals_;\n },\n enumerable: true,\n configurable: true\n });\n return Service;\n}());\nexport { Service };\n/**\n * @struct\n */\nvar ServiceInternals = /** @class */ (function () {\n function ServiceInternals(service) {\n this.service_ = service;\n }\n /**\n * Called when the associated app is deleted.\n * @see {!fbs.AuthWrapper.prototype.deleteApp}\n */\n ServiceInternals.prototype.delete = function () {\n this.service_.authWrapper_.deleteApp();\n return fbsPromiseImpl.resolve(undefined);\n };\n return ServiceInternals;\n}());\nexport { ServiceInternals };\n\n//# sourceMappingURL=service.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport firebase from '@firebase/app';\nimport { StringFormat } from './src/implementation/string';\nimport { TaskEvent } from './src/implementation/taskenums';\nimport { TaskState } from './src/implementation/taskenums';\nimport { XhrIoPool } from './src/implementation/xhriopool';\nimport { Reference } from './src/reference';\nimport { Service } from './src/service';\n/**\n * Type constant for Firebase Storage.\n */\nvar STORAGE_TYPE = 'storage';\nfunction factory(app, unused, opt_url) {\n return new Service(app, new XhrIoPool(), opt_url);\n}\nexport function registerStorage(instance) {\n var namespaceExports = {\n // no-inline\n TaskState: TaskState,\n TaskEvent: TaskEvent,\n StringFormat: StringFormat,\n Storage: Service,\n Reference: Reference\n };\n instance.INTERNAL.registerService(STORAGE_TYPE, factory, namespaceExports, undefined, \n // Allow multiple storage instances per app.\n true);\n}\nregisterStorage(firebase);\n\n//# sourceMappingURL=index.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use strict';\nvar CODES = {\n AVAILABLE_IN_WINDOW: 'only-available-in-window',\n AVAILABLE_IN_SW: 'only-available-in-sw',\n SHOULD_BE_INHERITED: 'should-be-overriden',\n BAD_SENDER_ID: 'bad-sender-id',\n INCORRECT_GCM_SENDER_ID: 'incorrect-gcm-sender-id',\n PERMISSION_DEFAULT: 'permission-default',\n PERMISSION_BLOCKED: 'permission-blocked',\n UNSUPPORTED_BROWSER: 'unsupported-browser',\n NOTIFICATIONS_BLOCKED: 'notifications-blocked',\n FAILED_DEFAULT_REGISTRATION: 'failed-serviceworker-registration',\n SW_REGISTRATION_EXPECTED: 'sw-registration-expected',\n GET_SUBSCRIPTION_FAILED: 'get-subscription-failed',\n INVALID_SAVED_TOKEN: 'invalid-saved-token',\n SW_REG_REDUNDANT: 'sw-reg-redundant',\n TOKEN_SUBSCRIBE_FAILED: 'token-subscribe-failed',\n TOKEN_SUBSCRIBE_NO_TOKEN: 'token-subscribe-no-token',\n TOKEN_SUBSCRIBE_NO_PUSH_SET: 'token-subscribe-no-push-set',\n USE_SW_BEFORE_GET_TOKEN: 'use-sw-before-get-token',\n INVALID_DELETE_TOKEN: 'invalid-delete-token',\n DELETE_TOKEN_NOT_FOUND: 'delete-token-not-found',\n DELETE_SCOPE_NOT_FOUND: 'delete-scope-not-found',\n BG_HANDLER_FUNCTION_EXPECTED: 'bg-handler-function-expected',\n NO_WINDOW_CLIENT_TO_MSG: 'no-window-client-to-msg',\n UNABLE_TO_RESUBSCRIBE: 'unable-to-resubscribe',\n NO_FCM_TOKEN_FOR_RESUBSCRIBE: 'no-fcm-token-for-resubscribe',\n FAILED_TO_DELETE_TOKEN: 'failed-to-delete-token',\n NO_SW_IN_REG: 'no-sw-in-reg',\n BAD_SCOPE: 'bad-scope',\n BAD_VAPID_KEY: 'bad-vapid-key',\n BAD_SUBSCRIPTION: 'bad-subscription',\n BAD_TOKEN: 'bad-token',\n BAD_PUSH_SET: 'bad-push-set',\n FAILED_DELETE_VAPID_KEY: 'failed-delete-vapid-key'\n};\nvar ERROR_MAP = (_a = {},\n _a[CODES.AVAILABLE_IN_WINDOW] = 'This method is available in a Window context.',\n _a[CODES.AVAILABLE_IN_SW] = 'This method is available in a service worker ' + 'context.',\n _a[CODES.SHOULD_BE_INHERITED] = 'This method should be overriden by ' + 'extended classes.',\n _a[CODES.BAD_SENDER_ID] = \"Please ensure that 'messagingSenderId' is set \" +\n 'correctly in the options passed into firebase.initializeApp().',\n _a[CODES.PERMISSION_DEFAULT] = 'The required permissions were not granted and ' + 'dismissed instead.',\n _a[CODES.PERMISSION_BLOCKED] = 'The required permissions were not granted and ' + 'blocked instead.',\n _a[CODES.UNSUPPORTED_BROWSER] = \"This browser doesn't support the API's \" +\n 'required to use the firebase SDK.',\n _a[CODES.NOTIFICATIONS_BLOCKED] = 'Notifications have been blocked.',\n _a[CODES.FAILED_DEFAULT_REGISTRATION] = 'We are unable to register the ' +\n 'default service worker. {$browserErrorMessage}',\n _a[CODES.SW_REGISTRATION_EXPECTED] = 'A service worker registration was the ' + 'expected input.',\n _a[CODES.GET_SUBSCRIPTION_FAILED] = 'There was an error when trying to get ' +\n 'any existing Push Subscriptions.',\n _a[CODES.INVALID_SAVED_TOKEN] = 'Unable to access details of the saved token.',\n _a[CODES.SW_REG_REDUNDANT] = 'The service worker being used for push was made ' + 'redundant.',\n _a[CODES.TOKEN_SUBSCRIBE_FAILED] = 'A problem occured while subscribing the ' + 'user to FCM: {$message}',\n _a[CODES.TOKEN_SUBSCRIBE_NO_TOKEN] = 'FCM returned no token when subscribing ' + 'the user to push.',\n _a[CODES.TOKEN_SUBSCRIBE_NO_PUSH_SET] = 'FCM returned an invalid response ' + 'when getting an FCM token.',\n _a[CODES.USE_SW_BEFORE_GET_TOKEN] = 'You must call useServiceWorker() before ' +\n 'calling getToken() to ensure your service worker is used.',\n _a[CODES.INVALID_DELETE_TOKEN] = 'You must pass a valid token into ' +\n 'deleteToken(), i.e. the token from getToken().',\n _a[CODES.DELETE_TOKEN_NOT_FOUND] = 'The deletion attempt for token could not ' +\n 'be performed as the token was not found.',\n _a[CODES.DELETE_SCOPE_NOT_FOUND] = 'The deletion attempt for service worker ' +\n 'scope could not be performed as the scope was not found.',\n _a[CODES.BG_HANDLER_FUNCTION_EXPECTED] = 'The input to ' + 'setBackgroundMessageHandler() must be a function.',\n _a[CODES.NO_WINDOW_CLIENT_TO_MSG] = 'An attempt was made to message a ' + 'non-existant window client.',\n _a[CODES.UNABLE_TO_RESUBSCRIBE] = 'There was an error while re-subscribing ' +\n 'the FCM token for push messaging. Will have to resubscribe the ' +\n 'user on next visit. {$message}',\n _a[CODES.NO_FCM_TOKEN_FOR_RESUBSCRIBE] = 'Could not find an FCM token ' +\n 'and as a result, unable to resubscribe. Will have to resubscribe the ' +\n 'user on next visit.',\n _a[CODES.FAILED_TO_DELETE_TOKEN] = 'Unable to delete the currently saved token.',\n _a[CODES.NO_SW_IN_REG] = 'Even though the service worker registration was ' +\n 'successful, there was a problem accessing the service worker itself.',\n _a[CODES.INCORRECT_GCM_SENDER_ID] = \"Please change your web app manifest's \" +\n \"'gcm_sender_id' value to '103953800507' to use Firebase messaging.\",\n _a[CODES.BAD_SCOPE] = 'The service worker scope must be a string with at ' +\n 'least one character.',\n _a[CODES.BAD_VAPID_KEY] = 'The public VAPID key must be a string with at ' + 'least one character.',\n _a[CODES.BAD_SUBSCRIPTION] = 'The subscription must be a valid ' + 'PushSubscription.',\n _a[CODES.BAD_TOKEN] = 'The FCM Token used for storage / lookup was not ' +\n 'a valid token string.',\n _a[CODES.BAD_PUSH_SET] = 'The FCM push set used for storage / lookup was not ' +\n 'not a valid push set string.',\n _a[CODES.FAILED_DELETE_VAPID_KEY] = 'The VAPID key could not be deleted.',\n _a);\nexport default {\n codes: CODES,\n map: ERROR_MAP\n};\nvar _a;\n\n//# sourceMappingURL=errors.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction toBase64(arrayBuffer) {\n var uint8Version = new Uint8Array(arrayBuffer);\n return window.btoa(String.fromCharCode.apply(null, uint8Version));\n}\nexport default function (arrayBuffer) {\n var base64String = toBase64(arrayBuffer);\n return base64String\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n};\n\n//# sourceMappingURL=array-buffer-to-base64.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport ControllerInterface from './controller-interface';\nimport Errors from '../models/errors';\nimport WorkerPageMessage from '../models/worker-page-message';\nimport DefaultSW from '../models/default-sw';\nimport NOTIFICATION_PERMISSION from '../models/notification-permission';\nimport { createSubscribe } from '@firebase/util';\nvar WindowController = /** @class */ (function (_super) {\n __extends(WindowController, _super);\n /**\n * A service that provides a MessagingService instance.\n * @param {!firebase.app.App} app\n */\n function WindowController(app) {\n var _this = _super.call(this, app) || this;\n _this.messageObserver_ = null;\n _this.onMessage_ = createSubscribe(function (observer) {\n _this.messageObserver_ = observer;\n });\n _this.tokenRefreshObserver_ = null;\n _this.onTokenRefresh_ = createSubscribe(function (observer) {\n _this.tokenRefreshObserver_ = observer;\n });\n _this.setupSWMessageListener_();\n return _this;\n }\n /**\n * This method returns an FCM token if it can be generated.\n * The return promise will reject if the browser doesn't support\n * FCM, if permission is denied for notifications or it's not\n * possible to generate a token.\n * @export\n * @return {Promise | Promise} Returns a promise the\n * resolves to an FCM token or null if permission isn't granted.\n */\n WindowController.prototype.getToken = function () {\n var _this = this;\n // Check that the required API's are available\n if (!this.isSupported_()) {\n return Promise.reject(this.errorFactory_.create(Errors.codes.UNSUPPORTED_BROWSER));\n }\n return this.manifestCheck_().then(function () {\n return _super.prototype.getToken.call(_this);\n });\n };\n /**\n * The method checks that a manifest is defined and has the correct GCM\n * sender ID.\n * @private\n * @return {Promise} Returns a promise that resolves if the manifest matches\n * our required sender ID\n */\n WindowController.prototype.manifestCheck_ = function () {\n var _this = this;\n if (this.manifestCheckPromise_) {\n return this.manifestCheckPromise_;\n }\n var manifestTag = document.querySelector('link[rel=\"manifest\"]');\n if (!manifestTag) {\n this.manifestCheckPromise_ = Promise.resolve();\n }\n else {\n this.manifestCheckPromise_ = fetch(manifestTag.href)\n .then(function (response) {\n return response.json();\n })\n .catch(function () {\n // If the download or parsing fails allow check.\n // We only want to error if we KNOW that the gcm_sender_id is incorrect.\n return Promise.resolve();\n })\n .then(function (manifestContent) {\n if (!manifestContent) {\n return;\n }\n if (!manifestContent['gcm_sender_id']) {\n return;\n }\n if (manifestContent['gcm_sender_id'] !== '103953800507') {\n throw _this.errorFactory_.create(Errors.codes.INCORRECT_GCM_SENDER_ID);\n }\n });\n }\n return this.manifestCheckPromise_;\n };\n /**\n * Request permission if it is not currently granted\n * @export\n * @returns {Promise} Resolves if the permission was granted, otherwise\n * rejects\n */\n WindowController.prototype.requestPermission = function () {\n var _this = this;\n if (Notification.permission === NOTIFICATION_PERMISSION.granted) {\n return Promise.resolve();\n }\n return new Promise(function (resolve, reject) {\n var managePermissionResult = function (result) {\n if (result === NOTIFICATION_PERMISSION.granted) {\n return resolve();\n }\n else if (result === NOTIFICATION_PERMISSION.denied) {\n return reject(_this.errorFactory_.create(Errors.codes.PERMISSION_BLOCKED));\n }\n else {\n return reject(_this.errorFactory_.create(Errors.codes.PERMISSION_DEFAULT));\n }\n };\n // The Notification.requestPermission API was changed to\n // return a promise so now have to handle both in case\n // browsers stop support callbacks for promised version\n var permissionPromise = Notification.requestPermission(function (result) {\n if (permissionPromise) {\n // Let the promise manage this\n return;\n }\n managePermissionResult(result);\n });\n if (permissionPromise) {\n // Prefer the promise version as it's the future API.\n permissionPromise.then(managePermissionResult);\n }\n });\n };\n /**\n * This method allows a developer to override the default service worker and\n * instead use a custom service worker.\n * @export\n * @param {!ServiceWorkerRegistration} registration The service worker\n * registration that should be used to receive the push messages.\n */\n WindowController.prototype.useServiceWorker = function (registration) {\n if (!(registration instanceof ServiceWorkerRegistration)) {\n throw this.errorFactory_.create(Errors.codes.SW_REGISTRATION_EXPECTED);\n }\n if (typeof this.registrationToUse_ !== 'undefined') {\n throw this.errorFactory_.create(Errors.codes.USE_SW_BEFORE_GET_TOKEN);\n }\n this.registrationToUse_ = registration;\n };\n /**\n * @export\n * @param {!firebase.Observer|function(*)} nextOrObserver An observer object\n * or a function triggered on message.\n * @param {function(!Error)=} optError Optional A function triggered on\n * message error.\n * @param {function()=} optCompleted Optional function triggered when the\n * observer is removed.\n * @return {!function()} The unsubscribe function for the observer.\n */\n WindowController.prototype.onMessage = function (nextOrObserver, optError, optCompleted) {\n return this.onMessage_(nextOrObserver, optError, optCompleted);\n };\n /**\n * @export\n * @param {!firebase.Observer|function()} nextOrObserver An observer object\n * or a function triggered on token refresh.\n * @param {function(!Error)=} optError Optional A function\n * triggered on token refresh error.\n * @param {function()=} optCompleted Optional function triggered when the\n * observer is removed.\n * @return {!function()} The unsubscribe function for the observer.\n */\n WindowController.prototype.onTokenRefresh = function (nextOrObserver, optError, optCompleted) {\n return this.onTokenRefresh_(nextOrObserver, optError, optCompleted);\n };\n /**\n * Given a registration, wait for the service worker it relates to\n * become activer\n * @private\n * @param {ServiceWorkerRegistration} registration Registration to wait\n * for service worker to become active\n * @return {Promise} Wait for service worker\n * registration to become active\n */\n WindowController.prototype.waitForRegistrationToActivate_ = function (registration) {\n var _this = this;\n var serviceWorker = registration.installing || registration.waiting || registration.active;\n return new Promise(function (resolve, reject) {\n if (!serviceWorker) {\n // This is a rare scenario but has occured in firefox\n reject(_this.errorFactory_.create(Errors.codes.NO_SW_IN_REG));\n return;\n }\n // Because the Promise function is called on next tick there is a\n // small chance that the worker became active or redundant already.\n if (serviceWorker.state === 'activated') {\n resolve(registration);\n return;\n }\n if (serviceWorker.state === 'redundant') {\n reject(_this.errorFactory_.create(Errors.codes.SW_REG_REDUNDANT));\n return;\n }\n var stateChangeListener = function () {\n if (serviceWorker.state === 'activated') {\n resolve(registration);\n }\n else if (serviceWorker.state === 'redundant') {\n reject(_this.errorFactory_.create(Errors.codes.SW_REG_REDUNDANT));\n }\n else {\n // Return early and wait to next state change\n return;\n }\n serviceWorker.removeEventListener('statechange', stateChangeListener);\n };\n serviceWorker.addEventListener('statechange', stateChangeListener);\n });\n };\n /**\n * This will regiater the default service worker and return the registration\n * @private\n * @return {Promise} The service worker\n * registration to be used for the push service.\n */\n WindowController.prototype.getSWRegistration_ = function () {\n var _this = this;\n if (this.registrationToUse_) {\n return this.waitForRegistrationToActivate_(this.registrationToUse_);\n }\n // Make the registration null so we know useServiceWorker will not\n // use a new service worker as registrationToUse_ is no longer undefined\n this.registrationToUse_ = null;\n return navigator.serviceWorker\n .register(DefaultSW.path, {\n scope: DefaultSW.scope\n })\n .catch(function (err) {\n throw _this.errorFactory_.create(Errors.codes.FAILED_DEFAULT_REGISTRATION, {\n browserErrorMessage: err.message\n });\n })\n .then(function (registration) {\n return _this.waitForRegistrationToActivate_(registration).then(function () {\n _this.registrationToUse_ = registration;\n // We update after activation due to an issue with Firefox v49 where\n // a race condition occassionally causes the service work to not\n // install\n registration.update();\n return registration;\n });\n });\n };\n /**\n * This method will set up a message listener to handle\n * events from the service worker that should trigger\n * events in the page.\n *\n * @private\n */\n WindowController.prototype.setupSWMessageListener_ = function () {\n var _this = this;\n if (!('serviceWorker' in navigator)) {\n return;\n }\n navigator.serviceWorker.addEventListener('message', function (event) {\n if (!event.data || !event.data[WorkerPageMessage.PARAMS.TYPE_OF_MSG]) {\n // Not a message from FCM\n return;\n }\n var workerPageMessage = event.data;\n switch (workerPageMessage[WorkerPageMessage.PARAMS.TYPE_OF_MSG]) {\n case WorkerPageMessage.TYPES_OF_MSG.PUSH_MSG_RECEIVED:\n case WorkerPageMessage.TYPES_OF_MSG.NOTIFICATION_CLICKED:\n var pushMessage = workerPageMessage[WorkerPageMessage.PARAMS.DATA];\n _this.messageObserver_.next(pushMessage);\n break;\n default:\n // Noop.\n break;\n }\n }, false);\n };\n /**\n * Checks to see if the required API's are valid or not.\n * @private\n * @return {boolean} Returns true if the desired APIs are available.\n */\n WindowController.prototype.isSupported_ = function () {\n return ('serviceWorker' in navigator &&\n 'PushManager' in window &&\n 'Notification' in window &&\n 'fetch' in window &&\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\n PushSubscription.prototype.hasOwnProperty('getKey'));\n };\n return WindowController;\n}(ControllerInterface));\nexport default WindowController;\n\n//# sourceMappingURL=window-controller.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use strict';\nvar FCM_APPLICATION_SERVER_KEY = [\n 0x04,\n 0x33,\n 0x94,\n 0xf7,\n 0xdf,\n 0xa1,\n 0xeb,\n 0xb1,\n 0xdc,\n 0x03,\n 0xa2,\n 0x5e,\n 0x15,\n 0x71,\n 0xdb,\n 0x48,\n 0xd3,\n 0x2e,\n 0xed,\n 0xed,\n 0xb2,\n 0x34,\n 0xdb,\n 0xb7,\n 0x47,\n 0x3a,\n 0x0c,\n 0x8f,\n 0xc4,\n 0xcc,\n 0xe1,\n 0x6f,\n 0x3c,\n 0x8c,\n 0x84,\n 0xdf,\n 0xab,\n 0xb6,\n 0x66,\n 0x3e,\n 0xf2,\n 0x0c,\n 0xd4,\n 0x8b,\n 0xfe,\n 0xe3,\n 0xf9,\n 0x76,\n 0x2f,\n 0x14,\n 0x1c,\n 0x63,\n 0x08,\n 0x6a,\n 0x6f,\n 0x2d,\n 0xb1,\n 0x1a,\n 0x95,\n 0xb0,\n 0xce,\n 0x37,\n 0xc0,\n 0x9c,\n 0x6e\n];\nvar SUBSCRIPTION_DETAILS = {\n userVisibleOnly: true,\n applicationServerKey: new Uint8Array(FCM_APPLICATION_SERVER_KEY)\n};\nexport default {\n ENDPOINT: 'https://fcm.googleapis.com',\n APPLICATION_SERVER_KEY: FCM_APPLICATION_SERVER_KEY,\n SUBSCRIPTION_OPTIONS: SUBSCRIPTION_DETAILS\n};\n\n//# sourceMappingURL=fcm-details.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use strict';\nimport { ErrorFactory } from '@firebase/util';\nimport Errors from './errors';\nimport arrayBufferToBase64 from '../helpers/array-buffer-to-base64';\nimport FCMDetails from './fcm-details';\nvar FCM_TOKEN_OBJ_STORE = 'fcm_token_object_Store';\nvar FCM_TOKEN_DETAILS_DB_VERSION = 1;\nvar TokenManager = /** @class */ (function () {\n function TokenManager() {\n this.errorFactory_ = new ErrorFactory('messaging', 'Messaging', Errors.map);\n this.openDbPromise_ = null;\n }\n /**\n * Get the indexedDB as a promsie.\n * @private\n * @return {Promise} The IndexedDB database\n */\n TokenManager.prototype.openDatabase_ = function () {\n if (this.openDbPromise_) {\n return this.openDbPromise_;\n }\n this.openDbPromise_ = new Promise(function (resolve, reject) {\n var request = indexedDB.open(TokenManager.DB_NAME, FCM_TOKEN_DETAILS_DB_VERSION);\n request.onerror = function (event) {\n reject(event.target.error);\n };\n request.onsuccess = function (event) {\n resolve(event.target.result);\n };\n request.onupgradeneeded = function (event) {\n var db = event.target.result;\n var objectStore = db.createObjectStore(FCM_TOKEN_OBJ_STORE, {\n keyPath: 'swScope'\n });\n // Make sure the sender ID can be searched\n objectStore.createIndex('fcmSenderId', 'fcmSenderId', {\n unique: false\n });\n objectStore.createIndex('fcmToken', 'fcmToken', {\n unique: true\n });\n };\n });\n return this.openDbPromise_;\n };\n /**\n * Close the currently open database.\n * @return {Promise} Returns the result of the promise chain.\n */\n TokenManager.prototype.closeDatabase = function () {\n var _this = this;\n if (this.openDbPromise_) {\n return this.openDbPromise_.then(function (db) {\n db.close();\n _this.openDbPromise_ = null;\n });\n }\n return Promise.resolve();\n };\n /**\n * Given a token, this method will look up the details in indexedDB.\n * @public\n * @param {string} fcmToken\n * @return {Promise} The details associated with that token.\n */\n TokenManager.prototype.getTokenDetailsFromToken = function (fcmToken) {\n return this.openDatabase_().then(function (db) {\n return new Promise(function (resolve, reject) {\n var transaction = db.transaction([FCM_TOKEN_OBJ_STORE]);\n var objectStore = transaction.objectStore(FCM_TOKEN_OBJ_STORE);\n var index = objectStore.index('fcmToken');\n var request = index.get(fcmToken);\n request.onerror = function (event) {\n reject(event.target.error);\n };\n request.onsuccess = function (event) {\n resolve(event.target.result);\n };\n });\n });\n };\n TokenManager.prototype.getTokenDetailsFromSWScope_ = function (swScope) {\n return this.openDatabase_().then(function (db) {\n return new Promise(function (resolve, reject) {\n var transaction = db.transaction([FCM_TOKEN_OBJ_STORE]);\n var objectStore = transaction.objectStore(FCM_TOKEN_OBJ_STORE);\n var scopeRequest = objectStore.get(swScope);\n scopeRequest.onerror = function (event) {\n reject(event.target.error);\n };\n scopeRequest.onsuccess = function (event) {\n resolve(event.target.result);\n };\n });\n });\n };\n TokenManager.prototype.getAllTokenDetailsForSenderId_ = function (senderId) {\n return this.openDatabase_().then(function (db) {\n return new Promise(function (resolve, reject) {\n var transaction = db.transaction([FCM_TOKEN_OBJ_STORE]);\n var objectStore = transaction.objectStore(FCM_TOKEN_OBJ_STORE);\n var senderIdTokens = [];\n var cursorRequest = objectStore.openCursor();\n cursorRequest.onerror = function (event) {\n reject(event.target.error);\n };\n cursorRequest.onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n if (cursor.value['fcmSenderId'] === senderId) {\n senderIdTokens.push(cursor.value);\n }\n cursor.continue();\n }\n else {\n resolve(senderIdTokens);\n }\n };\n });\n });\n };\n /**\n * Given a PushSubscription and messagingSenderId, get an FCM token.\n * @public\n * @param {string} senderId The 'messagingSenderId' to tie the token to.\n * @param {PushSubscription} subscription The PushSusbcription to \"federate\".\n * @param {string=} pushSet If defined this will swap the subscription for\n * matching FCM token.\n * @return {Promise} Returns the FCM token to be used in place\n * of the PushSubscription.\n */\n TokenManager.prototype.subscribeToFCM = function (senderId, subscription, pushSet) {\n var _this = this;\n var p256dh = arrayBufferToBase64(subscription['getKey']('p256dh'));\n var auth = arrayBufferToBase64(subscription['getKey']('auth'));\n var fcmSubscribeBody = \"authorized_entity=\" + senderId + \"&\" +\n (\"endpoint=\" + subscription.endpoint + \"&\") +\n (\"encryption_key=\" + p256dh + \"&\") +\n (\"encryption_auth=\" + auth);\n if (pushSet) {\n fcmSubscribeBody += \"&pushSet=\" + pushSet;\n }\n var headers = new Headers();\n headers.append('Content-Type', 'application/x-www-form-urlencoded');\n var subscribeOptions = {\n method: 'POST',\n headers: headers,\n body: fcmSubscribeBody\n };\n return fetch(FCMDetails.ENDPOINT + '/fcm/connect/subscribe', subscribeOptions)\n .then(function (response) { return response.json(); })\n .then(function (response) {\n var fcmTokenResponse = response;\n if (fcmTokenResponse['error']) {\n var message = fcmTokenResponse['error']['message'];\n throw _this.errorFactory_.create(Errors.codes.TOKEN_SUBSCRIBE_FAILED, {\n message: message\n });\n }\n if (!fcmTokenResponse['token']) {\n throw _this.errorFactory_.create(Errors.codes.TOKEN_SUBSCRIBE_NO_TOKEN);\n }\n if (!fcmTokenResponse['pushSet']) {\n throw _this.errorFactory_.create(Errors.codes.TOKEN_SUBSCRIBE_NO_PUSH_SET);\n }\n return {\n token: fcmTokenResponse['token'],\n pushSet: fcmTokenResponse['pushSet']\n };\n });\n };\n /**\n * Checks the that fields in the PushSubscription are equivalent to the\n * details stores in the masterTokenDetails.\n * @private\n * @param {PushSubscription} subscription The push subscription we expect\n * the master token to match.\n * @param {Object} masterTokenDetails The saved details we wish to compare\n * with the PushSubscription\n * @return {boolean} true if the subscription and token details are\n * equivalent.\n */\n TokenManager.prototype.isSameSubscription_ = function (subscription, masterTokenDetails) {\n // getKey() isn't defined in the PushSubscription externs file, hence\n // subscription['getKey']('').\n return (subscription.endpoint === masterTokenDetails['endpoint'] &&\n arrayBufferToBase64(subscription['getKey']('auth')) ===\n masterTokenDetails['auth'] &&\n arrayBufferToBase64(subscription['getKey']('p256dh')) ===\n masterTokenDetails['p256dh']);\n };\n /**\n * Save the details for the fcm token for re-use at a later date.\n * @private\n * @param {string} senderId The 'messagingSenderId' used for this project\n * @param {ServiceWorkerRegistration} swRegistration The service worker\n * used to subscribe the user for web push\n * @param {PushSubscription} subscription The push subscription passed to\n * FCM for the current token.\n * @param {string} fcmToken The FCM token currently used on this\n * device.\n * @param {string} fcmPushSet The FCM push tied to the fcm token.\n * @return {Promise}\n */\n TokenManager.prototype.saveTokenDetails_ = function (senderId, swRegistration, subscription, fcmToken, fcmPushSet) {\n var details = {\n swScope: swRegistration.scope,\n endpoint: subscription.endpoint,\n auth: arrayBufferToBase64(subscription['getKey']('auth')),\n p256dh: arrayBufferToBase64(subscription['getKey']('p256dh')),\n fcmToken: fcmToken,\n fcmPushSet: fcmPushSet,\n fcmSenderId: senderId\n };\n return this.openDatabase_().then(function (db) {\n return new Promise(function (resolve, reject) {\n var transaction = db.transaction([FCM_TOKEN_OBJ_STORE], 'readwrite');\n var objectStore = transaction.objectStore(FCM_TOKEN_OBJ_STORE);\n var request = objectStore.put(details);\n request.onerror = function (event) {\n reject(event.target.error);\n };\n request.onsuccess = function (event) {\n resolve();\n };\n });\n });\n };\n /**\n * Returns the saved FCM Token if one is available and still valid,\n * otherwise `null` is returned.\n * @param {string} senderId This should be the sender ID associated with the\n * FCM Token being retrieved.\n * @param {ServiceWorkerRegistration} swRegistration Registration to be used\n * to subscribe the user to push.\n * @return {Promise | Promise} Returns the saved FCM Token if\n * avilable and valid.\n * @export\n */\n TokenManager.prototype.getSavedToken = function (senderId, swRegistration) {\n var _this = this;\n if (!(swRegistration instanceof ServiceWorkerRegistration)) {\n return Promise.reject(this.errorFactory_.create(Errors.codes.SW_REGISTRATION_EXPECTED));\n }\n if (typeof senderId !== 'string' || senderId.length === 0) {\n return Promise.reject(this.errorFactory_.create(Errors.codes.BAD_SENDER_ID));\n }\n return this.getAllTokenDetailsForSenderId_(senderId)\n .then(function (allTokenDetails) {\n if (allTokenDetails.length === 0) {\n return;\n }\n var index = allTokenDetails.findIndex(function (tokenDetails) {\n return (swRegistration.scope === tokenDetails['swScope'] &&\n senderId === tokenDetails['fcmSenderId']);\n });\n if (index === -1) {\n return;\n }\n return allTokenDetails[index];\n })\n .then(function (tokenDetails) {\n if (!tokenDetails) {\n return;\n }\n return swRegistration.pushManager\n .getSubscription()\n .catch(function (err) {\n throw _this.errorFactory_.create(Errors.codes.GET_SUBSCRIPTION_FAILED);\n })\n .then(function (subscription) {\n if (subscription &&\n _this.isSameSubscription_(subscription, tokenDetails)) {\n return tokenDetails['fcmToken'];\n }\n });\n });\n };\n /**\n * Creates a new FCM token.\n */\n TokenManager.prototype.createToken = function (senderId, swRegistration) {\n var _this = this;\n if (typeof senderId !== 'string' || senderId.length === 0) {\n return Promise.reject(this.errorFactory_.create(Errors.codes.BAD_SENDER_ID));\n }\n if (!(swRegistration instanceof ServiceWorkerRegistration)) {\n return Promise.reject(this.errorFactory_.create(Errors.codes.SW_REGISTRATION_EXPECTED));\n }\n // Check for existing subscription first\n var subscription;\n var fcmTokenDetails;\n return swRegistration.pushManager\n .getSubscription()\n .then(function (subscription) {\n if (subscription) {\n return subscription;\n }\n return swRegistration.pushManager.subscribe(FCMDetails.SUBSCRIPTION_OPTIONS);\n })\n .then(function (sub) {\n subscription = sub;\n return _this.subscribeToFCM(senderId, subscription);\n })\n .then(function (tokenDetails) {\n fcmTokenDetails = tokenDetails;\n return _this.saveTokenDetails_(senderId, swRegistration, subscription, fcmTokenDetails['token'], fcmTokenDetails['pushSet']);\n })\n .then(function () { return fcmTokenDetails['token']; });\n };\n /**\n * This method deletes details of the current FCM token.\n * It's returning a promise in case we need to move to an async\n * method for deleting at a later date.\n * @param {string} token Token to be deleted\n * @return {Promise} Resolves once the FCM token details have been\n * deleted and returns the deleted details.\n */\n TokenManager.prototype.deleteToken = function (token) {\n var _this = this;\n if (typeof token !== 'string' || token.length === 0) {\n return Promise.reject(this.errorFactory_.create(Errors.codes.INVALID_DELETE_TOKEN));\n }\n return this.getTokenDetailsFromToken(token).then(function (details) {\n if (!details) {\n throw _this.errorFactory_.create(Errors.codes.DELETE_TOKEN_NOT_FOUND);\n }\n return _this.openDatabase_().then(function (db) {\n return new Promise(function (resolve, reject) {\n var transaction = db.transaction([FCM_TOKEN_OBJ_STORE], 'readwrite');\n var objectStore = transaction.objectStore(FCM_TOKEN_OBJ_STORE);\n var request = objectStore.delete(details['swScope']);\n request.onerror = function (event) {\n reject(event.target.error);\n };\n request.onsuccess = function (event) {\n if (event.target.result === 0) {\n reject(_this.errorFactory_.create(Errors.codes.FAILED_TO_DELETE_TOKEN));\n return;\n }\n resolve(details);\n };\n });\n });\n });\n };\n return TokenManager;\n}());\nexport default TokenManager;\n\n//# sourceMappingURL=token-manager.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use strict';\nexport default {\n granted: 'granted',\n default: 'default',\n denied: 'denied'\n};\n\n//# sourceMappingURL=notification-permission.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use strict';\nimport { ErrorFactory } from '@firebase/util';\nimport Errors from '../models/errors';\nimport TokenManager from '../models/token-manager';\nimport NOTIFICATION_PERMISSION from '../models/notification-permission';\nvar SENDER_ID_OPTION_NAME = 'messagingSenderId';\nvar ControllerInterface = /** @class */ (function () {\n /**\n * An interface of the Messaging Service API\n * @param {!firebase.app.App} app\n */\n function ControllerInterface(app) {\n var _this = this;\n this.errorFactory_ = new ErrorFactory('messaging', 'Messaging', Errors.map);\n if (!app.options[SENDER_ID_OPTION_NAME] ||\n typeof app.options[SENDER_ID_OPTION_NAME] !== 'string') {\n throw this.errorFactory_.create(Errors.codes.BAD_SENDER_ID);\n }\n this.messagingSenderId_ = app.options[SENDER_ID_OPTION_NAME];\n this.tokenManager_ = new TokenManager();\n this.app = app;\n this.INTERNAL = {};\n this.INTERNAL.delete = function () { return _this.delete; };\n }\n /**\n * @export\n * @return {Promise | Promise} Returns a promise that\n * resolves to an FCM token.\n */\n ControllerInterface.prototype.getToken = function () {\n var _this = this;\n // Check with permissions\n var currentPermission = this.getNotificationPermission_();\n if (currentPermission !== NOTIFICATION_PERMISSION.granted) {\n if (currentPermission === NOTIFICATION_PERMISSION.denied) {\n return Promise.reject(this.errorFactory_.create(Errors.codes.NOTIFICATIONS_BLOCKED));\n }\n // We must wait for permission to be granted\n return Promise.resolve(null);\n }\n return this.getSWRegistration_().then(function (registration) {\n return _this.tokenManager_\n .getSavedToken(_this.messagingSenderId_, registration)\n .then(function (token) {\n if (token) {\n return token;\n }\n return _this.tokenManager_.createToken(_this.messagingSenderId_, registration);\n });\n });\n };\n /**\n * This method deletes tokens that the token manager looks after and then\n * unregisters the push subscription if it exists.\n * @export\n * @param {string} token\n * @return {Promise}\n */\n ControllerInterface.prototype.deleteToken = function (token) {\n var _this = this;\n return this.tokenManager_.deleteToken(token).then(function () {\n return _this.getSWRegistration_()\n .then(function (registration) {\n if (registration) {\n return registration.pushManager.getSubscription();\n }\n })\n .then(function (subscription) {\n if (subscription) {\n return subscription.unsubscribe();\n }\n });\n });\n };\n ControllerInterface.prototype.getSWRegistration_ = function () {\n throw this.errorFactory_.create(Errors.codes.SHOULD_BE_INHERITED);\n };\n //\n // The following methods should only be available in the window.\n //\n ControllerInterface.prototype.requestPermission = function () {\n throw this.errorFactory_.create(Errors.codes.AVAILABLE_IN_WINDOW);\n };\n /**\n * @export\n * @param {!ServiceWorkerRegistration} registration\n */\n ControllerInterface.prototype.useServiceWorker = function (registration) {\n throw this.errorFactory_.create(Errors.codes.AVAILABLE_IN_WINDOW);\n };\n /**\n * @export\n * @param {!firebase.Observer|function(*)} nextOrObserver\n * @param {function(!Error)=} optError\n * @param {function()=} optCompleted\n * @return {!function()}\n */\n ControllerInterface.prototype.onMessage = function (nextOrObserver, optError, optCompleted) {\n throw this.errorFactory_.create(Errors.codes.AVAILABLE_IN_WINDOW);\n };\n /**\n * @export\n * @param {!firebase.Observer|function()} nextOrObserver An observer object\n * or a function triggered on token refresh.\n * @param {function(!Error)=} optError Optional A function\n * triggered on token refresh error.\n * @param {function()=} optCompleted Optional function triggered when the\n * observer is removed.\n * @return {!function()} The unsubscribe function for the observer.\n */\n ControllerInterface.prototype.onTokenRefresh = function (nextOrObserver, optError, optCompleted) {\n throw this.errorFactory_.create(Errors.codes.AVAILABLE_IN_WINDOW);\n };\n //\n // The following methods are used by the service worker only.\n //\n /**\n * @export\n * @param {function(Object)} callback\n */\n ControllerInterface.prototype.setBackgroundMessageHandler = function (callback) {\n throw this.errorFactory_.create(Errors.codes.AVAILABLE_IN_SW);\n };\n //\n // The following methods are used by the service themselves and not exposed\n // publicly or not expected to be used by developers.\n //\n /**\n * This method is required to adhere to the Firebase interface.\n * It closes any currently open indexdb database connections.\n */\n ControllerInterface.prototype.delete = function () {\n return this.tokenManager_.closeDatabase();\n };\n /**\n * Returns the current Notification Permission state.\n * @private\n * @return {string} The currenct permission state.\n */\n ControllerInterface.prototype.getNotificationPermission_ = function () {\n return Notification.permission;\n };\n /**\n * @protected\n * @returns {TokenManager}\n */\n ControllerInterface.prototype.getTokenManager = function () {\n return this.tokenManager_;\n };\n return ControllerInterface;\n}());\nexport default ControllerInterface;\n\n//# sourceMappingURL=controller-interface.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use strict';\n// These fields are strings to prevent closure from thinking goog.getMsg\n// should be used to initialise the values\nvar PARAMS = {\n TYPE_OF_MSG: 'firebase-messaging-msg-type',\n DATA: 'firebase-messaging-msg-data'\n};\n// This value isn't using the TYPE_OF_MSG short hand as closure\n// expects the variable to be defined via goog.getMsg\nvar msgType = {\n PUSH_MSG_RECEIVED: 'push-msg-received',\n NOTIFICATION_CLICKED: 'notification-clicked'\n};\nvar createNewMsg = function (msgType, msgData) {\n var message = (_a = {},\n _a[PARAMS.TYPE_OF_MSG] = msgType,\n _a[PARAMS.DATA] = msgData,\n _a);\n return message;\n var _a;\n};\nexport default {\n PARAMS: PARAMS,\n TYPES_OF_MSG: msgType,\n createNewMsg: createNewMsg\n};\n\n//# sourceMappingURL=worker-page-message.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use strict';\nexport default {\n path: '/firebase-messaging-sw.js',\n scope: '/firebase-cloud-messaging-push-scope'\n};\n\n//# sourceMappingURL=default-sw.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport ControllerInterface from './controller-interface';\nimport Errors from '../models/errors';\nimport WorkerPageMessage from '../models/worker-page-message';\nimport FCMDetails from '../models/fcm-details';\nvar FCM_MSG = 'FCM_MSG';\nvar SWController = /** @class */ (function (_super) {\n __extends(SWController, _super);\n function SWController(app) {\n var _this = _super.call(this, app) || this;\n self.addEventListener('push', function (e) { return _this.onPush_(e); }, false);\n self.addEventListener('pushsubscriptionchange', function (e) { return _this.onSubChange_(e); }, false);\n self.addEventListener('notificationclick', function (e) { return _this.onNotificationClick_(e); }, false);\n /**\n * @private\n * @type {function(Object)|null}\n */\n _this.bgMessageHandler_ = null;\n return _this;\n }\n /**\n * A handler for push events that shows notifications based on the content of\n * the payload.\n *\n * The payload must be a JSON-encoded Object with a `notification` key. The\n * value of the `notification` property will be used as the NotificationOptions\n * object passed to showNotification. Additionally, the `title` property of the\n * notification object will be used as the title.\n *\n * If there is no notification data in the payload then no notification will be\n * shown.\n * @private\n */\n SWController.prototype.onPush_ = function (event) {\n var _this = this;\n var msgPayload;\n try {\n msgPayload = event.data.json();\n }\n catch (err) {\n // Not JSON so not an FCM message\n return;\n }\n var handleMsgPromise = this.hasVisibleClients_().then(function (hasVisibleClients) {\n if (hasVisibleClients) {\n // Do not need to show a notification.\n if (msgPayload.notification || _this.bgMessageHandler_) {\n // Send to page\n return _this.sendMessageToWindowClients_(msgPayload);\n }\n return;\n }\n var notificationDetails = _this.getNotificationData_(msgPayload);\n if (notificationDetails) {\n var notificationTitle = notificationDetails.title || '';\n return self.registration.showNotification(notificationTitle, notificationDetails);\n }\n else if (_this.bgMessageHandler_) {\n return _this.bgMessageHandler_(msgPayload);\n }\n });\n event.waitUntil(handleMsgPromise);\n };\n /**\n * @private\n */\n SWController.prototype.onSubChange_ = function (event) {\n var _this = this;\n var promiseChain = this.getToken().then(function (token) {\n if (!token) {\n // We can't resubscribe if we don't have an FCM token for this scope.\n throw _this.errorFactory_.create(Errors.codes.NO_FCM_TOKEN_FOR_RESUBSCRIBE);\n }\n var tokenDetails = null;\n var tokenManager = _this.getTokenManager();\n return tokenManager\n .getTokenDetailsFromToken(token)\n .then(function (details) {\n tokenDetails = details;\n if (!tokenDetails) {\n throw _this.errorFactory_.create(Errors.codes.INVALID_SAVED_TOKEN);\n }\n // Attempt to get a new subscription\n return self.registration.pushManager.subscribe(FCMDetails.SUBSCRIPTION_OPTIONS);\n })\n .then(function (newSubscription) {\n // Send new subscription to FCM.\n return tokenManager.subscribeToFCM(tokenDetails.fcmSenderId, newSubscription, tokenDetails.fcmPushSet);\n })\n .catch(function (err) {\n // The best thing we can do is log this to the terminal so\n // developers might notice the error.\n return tokenManager.deleteToken(tokenDetails.fcmToken).then(function () {\n throw _this.errorFactory_.create(Errors.codes.UNABLE_TO_RESUBSCRIBE, {\n message: err\n });\n });\n });\n });\n event.waitUntil(promiseChain);\n };\n /**\n * @private\n */\n SWController.prototype.onNotificationClick_ = function (event) {\n var _this = this;\n if (!(event.notification &&\n event.notification.data &&\n event.notification.data[FCM_MSG])) {\n // Not an FCM notification, do nothing.\n return;\n }\n // Prevent other listeners from receiving the event\n event.stopImmediatePropagation();\n event.notification.close();\n var msgPayload = event.notification.data[FCM_MSG];\n var clickAction = msgPayload['notification']['click_action'];\n if (!clickAction) {\n // Nothing to do.\n return;\n }\n var promiseChain = this.getWindowClient_(clickAction)\n .then(function (windowClient) {\n if (!windowClient) {\n // Unable to find window client so need to open one.\n return self.clients.openWindow(clickAction);\n }\n return windowClient;\n })\n .then(function (windowClient) {\n if (!windowClient) {\n // Window Client will not be returned if it's for a third party origin.\n return;\n }\n // Delete notification data from payload before sending to the page.\n var notificationData = msgPayload['notification'];\n delete msgPayload['notification'];\n var internalMsg = WorkerPageMessage.createNewMsg(WorkerPageMessage.TYPES_OF_MSG.NOTIFICATION_CLICKED, msgPayload);\n // Attempt to send a message to the client to handle the data\n // Is affected by: https://github.com/slightlyoff/ServiceWorker/issues/728\n return _this.attemptToMessageClient_(windowClient, internalMsg);\n });\n event.waitUntil(promiseChain);\n };\n /**\n * @private\n * @param {Object} msgPayload\n * @return {NotificationOptions|undefined}\n */\n SWController.prototype.getNotificationData_ = function (msgPayload) {\n if (!msgPayload) {\n return;\n }\n if (typeof msgPayload.notification !== 'object') {\n return;\n }\n var notificationInformation = Object.assign({}, msgPayload.notification);\n // Put the message payload under FCM_MSG name so we can identify the\n // notification as being an FCM notification vs a notification from\n // somewhere else (i.e. normal web push or developer generated\n // notification).\n notificationInformation['data'] = (_a = {},\n _a[FCM_MSG] = msgPayload,\n _a);\n return notificationInformation;\n var _a;\n };\n /**\n * Calling setBackgroundMessageHandler will opt in to some specific\n * behaviours.\n * 1.) If a notification doesn't need to be shown due to a window already\n * being visible, then push messages will be sent to the page.\n * 2.) If a notification needs to be shown, and the message contains no\n * notification data this method will be called\n * and the promise it returns will be passed to event.waitUntil.\n * If you do not set this callback then all push messages will let and the\n * developer can handle them in a their own 'push' event callback\n * @export\n * @param {function(Object)} callback The callback to be called when a push\n * message is received and a notification must be shown. The callback will\n * be given the data from the push message.\n */\n SWController.prototype.setBackgroundMessageHandler = function (callback) {\n if (callback && typeof callback !== 'function') {\n throw this.errorFactory_.create(Errors.codes.BG_HANDLER_FUNCTION_EXPECTED);\n }\n this.bgMessageHandler_ = callback;\n };\n /**\n * @private\n * @param {string} url The URL to look for when focusing a client.\n * @return {Object} Returns an existing window client or a newly opened\n * WindowClient.\n */\n SWController.prototype.getWindowClient_ = function (url) {\n // Use URL to normalize the URL when comparing to windowClients.\n // This at least handles whether to include trailing slashes or not\n var parsedURL = new URL(url).href;\n return self.clients\n .matchAll({\n type: 'window',\n includeUncontrolled: true\n })\n .then(function (clientList) {\n var suitableClient = null;\n for (var i = 0; i < clientList.length; i++) {\n var parsedClientUrl = new URL(clientList[i].url).href;\n if (parsedClientUrl === parsedURL) {\n suitableClient = clientList[i];\n break;\n }\n }\n if (suitableClient) {\n suitableClient.focus();\n return suitableClient;\n }\n });\n };\n /**\n * This message will attempt to send the message to a window client.\n * @private\n * @param {Object} client The WindowClient to send the message to.\n * @param {Object} message The message to send to the client.\n * @returns {Promise} Returns a promise that resolves after sending the\n * message. This does not guarantee that the message was successfully\n * received.\n */\n SWController.prototype.attemptToMessageClient_ = function (client, message) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n if (!client) {\n return reject(_this.errorFactory_.create(Errors.codes.NO_WINDOW_CLIENT_TO_MSG));\n }\n client.postMessage(message);\n resolve();\n });\n };\n /**\n * @private\n * @returns {Promise} If there is currently a visible WindowClient,\n * this method will resolve to true, otherwise false.\n */\n SWController.prototype.hasVisibleClients_ = function () {\n return self.clients\n .matchAll({\n type: 'window',\n includeUncontrolled: true\n })\n .then(function (clientList) {\n return clientList.some(function (client) { return client.visibilityState === 'visible'; });\n });\n };\n /**\n * @private\n * @param {Object} msgPayload The data from the push event that should be sent\n * to all available pages.\n * @returns {Promise} Returns a promise that resolves once the message\n * has been sent to all WindowClients.\n */\n SWController.prototype.sendMessageToWindowClients_ = function (msgPayload) {\n var _this = this;\n return self.clients\n .matchAll({\n type: 'window',\n includeUncontrolled: true\n })\n .then(function (clientList) {\n var internalMsg = WorkerPageMessage.createNewMsg(WorkerPageMessage.TYPES_OF_MSG.PUSH_MSG_RECEIVED, msgPayload);\n return Promise.all(clientList.map(function (client) {\n return _this.attemptToMessageClient_(client, internalMsg);\n }));\n });\n };\n /**\n * This will register the default service worker and return the registration.\n * @private\n * @return {Promise} The service worker\n * registration to be used for the push service.\n */\n SWController.prototype.getSWRegistration_ = function () {\n return Promise.resolve(self.registration);\n };\n return SWController;\n}(ControllerInterface));\nexport default SWController;\n\n//# sourceMappingURL=sw-controller.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n'use strict';\nimport WindowController from './src/controllers/window-controller';\nimport SWController from './src/controllers/sw-controller';\nimport { firebase } from '@firebase/app';\nexport function registerMessaging(instance) {\n var messagingName = 'messaging';\n var factoryMethod = function (app) {\n if (self && 'ServiceWorkerGlobalScope' in self) {\n return new SWController(app);\n }\n // Assume we are in the window context.\n return new WindowController(app);\n };\n var namespaceExports = {\n // no-inline\n Messaging: WindowController\n };\n instance.INTERNAL.registerService(messagingName, factoryMethod, namespaceExports);\n}\nregisterMessaging(firebase);\n\n//# sourceMappingURL=index.js.map\n","(function() {var g,goog=goog||{},k=this;function l(a){return\"string\"==typeof a}function aa(){}\nfunction ba(a){var b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b}function n(a){return\"array\"==ba(a)}function ca(a){var b=ba(a);return\"array\"==b||\"object\"==b&&\"number\"==typeof a.length}function da(a){return\"function\"==ba(a)}function p(a){var b=typeof a;return\"object\"==b&&null!=a||\"function\"==b}var q=\"closure_uid_\"+(1E9*Math.random()>>>0),ea=0;function fa(a,b,c){return a.call.apply(a.bind,arguments)}\nfunction ha(a,b,c){if(!a)throw Error();if(2b?1:0};function na(a,b){b.unshift(a);ja.call(this,ka.apply(null,b));b.shift()}u(na,ja);na.prototype.name=\"AssertionError\";function oa(a,b){throw new na(\"Failure\"+(a?\": \"+a:\"\"),Array.prototype.slice.call(arguments,1));};function w(){0!=qa&&(ra[this[q]||(this[q]=++ea)]=this);this.i=this.i;this.w=this.w}var qa=0,ra={};w.prototype.i=!1;w.prototype.Z=function(){if(!this.i&&(this.i=!0,this.A(),0!=qa)){var a=this[q]||(this[q]=++ea);delete ra[a]}};w.prototype.A=function(){if(this.w)for(;this.w.length;)this.w.shift()()};var sa=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if(l(a))return l(b)&&1==b.length?a.indexOf(b,0):-1;for(var c=0;cb?null:l(a)?a.charAt(b):a[b]}function wa(a){if(!n(a))for(var b=a.length-1;0<=b;b--)delete a[b];a.length=0}function xa(a){return Array.prototype.concat.apply([],arguments)}function ya(a){var b=a.length;if(0parseFloat(Qa)){Pa=String(Sa);break a}}Pa=Qa}var Ja={};\nfunction Ta(a){return Ia(a,function(){for(var b=0,c=la(String(Pa)).split(\".\"),d=la(String(a)).split(\".\"),e=Math.max(c.length,d.length),f=0;0==b&&f=a.keyCode)a.keyCode=-1}catch(b){}};var bb=\"closure_listenable_\"+(1E6*Math.random()|0);function cb(a){return!(!a||!a[bb])}var db=0;function eb(a,b,c,d,e){this.listener=a;this.a=null;this.src=b;this.type=c;this.capture=!!d;this.ga=e;this.key=++db;this.Y=this.ca=!1}function fb(a){a.Y=!0;a.listener=null;a.a=null;a.src=null;a.ga=null};function gb(a){this.src=a;this.a={};this.b=0}gb.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.a[f];a||(a=this.a[f]=[],this.b++);var h=hb(a,b,d,e);-1d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(h){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.a;e;e=e.parentNode)d.push(e);a=a.type;for(e=d.length-1;0<=e;e--){b.a=d[e];var f=xb(d[e],a,!0,b);c=c&&f}for(e=0;e>>0);function pb(a){if(da(a))return a;a[zb]||(a[zb]=function(b){return a.handleEvent(b)});return a[zb]};function B(){w.call(this);this.c=new gb(this);this.P=this;this.K=null}u(B,w);B.prototype[bb]=!0;g=B.prototype;g.addEventListener=function(a,b,c,d){nb(this,a,b,c,d)};g.removeEventListener=function(a,b,c,d){vb(this,a,b,c,d)};\ng.dispatchEvent=function(a){var b,c=this.K;if(c)for(b=[];c;c=c.K)b.push(c);c=this.P;var d=a.type||a;if(l(a))a=new A(a,c);else if(a instanceof A)a.target=a.target||c;else{var e=a;a=new A(d,c);Ga(a,e)}e=!0;if(b)for(var f=b.length-1;0<=f;f--){var h=a.a=b[f];e=Ab(h,d,!0,a)&&e}h=a.a=c;e=Ab(h,d,!0,a)&&e;e=Ab(h,d,!1,a)&&e;if(b)for(f=0;fb.b&&(b.b++,a.next=b.a,b.a=a)}Wb=!1};function Xb(a,b){B.call(this);this.b=a||1;this.a=b||k;this.f=r(this.kb,this);this.g=t()}u(Xb,B);g=Xb.prototype;g.$=!1;g.L=null;g.kb=function(){if(this.$){var a=t()-this.g;0=lc(this).value)for(da(b)&&(b=b()),a=new dc(a,String(b),this.f),c&&(a.a=c),c=this;c;)c=c.a};\nvar mc={},nc=null;function oc(a){nc||(nc=new fc(\"\"),mc[\"\"]=nc,nc.c=jc);var b;if(!(b=mc[a])){b=new fc(a);var c=a.lastIndexOf(\".\"),d=a.substr(c+1);c=oc(a.substr(0,c));c.b||(c.b={});c.b[d]=b;b.a=c;mc[a]=b}return b};function E(a,b){a&&a.log(hc,b,void 0)}function pc(a,b){a&&a.log(ic,b,void 0)}function F(a,b){a&&a.log(kc,b,void 0)};function qc(){this.a=oc(\"goog.labs.net.webChannel.WebChannelDebug\");this.b=!0}qc.prototype.Ea=function(){this.b=!1};function rc(a,b,c,d,e,f){H(a,function(){if(a.b)if(f){var h=\"\";for(var m=f.split(\"&\"),v=0;ve.length)){var f=e[1];if(n(f)&&!(1>f.length)){var h=f[0];if(\"noop\"!=h&&\"stop\"!=h&&\"close\"!=h)for(var m=1;mb||3==b&&!Ka&&!a.a.V())){a.B||4!=b||7==c||(8==c||0>=d?Ac(3):Ac(2));Zc(a);var e=a.a.W();a.C=e;(c=a.a.V())||I(a.b,function(){return\"No response text for uri \"+a.g+\" status \"+e});a.c=200==e;sc(a.b,a.o,a.g,a.f,a.T,b,e);a.c?(a.M?($c(a,b,c),Ka&&a.c&&3==b&&ad(a)):(tc(a.b,a.f,c,null),bd(a,c)),4==b&&cd(a),a.c&&!a.B&&(4==b?a.i.ua(a):(a.c=!1,Wc(a)))):(400==e&&0b.length)return Rc;b=b.substr(d,c);a.F=d+c;return b}g.cancel=function(){this.B=!0;cd(this)};function Wc(a){a.U=t()+a.S;fd(a,a.S)}\nfunction fd(a,b){if(null!=a.w)throw Error(\"WatchDog timer not null\");a.w=Ec(r(a.fb,a),b)}function Zc(a){a.w&&(k.clearTimeout(a.w),a.w=null)}g.fb=function(){this.w=null;var a=t();0<=a-this.U?(this.c&&xc(this.b,\"Received watchdog timeout even though request loaded successfully\"),vc(this.b,this.g),2!=this.K&&(Ac(3),J(17)),cd(this),this.l=2,dd(this)):(E(this.b.a,\"WatchDog timer called too early\"),fd(this,this.U-a))};function dd(a){a.i.Ja()||a.B||a.i.ua(a)}\nfunction cd(a){Zc(a);var b=a.J;b&&\"function\"==typeof b.Z&&b.Z();a.J=null;Yb(a.I);cc(a.N);a.a&&(b=a.a,a.a=null,b.abort(),b.Z())}function bd(a,b){try{a.i.Ma(a,b),Ac(4)}catch(c){wc(a.b,c,\"Error in httprequest callback\")}};function gd(a){if(a.v&&\"function\"==typeof a.v)return a.v();if(l(a))return a.split(\"\");if(ca(a)){for(var b=[],c=a.length,d=0;d2*a.c&&id(a),!0):!1}function id(a){if(a.c!=a.a.length){for(var b=0,c=0;bb)throw Error(\"Bad port number \"+b);a.i=b}else a.i=null}function qd(a,b,c){b instanceof td?(a.c=b,zd(a.c,a.h)):(c||(b=ud(b,Ad)),a.c=new td(b,a.h))}\nfunction Q(a,b,c){a.c.set(b,c)}function Xc(a,b,c){n(c)||(c=[String(c)]);Bd(a.c,b,c)}function Tc(a){Q(a,\"zx\",Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^t()).toString(36));return a}function Cd(a){return a instanceof P?L(a):new P(a,void 0)}function Dd(a,b,c,d){var e=new P(null,void 0);a&&nd(e,a);b&&od(e,b);c&&pd(e,c);d&&(e.a=d);return e}function sd(a,b){return a?b?decodeURI(a.replace(/%25/g,\"%2525\")):decodeURIComponent(a):\"\"}\nfunction ud(a,b,c){return l(a)?(a=encodeURI(a).replace(b,Ed),c&&(a=a.replace(/%25([0-9a-fA-F]{2})/g,\"%$1\")),a):null}function Ed(a){a=a.charCodeAt(0);return\"%\"+(a>>4&15).toString(16)+(a&15).toString(16)}var vd=/[#\\/\\?@]/g,xd=/[#\\?:]/g,wd=/[#\\?]/g,Ad=/[#\\?@]/g,yd=/#/g;function td(a,b){this.b=this.a=null;this.c=a||null;this.f=!!b}function R(a){a.a||(a.a=new N,a.b=0,a.c&&md(a.c,function(b,c){a.add(decodeURIComponent(b.replace(/\\+/g,\" \")),c)}))}g=td.prototype;g.s=function(){R(this);return this.b};\ng.add=function(a,b){R(this);this.c=null;a=Fd(this,a);var c=this.a.get(a);c||this.a.set(a,c=[]);c.push(b);this.b+=1;return this};function Gd(a,b){R(a);b=Fd(a,b);O(a.a.b,b)&&(a.c=null,a.b-=a.a.get(b).length,kd(a.a,b))}function Hd(a,b){R(a);b=Fd(a,b);return O(a.a.b,b)}g.forEach=function(a,b){R(this);this.a.forEach(function(c,d){ta(c,function(c){a.call(b,c,d,this)},this)},this)};\ng.O=function(){R(this);for(var a=this.a.v(),b=this.a.O(),c=[],d=0;d=a.f:!1}function ce(a,b){return a.b?a.b==b:a.a?a.a.contains(b):!1}function ae(a,b){a.a?a.a.add(b):a.b=b}\nfunction de(a,b){a.b&&a.b==b?a.b=null:a.a&&a.a.contains(b)&&kd(a.a.a,Wd(b))}Yd.prototype.cancel=function(){this.c=ee(this);this.b?(this.b.cancel(),this.b=null):this.a&&0!=this.a.a.c&&(ta(this.a.v(),function(a){a.cancel()}),jd(this.a.a))};function ee(a){if(null!=a.b)return a.c.concat(a.b.u);if(null!=a.a&&0!=a.a.a.c){var b=a.c;ta(a.a.v(),function(a){b=b.concat(a.u)});return b}return ya(a.c)}function fe(a,b){a.c=a.c.concat(b)};function ge(){}ge.prototype.stringify=function(a){return k.JSON.stringify(a,void 0)};ge.prototype.parse=function(a){return k.JSON.parse(a,void 0)};function he(){this.a=new ge}function ie(a,b,c){var d=c||\"\";try{hd(a,function(a,c){var e=a;p(a)&&(e=Db(a));b.push(d+c+\"=\"+encodeURIComponent(e))})}catch(e){throw b.push(d+\"type=\"+encodeURIComponent(\"_badmap\")),e;}};function je(a,b){var c=new qc;I(c,\"TestLoadImage: loading \"+a);var d=new Image;d.onload=ia(ke,c,d,\"TestLoadImage: loaded\",!0,b);d.onerror=ia(ke,c,d,\"TestLoadImage: error\",!1,b);d.onabort=ia(ke,c,d,\"TestLoadImage: abort\",!1,b);d.ontimeout=ia(ke,c,d,\"TestLoadImage: timeout\",!1,b);k.setTimeout(function(){if(d.ontimeout)d.ontimeout()},1E4);d.src=a}function ke(a,b,c,d,e){try{I(a,c),b.onload=null,b.onerror=null,b.onabort=null,b.ontimeout=null,e(d)}catch(f){wc(a,f)}};function T(a){B.call(this);this.headers=new N;this.F=a||null;this.f=!1;this.D=this.a=null;this.M=this.u=\"\";this.j=0;this.g=\"\";this.h=this.J=this.o=this.I=!1;this.l=0;this.B=null;this.N=le;this.C=this.m=!1}u(T,B);var le=\"\";T.prototype.b=oc(\"goog.net.XhrIo\");var me=/^https?$/i,ne=[\"POST\",\"PUT\"];g=T.prototype;\ng.fa=function(a,b,c,d){if(this.a)throw Error(\"[goog.net.XhrIo] Object is active with another request=\"+this.u+\"; newUri=\"+a);b=b?b.toUpperCase():\"GET\";this.u=a;this.g=\"\";this.j=0;this.M=b;this.I=!1;this.f=!0;this.a=this.F?Mc(this.F):Mc(Kc);this.D=this.F?Ic(this.F):Ic(Kc);this.a.onreadystatechange=r(this.La,this);try{F(this.b,U(this,\"Opening Xhr\")),this.J=!0,this.a.open(b,String(a),!0),this.J=!1}catch(f){F(this.b,U(this,\"Error opening Xhr: \"+f.message));oe(this,f);return}a=c||\"\";var e=new N(this.headers);\nd&&hd(d,function(a,b){e.set(b,a)});d=ua(e.O());c=k.FormData&&a instanceof k.FormData;!(0<=sa(ne,b))||d||c||e.set(\"Content-Type\",\"application/x-www-form-urlencoded;charset=utf-8\");e.forEach(function(a,b){this.a.setRequestHeader(b,a)},this);this.N&&(this.a.responseType=this.N);\"withCredentials\"in this.a&&this.a.withCredentials!==this.m&&(this.a.withCredentials=this.m);try{pe(this),0c&&(c=a.length);d=a.indexOf(\"?\");if(0>d||d>c){d=c;var e=\"\"}else e=a.substring(d+1,c);a=[a.substr(0,d),e,a.substr(c)];c=a[1];a[1]=b?c?c+\"&\"+b:b:c;a=a[0]+(a[1]?\"?\"+a[1]:\"\")+a[2]}return a}Q(a,b,c);return a};function we(a){this.ya=0;this.g=[];this.a=new qc;this.I=new Vd;this.ja=this.wa=this.F=this.ka=this.b=this.K=this.j=this.U=this.h=this.M=this.i=null;this.Ua=this.P=0;this.la=this.B=this.o=this.m=this.l=this.f=null;this.u=this.xa=this.N=-1;this.T=this.w=this.C=0;this.S=a&&a.supportsCrossDomainXhr||!1;this.J=\"\";this.c=new Yd(a&&a.concurrentRequestLimit);this.ma=new he;this.D=a&&void 0!==a.backgroundChannelTest?a.backgroundChannelTest:!0;this.Ta=a&&a.fastHandshake||!1;a&&a.Ea&&this.a.Ea()}g=we.prototype;\ng.oa=8;g.G=1;function xe(a){I(a.a,\"disconnect()\");ye(a);if(3==a.G){var b=a.P++,c=L(a.F);Q(c,\"SID\",a.J);Q(c,\"RID\",b);Q(c,\"TYPE\",\"terminate\");ze(a,c);b=new K(a,a.a,b,void 0);b.K=2;b.h=Tc(L(c));c=!1;k.navigator&&k.navigator.sendBeacon&&(c=k.navigator.sendBeacon(b.h.toString(),\"\"));!c&&k.Image&&((new Image).src=b.h,c=!0);c||(b.a=b.i.da(null),b.a.fa(b.h));b.D=t();Wc(b)}Ae(a)}\nfunction ye(a){a.B&&(a.B.abort(),a.B=null);a.b&&(a.b.cancel(),a.b=null);a.m&&(k.clearTimeout(a.m),a.m=null);Be(a);a.c.cancel();a.l&&(k.clearTimeout(a.l),a.l=null)}function Ce(a,b){1E3==a.g.length&&xc(a.a,function(){return\"Already have 1000 queued maps upon queueing \"+Db(b)});a.g.push(new Xd(a.Ua++,b));3==a.G&&De(a)}g.Ja=function(){return 0==this.G};function De(a){be(a.c)||a.l||(a.l=Ec(r(a.Oa,a),0),a.C=0)}\nfunction Ee(a,b){var c=a.c;if((c.b?1:c.a?c.a.s():0)>=a.c.f-(a.l?1:0))return xc(a.a,\"Unexpected retry request is scheduled.\"),!1;if(a.l)return I(a.a,\"Use the retry request that is already scheduled.\"),a.g=b.u.concat(a.g),!0;if(1==a.G||2==a.G||2<=a.C)return!1;I(a.a,\"Going to retry POST\");a.l=Ec(r(a.Oa,a,b),Fe(a,a.C));a.C++;return!0}\ng.Oa=function(a){this.l=null;I(this.a,\"startForwardChannel_\");if(1==this.G)if(a)xc(this.a,\"Not supposed to retry the open\");else{I(this.a,\"open_()\");this.P=Math.floor(1E5*Math.random());a=this.P++;var b=new K(this,this.a,a,void 0),c=this.i;this.M&&(c?(c=Ea(c),Ga(c,this.M)):c=this.M);null===this.h&&(b.j=c);var d=Ge(this,b),e=L(this.F);Q(e,\"RID\",a);Q(e,\"CVER\",21);this.D&&this.j&&Q(e,\"X-HTTP-Session-Id\",this.j);ze(this,e);this.h&&c&&ve(e,this.h,c);ae(this.c,b);this.Ta?(Q(e,\"$req\",d),Sc(b,e,null)):Sc(b,\ne,d);this.G=2}else 3==this.G&&(a?He(this,a):0==this.g.length?I(this.a,\"startForwardChannel_ returned: nothing to send\"):be(this.c)?xc(this.a,\"startForwardChannel_ returned: connection already in progress\"):(He(this),I(this.a,\"startForwardChannel_ finished, sent request\")))};\nfunction He(a,b){var c;b?c=b.f:c=a.P++;var d=L(a.F);Q(d,\"SID\",a.J);Q(d,\"RID\",c);Q(d,\"AID\",a.N);ze(a,d);a.h&&a.i&&ve(d,a.h,a.i);c=new K(a,a.a,c,a.C+1);null===a.h&&(c.j=a.i);b&&(a.g=b.u.concat(a.g));b=Ge(a,c);c.setTimeout(1E4+Math.round(1E4*Math.random()));ae(a.c,c);Sc(c,d,b)}function ze(a,b){a.f&&hd({},function(a,d){Q(b,d,a)})}\nfunction Ge(a,b){var c=Math.min(a.g.length,1E3),d=a.f?r(a.f.Va,a.f,a):null;a:for(var e=a.g,f=-1;;){var h=[\"count=\"+c];-1==f?0G)f=Math.max(0,e[v].a-100),m=!1;else try{ie(Z,h,\"req\"+G+\"_\")}catch(Mb){d&&d(Z)}}if(m){d=h.join(\"&\");break a}}a=a.g.splice(0,c);b.u=a;return d}function Ie(a){if(!a.b&&!a.m){a.T=1;var b=a.Na;Tb||Ub();Wb||(Tb(),Wb=!0);Pb.add(b,a);a.w=0}}\nfunction Je(a){if(a.b||a.m)return xc(a.a,\"Request already in progress\"),!1;if(3<=a.w)return!1;I(a.a,\"Going to retry GET\");a.T++;a.m=Ec(r(a.Na,a),Fe(a,a.w));a.w++;return!0}\ng.Na=function(){this.m=null;I(this.a,\"Creating new HttpRequest\");this.b=new K(this,this.a,\"rpc\",this.T);null===this.h&&(this.b.j=this.i);this.b.P=0;var a=L(this.wa);Q(a,\"RID\",\"rpc\");Q(a,\"SID\",this.J);Q(a,\"CI\",this.la?\"0\":\"1\");Q(a,\"AID\",this.N);ze(this,a);Q(a,\"TYPE\",\"xmlhttp\");this.h&&this.i&&ve(a,this.h,this.i);Vc(this.b,a,!0,this.ja);I(this.a,\"New Request created\")};\nfunction Sd(a,b,c){I(a.a,\"Test Connection Finished\");var d=b.m;d&&$d(a.c,d);a.la=c;a.u=b.f;I(a.a,\"connectChannel_()\");a.F=Ke(a,a.ka);De(a)}function Ud(a,b){I(a.a,\"Test Connection Failed\");a.u=b.f;V(a,2)}\ng.Ma=function(a,b){if(0!=this.G&&(this.b==a||ce(this.c,a)))if(this.u=a.C,ce(this.c,a)&&3==this.G){try{var c=this.ma.a.parse(b)}catch(f){c=null}if(n(c)&&3==c.length)if(b=c,0==b[0])a:if(I(this.a,\"Server claims our backchannel is missing.\"),this.m)I(this.a,\"But we are currently starting the request.\");else{if(this.b)if(this.b.D+3E3b&&this.la&&0==this.w&&!this.o&&(this.o=Ec(r(this.bb,this),6E3)));else I(this.a,\"Bad POST response data returned\"),V(this,11)}else if(this.b==a&&Be(this),!/^[\\s\\xa0]*$/.test(b))for(b=c=this.ma.a.parse(b),c=0;cthis.c)throw Error(We);this.a=new Te;this.b=new S;this.g=null;this.ba()}u(Ve,w);var We=\"[goog.structs.Pool] Min can not be greater than max\";g=Ve.prototype;g.ea=function(){var a=t();if(!(null!=this.g&&0>a-this.g)){for(var b;0this.c&&0=this.s()){for(var c=this.a,d=0;d>1,a[d].a>c.a)a[b]=a[d],b=d;else break;a[b]=c}Ze.prototype.v=function(){for(var a=this.a,b=[],c=a.length,d=0;d=e)f=void 0;else{if(1==e)wa(d);else{d[0]=d.pop();d=0;c=c.a;e=c.length;for(var h=c[d];d>1;){var m=2*d+1,v=2*d+2;m=vh.a)break;c[d]=c[m];d=m}c[d]=h}f=f.b}f.apply(this,[b])}else break}};\ng.na=function(a){X.H.na.call(this,a);this.sa()};g.ba=function(){X.H.ba.call(this);this.sa()};g.A=function(){X.H.A.call(this);k.clearTimeout(void 0);wa(this.f.a);this.f=null};function Y(a,b,c,d){this.l=a;this.j=!!d;X.call(this,b,c)}u(Y,X);Y.prototype.qa=function(){var a=new T,b=this.l;b&&b.forEach(function(b,d){a.headers.set(d,b)});this.j&&(a.m=!0);return a};Y.prototype.ta=function(a){return!a.i&&!a.a};Oe.prototype.createWebChannel=Oe.prototype.a;W.prototype.send=W.prototype.$a;W.prototype.open=W.prototype.Za;W.prototype.close=W.prototype.close;Fc.NO_ERROR=0;Fc.TIMEOUT=8;Fc.HTTP_ERROR=6;Gc.COMPLETE=\"complete\";Md.EventType=Nd;Nd.OPEN=\"a\";Nd.CLOSE=\"b\";Nd.ERROR=\"c\";Nd.MESSAGE=\"d\";B.prototype.listen=B.prototype.aa;Y.prototype.getObject=Y.prototype.ea;Y.prototype.releaseObject=Y.prototype.ib;T.prototype.listenOnce=T.prototype.Ha;T.prototype.getLastError=T.prototype.ab;T.prototype.getLastErrorCode=T.prototype.Fa;\nT.prototype.getStatus=T.prototype.W;T.prototype.getStatusText=T.prototype.Ga;T.prototype.getResponseJson=T.prototype.Ya;T.prototype.getResponseText=T.prototype.V;T.prototype.getResponseText=T.prototype.V;T.prototype.send=T.prototype.fa;module.exports={createWebChannelTransport:Se,ErrorCode:Fc,EventType:Gc,WebChannel:Md,XhrIoPool:Y};}).call(typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {})\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Path_1 = require(\"./Path\");\nvar util_1 = require(\"@firebase/util\");\nvar util_2 = require(\"./util\");\nvar util_3 = require(\"@firebase/util\");\nvar util_4 = require(\"@firebase/util\");\n/**\n * True for invalid Firebase keys\n * @type {RegExp}\n * @private\n */\nexports.INVALID_KEY_REGEX_ = /[\\[\\].#$\\/\\u0000-\\u001F\\u007F]/;\n/**\n * True for invalid Firebase paths.\n * Allows '/' in paths.\n * @type {RegExp}\n * @private\n */\nexports.INVALID_PATH_REGEX_ = /[\\[\\].#$\\u0000-\\u001F\\u007F]/;\n/**\n * Maximum number of characters to allow in leaf value\n * @type {number}\n * @private\n */\nexports.MAX_LEAF_SIZE_ = 10 * 1024 * 1024;\n/**\n * @param {*} key\n * @return {boolean}\n */\nexports.isValidKey = function (key) {\n return (typeof key === 'string' && key.length !== 0 && !exports.INVALID_KEY_REGEX_.test(key));\n};\n/**\n * @param {string} pathString\n * @return {boolean}\n */\nexports.isValidPathString = function (pathString) {\n return (typeof pathString === 'string' &&\n pathString.length !== 0 &&\n !exports.INVALID_PATH_REGEX_.test(pathString));\n};\n/**\n * @param {string} pathString\n * @return {boolean}\n */\nexports.isValidRootPathString = function (pathString) {\n if (pathString) {\n // Allow '/.info/' at the beginning.\n pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\n }\n return exports.isValidPathString(pathString);\n};\n/**\n * @param {*} priority\n * @return {boolean}\n */\nexports.isValidPriority = function (priority) {\n return (priority === null ||\n typeof priority === 'string' ||\n (typeof priority === 'number' && !util_2.isInvalidJSONNumber(priority)) ||\n (priority && typeof priority === 'object' && util_1.contains(priority, '.sv')));\n};\n/**\n * Pre-validate a datum passed as an argument to Firebase function.\n *\n * @param {string} fnName\n * @param {number} argumentNumber\n * @param {*} data\n * @param {!Path} path\n * @param {boolean} optional\n */\nexports.validateFirebaseDataArg = function (fnName, argumentNumber, data, path, optional) {\n if (optional && data === undefined)\n return;\n exports.validateFirebaseData(util_3.errorPrefix(fnName, argumentNumber, optional), data, path);\n};\n/**\n * Validate a data object client-side before sending to server.\n *\n * @param {string} errorPrefix\n * @param {*} data\n * @param {!Path|!ValidationPath} path_\n */\nexports.validateFirebaseData = function (errorPrefix, data, path_) {\n var path = path_ instanceof Path_1.Path ? new Path_1.ValidationPath(path_, errorPrefix) : path_;\n if (data === undefined) {\n throw new Error(errorPrefix + 'contains undefined ' + path.toErrorString());\n }\n if (typeof data === 'function') {\n throw new Error(errorPrefix +\n 'contains a function ' +\n path.toErrorString() +\n ' with contents = ' +\n data.toString());\n }\n if (util_2.isInvalidJSONNumber(data)) {\n throw new Error(errorPrefix + 'contains ' + data.toString() + ' ' + path.toErrorString());\n }\n // Check max leaf size, but try to avoid the utf8 conversion if we can.\n if (typeof data === 'string' &&\n data.length > exports.MAX_LEAF_SIZE_ / 3 &&\n util_4.stringLength(data) > exports.MAX_LEAF_SIZE_) {\n throw new Error(errorPrefix +\n 'contains a string greater than ' +\n exports.MAX_LEAF_SIZE_ +\n ' utf8 bytes ' +\n path.toErrorString() +\n \" ('\" +\n data.substring(0, 50) +\n \"...')\");\n }\n // TODO = Perf = Consider combining the recursive validation of keys into NodeFromJSON\n // to save extra walking of large objects.\n if (data && typeof data === 'object') {\n var hasDotValue_1 = false, hasActualChild_1 = false;\n util_1.forEach(data, function (key, value) {\n if (key === '.value') {\n hasDotValue_1 = true;\n }\n else if (key !== '.priority' && key !== '.sv') {\n hasActualChild_1 = true;\n if (!exports.isValidKey(key)) {\n throw new Error(errorPrefix +\n ' contains an invalid key (' +\n key +\n ') ' +\n path.toErrorString() +\n '. Keys must be non-empty strings ' +\n 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\n }\n }\n path.push(key);\n exports.validateFirebaseData(errorPrefix, value, path);\n path.pop();\n });\n if (hasDotValue_1 && hasActualChild_1) {\n throw new Error(errorPrefix +\n ' contains \".value\" child ' +\n path.toErrorString() +\n ' in addition to actual children.');\n }\n }\n};\n/**\n * Pre-validate paths passed in the firebase function.\n *\n * @param {string} errorPrefix\n * @param {Array} mergePaths\n */\nexports.validateFirebaseMergePaths = function (errorPrefix, mergePaths) {\n var i, curPath;\n for (i = 0; i < mergePaths.length; i++) {\n curPath = mergePaths[i];\n var keys = curPath.slice();\n for (var j = 0; j < keys.length; j++) {\n if (keys[j] === '.priority' && j === keys.length - 1) {\n // .priority is OK\n }\n else if (!exports.isValidKey(keys[j])) {\n throw new Error(errorPrefix +\n 'contains an invalid key (' +\n keys[j] +\n ') in path ' +\n curPath.toString() +\n '. Keys must be non-empty strings ' +\n 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\n }\n }\n }\n // Check that update keys are not descendants of each other.\n // We rely on the property that sorting guarantees that ancestors come\n // right before descendants.\n mergePaths.sort(Path_1.Path.comparePaths);\n var prevPath = null;\n for (i = 0; i < mergePaths.length; i++) {\n curPath = mergePaths[i];\n if (prevPath !== null && prevPath.contains(curPath)) {\n throw new Error(errorPrefix +\n 'contains a path ' +\n prevPath.toString() +\n ' that is ancestor of another path ' +\n curPath.toString());\n }\n prevPath = curPath;\n }\n};\n/**\n * pre-validate an object passed as an argument to firebase function (\n * must be an object - e.g. for firebase.update()).\n *\n * @param {string} fnName\n * @param {number} argumentNumber\n * @param {*} data\n * @param {!Path} path\n * @param {boolean} optional\n */\nexports.validateFirebaseMergeDataArg = function (fnName, argumentNumber, data, path, optional) {\n if (optional && data === undefined)\n return;\n var errorPrefix = util_3.errorPrefix(fnName, argumentNumber, optional);\n if (!(data && typeof data === 'object') || Array.isArray(data)) {\n throw new Error(errorPrefix + ' must be an object containing the children to replace.');\n }\n var mergePaths = [];\n util_1.forEach(data, function (key, value) {\n var curPath = new Path_1.Path(key);\n exports.validateFirebaseData(errorPrefix, value, path.child(curPath));\n if (curPath.getBack() === '.priority') {\n if (!exports.isValidPriority(value)) {\n throw new Error(errorPrefix +\n \"contains an invalid value for '\" +\n curPath.toString() +\n \"', which must be a valid \" +\n 'Firebase priority (a string, finite number, server value, or null).');\n }\n }\n mergePaths.push(curPath);\n });\n exports.validateFirebaseMergePaths(errorPrefix, mergePaths);\n};\nexports.validatePriority = function (fnName, argumentNumber, priority, optional) {\n if (optional && priority === undefined)\n return;\n if (util_2.isInvalidJSONNumber(priority))\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, optional) +\n 'is ' +\n priority.toString() +\n ', but must be a valid Firebase priority (a string, finite number, ' +\n 'server value, or null).');\n // Special case to allow importing data with a .sv.\n if (!exports.isValidPriority(priority))\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, optional) +\n 'must be a valid Firebase priority ' +\n '(a string, finite number, server value, or null).');\n};\nexports.validateEventType = function (fnName, argumentNumber, eventType, optional) {\n if (optional && eventType === undefined)\n return;\n switch (eventType) {\n case 'value':\n case 'child_added':\n case 'child_removed':\n case 'child_changed':\n case 'child_moved':\n break;\n default:\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, optional) +\n 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\n '\"child_changed\", or \"child_moved\".');\n }\n};\nexports.validateKey = function (fnName, argumentNumber, key, optional) {\n if (optional && key === undefined)\n return;\n if (!exports.isValidKey(key))\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, optional) +\n 'was an invalid key = \"' +\n key +\n '\". Firebase keys must be non-empty strings and ' +\n 'can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\").');\n};\nexports.validatePathString = function (fnName, argumentNumber, pathString, optional) {\n if (optional && pathString === undefined)\n return;\n if (!exports.isValidPathString(pathString))\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, optional) +\n 'was an invalid path = \"' +\n pathString +\n '\". Paths must be non-empty strings and ' +\n 'can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\"');\n};\nexports.validateRootPathString = function (fnName, argumentNumber, pathString, optional) {\n if (pathString) {\n // Allow '/.info/' at the beginning.\n pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\n }\n exports.validatePathString(fnName, argumentNumber, pathString, optional);\n};\nexports.validateWritablePath = function (fnName, path) {\n if (path.getFront() === '.info') {\n throw new Error(fnName + \" failed = Can't modify data under /.info/\");\n }\n};\nexports.validateUrl = function (fnName, argumentNumber, parsedUrl) {\n // TODO = Validate server better.\n var pathString = parsedUrl.path.toString();\n if (!(typeof parsedUrl.repoInfo.host === 'string') ||\n parsedUrl.repoInfo.host.length === 0 ||\n (!exports.isValidKey(parsedUrl.repoInfo.namespace) &&\n parsedUrl.repoInfo.host.split(':')[0] !== 'localhost') ||\n (pathString.length !== 0 && !exports.isValidRootPathString(pathString))) {\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, false) +\n 'must be a valid firebase URL and ' +\n 'the path can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\".');\n }\n};\nexports.validateCredential = function (fnName, argumentNumber, cred, optional) {\n if (optional && cred === undefined)\n return;\n if (!(typeof cred === 'string'))\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, optional) +\n 'must be a valid credential (a string).');\n};\nexports.validateBoolean = function (fnName, argumentNumber, bool, optional) {\n if (optional && bool === undefined)\n return;\n if (typeof bool !== 'boolean')\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, optional) + 'must be a boolean.');\n};\nexports.validateString = function (fnName, argumentNumber, string, optional) {\n if (optional && string === undefined)\n return;\n if (!(typeof string === 'string')) {\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, optional) +\n 'must be a valid string.');\n }\n};\nexports.validateObject = function (fnName, argumentNumber, obj, optional) {\n if (optional && obj === undefined)\n return;\n if (!(obj && typeof obj === 'object') || obj === null) {\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, optional) +\n 'must be a valid object.');\n }\n};\nexports.validateObjectContainsKey = function (fnName, argumentNumber, obj, key, optional, opt_type) {\n var objectContainsKey = obj && typeof obj === 'object' && util_1.contains(obj, key);\n if (!objectContainsKey) {\n if (optional) {\n return;\n }\n else {\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, optional) +\n 'must contain the key \"' +\n key +\n '\"');\n }\n }\n if (opt_type) {\n var val = util_1.safeGet(obj, key);\n if ((opt_type === 'number' && !(typeof val === 'number')) ||\n (opt_type === 'string' && !(typeof val === 'string')) ||\n (opt_type === 'boolean' && !(typeof val === 'boolean')) ||\n (opt_type === 'function' && !(typeof val === 'function')) ||\n (opt_type === 'object' && !(typeof val === 'object') && val)) {\n if (optional) {\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, optional) +\n 'contains invalid value for key \"' +\n key +\n '\" (must be of type \"' +\n opt_type +\n '\")');\n }\n else {\n throw new Error(util_3.errorPrefix(fnName, argumentNumber, optional) +\n 'must contain the key \"' +\n key +\n '\" with type \"' +\n opt_type +\n '\"');\n }\n }\n }\n};\n\n//# sourceMappingURL=validation.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\n/**\n *\n * @enum\n */\nvar OperationType;\n(function (OperationType) {\n OperationType[OperationType[\"OVERWRITE\"] = 0] = \"OVERWRITE\";\n OperationType[OperationType[\"MERGE\"] = 1] = \"MERGE\";\n OperationType[OperationType[\"ACK_USER_WRITE\"] = 2] = \"ACK_USER_WRITE\";\n OperationType[OperationType[\"LISTEN_COMPLETE\"] = 3] = \"LISTEN_COMPLETE\";\n})(OperationType = exports.OperationType || (exports.OperationType = {}));\n/**\n * @param {boolean} fromUser\n * @param {boolean} fromServer\n * @param {?string} queryId\n * @param {boolean} tagged\n * @constructor\n */\nvar OperationSource = /** @class */ (function () {\n function OperationSource(fromUser, fromServer, queryId, tagged) {\n this.fromUser = fromUser;\n this.fromServer = fromServer;\n this.queryId = queryId;\n this.tagged = tagged;\n util_1.assert(!tagged || fromServer, 'Tagged queries must be from server.');\n }\n /**\n * @const\n * @type {!OperationSource}\n */\n OperationSource.User = new OperationSource(\n /*fromUser=*/ true, false, null, \n /*tagged=*/ false);\n /**\n * @const\n * @type {!OperationSource}\n */\n OperationSource.Server = new OperationSource(false, \n /*fromServer=*/ true, null, \n /*tagged=*/ false);\n /**\n * @param {string} queryId\n * @return {!OperationSource}\n */\n OperationSource.forServerTaggedQuery = function (queryId) {\n return new OperationSource(false, \n /*fromServer=*/ true, queryId, \n /*tagged=*/ true);\n };\n return OperationSource;\n}());\nexports.OperationSource = OperationSource;\n\n//# sourceMappingURL=Operation.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @constructor\n * @struct\n * @param {!string} type The event type\n * @param {!Node} snapshotNode The data\n * @param {string=} childName The name for this child, if it's a child event\n * @param {Node=} oldSnap Used for intermediate processing of child changed events\n * @param {string=} prevName The name for the previous child, if applicable\n */\nvar Change = /** @class */ (function () {\n function Change(type, snapshotNode, childName, oldSnap, prevName) {\n this.type = type;\n this.snapshotNode = snapshotNode;\n this.childName = childName;\n this.oldSnap = oldSnap;\n this.prevName = prevName;\n }\n /**\n * @param {!Node} snapshot\n * @return {!Change}\n */\n Change.valueChange = function (snapshot) {\n return new Change(Change.VALUE, snapshot);\n };\n /**\n * @param {string} childKey\n * @param {!Node} snapshot\n * @return {!Change}\n */\n Change.childAddedChange = function (childKey, snapshot) {\n return new Change(Change.CHILD_ADDED, snapshot, childKey);\n };\n /**\n * @param {string} childKey\n * @param {!Node} snapshot\n * @return {!Change}\n */\n Change.childRemovedChange = function (childKey, snapshot) {\n return new Change(Change.CHILD_REMOVED, snapshot, childKey);\n };\n /**\n * @param {string} childKey\n * @param {!Node} newSnapshot\n * @param {!Node} oldSnapshot\n * @return {!Change}\n */\n Change.childChangedChange = function (childKey, newSnapshot, oldSnapshot) {\n return new Change(Change.CHILD_CHANGED, newSnapshot, childKey, oldSnapshot);\n };\n /**\n * @param {string} childKey\n * @param {!Node} snapshot\n * @return {!Change}\n */\n Change.childMovedChange = function (childKey, snapshot) {\n return new Change(Change.CHILD_MOVED, snapshot, childKey);\n };\n //event types\n /** Event type for a child added */\n Change.CHILD_ADDED = 'child_added';\n /** Event type for a child removed */\n Change.CHILD_REMOVED = 'child_removed';\n /** Event type for a child changed */\n Change.CHILD_CHANGED = 'child_changed';\n /** Event type for a child moved */\n Change.CHILD_MOVED = 'child_moved';\n /** Event type for a value change */\n Change.VALUE = 'value';\n return Change;\n}());\nexports.Change = Change;\n\n//# sourceMappingURL=Change.js.map\n","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar util_1 = require(\"@firebase/util\");\nvar util_2 = require(\"@firebase/util\");\nvar util_3 = require(\"@firebase/util\");\nvar util_4 = require(\"@firebase/util\");\nvar util_5 = require(\"@firebase/util\");\nvar util_6 = require(\"@firebase/util\");\nvar storage_1 = require(\"../storage/storage\");\nvar util_7 = require(\"@firebase/util\");\n/**\n * Returns a locally-unique ID (generated by just incrementing up from 0 each time its called).\n * @type {function(): number} Generated ID.\n */\nexports.LUIDGenerator = (function () {\n var id = 1;\n return function () {\n return id++;\n };\n})();\n/**\n * Sha1 hash of the input string\n * @param {!string} str The string to hash\n * @return {!string} The resulting hash\n */\nexports.sha1 = function (str) {\n var utf8Bytes = util_5.stringToByteArray(str);\n var sha1 = new util_4.Sha1();\n sha1.update(utf8Bytes);\n var sha1Bytes = sha1.digest();\n return util_3.base64.encodeByteArray(sha1Bytes);\n};\n/**\n * @param {...*} var_args\n * @return {string}\n * @private\n */\nvar buildLogMessage_ = function () {\n var var_args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n var_args[_i] = arguments[_i];\n }\n var message = '';\n for (var i = 0; i < var_args.length; i++) {\n if (Array.isArray(var_args[i]) ||\n (var_args[i] &&\n typeof var_args[i] === 'object' &&\n typeof var_args[i].length === 'number')) {\n message += buildLogMessage_.apply(null, var_args[i]);\n }\n else if (typeof var_args[i] === 'object') {\n message += util_6.stringify(var_args[i]);\n }\n else {\n message += var_args[i];\n }\n message += ' ';\n }\n return message;\n};\n/**\n * Use this for all debug messages in Firebase.\n * @type {?function(string)}\n */\nexports.logger = null;\n/**\n * Flag to check for log availability on first log message\n * @type {boolean}\n * @private\n */\nvar firstLog_ = true;\n/**\n * The implementation of Firebase.enableLogging (defined here to break dependencies)\n * @param {boolean|?function(string)} logger_ A flag to turn on logging, or a custom logger\n * @param {boolean=} persistent Whether or not to persist logging settings across refreshes\n */\nexports.enableLogging = function (logger_, persistent) {\n util_1.assert(!persistent || (logger_ === true || logger_ === false), \"Can't turn on custom loggers persistently.\");\n if (logger_ === true) {\n if (typeof console !== 'undefined') {\n if (typeof console.log === 'function') {\n exports.logger = console.log.bind(console);\n }\n else if (typeof console.log === 'object') {\n // IE does this.\n exports.logger = function (message) {\n console.log(message);\n };\n }\n }\n if (persistent)\n storage_1.SessionStorage.set('logging_enabled', true);\n }\n else if (typeof logger_ === 'function') {\n exports.logger = logger_;\n }\n else {\n exports.logger = null;\n storage_1.SessionStorage.remove('logging_enabled');\n }\n};\n/**\n *\n * @param {...(string|Arguments)} var_args\n */\nexports.log = function () {\n var var_args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n var_args[_i] = arguments[_i];\n }\n if (firstLog_ === true) {\n firstLog_ = false;\n if (exports.logger === null && storage_1.SessionStorage.get('logging_enabled') === true)\n exports.enableLogging(true);\n }\n if (exports.logger) {\n var message = buildLogMessage_.apply(null, var_args);\n exports.logger(message);\n }\n};\n/**\n * @param {!string} prefix\n * @return {function(...[*])}\n */\nexports.logWrapper = function (prefix) {\n return function () {\n var var_args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n var_args[_i] = arguments[_i];\n }\n exports.log.apply(void 0, [prefix].concat(var_args));\n };\n};\n/**\n * @param {...string} var_args\n */\nexports.error = function () {\n var var_args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n var_args[_i] = arguments[_i];\n }\n if (typeof console !== 'undefined') {\n var message = 'FIREBASE INTERNAL ERROR: ' + buildLogMessage_.apply(void 0, var_args);\n if (typeof console.error !== 'undefined') {\n console.error(message);\n }\n else {\n console.log(message);\n }\n }\n};\n/**\n * @param {...string} var_args\n */\nexports.fatal = function () {\n var var_args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n var_args[_i] = arguments[_i];\n }\n var message = buildLogMessage_.apply(void 0, var_args);\n throw new Error('FIREBASE FATAL ERROR: ' + message);\n};\n/**\n * @param {...*} var_args\n */\nexports.warn = function () {\n var var_args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n var_args[_i] = arguments[_i];\n }\n if (typeof console !== 'undefined') {\n var message = 'FIREBASE WARNING: ' + buildLogMessage_.apply(void 0, var_args);\n if (typeof console.warn !== 'undefined') {\n console.warn(message);\n }\n else {\n console.log(message);\n }\n }\n};\n/**\n * Logs a warning if the containing page uses https. Called when a call to new Firebase\n * does not use https.\n */\nexports.warnIfPageIsSecure = function () {\n // Be very careful accessing browser globals. Who knows what may or may not exist.\n if (typeof window !== 'undefined' &&\n window.location &&\n window.location.protocol &&\n window.location.protocol.indexOf('https:') !== -1) {\n exports.warn('Insecure Firebase access from a secure page. ' +\n 'Please use https in calls to new Firebase().');\n }\n};\n/**\n * @param {!String} methodName\n */\nexports.warnAboutUnsupportedMethod = function (methodName) {\n exports.warn(methodName +\n ' is unsupported and will likely change soon. ' +\n 'Please do not use.');\n};\n/**\n * Returns true if data is NaN, or +/- Infinity.\n * @param {*} data\n * @return {boolean}\n */\nexports.isInvalidJSONNumber = function (data) {\n return (typeof data === 'number' &&\n (data != data || // NaN\n data == Number.POSITIVE_INFINITY ||\n data == Number.NEGATIVE_INFINITY));\n};\n/**\n * @param {function()} fn\n */\nexports.executeWhenDOMReady = function (fn) {\n if (util_7.isNodeSdk() || document.readyState === 'complete') {\n fn();\n }\n else {\n // Modeled after jQuery. Try DOMContentLoaded and onreadystatechange (which\n // fire before onload), but fall back to onload.\n var called_1 = false;\n var wrappedFn_1 = function () {\n if (!document.body) {\n setTimeout(wrappedFn_1, Math.floor(10));\n return;\n }\n if (!called_1) {\n called_1 = true;\n fn();\n }\n };\n if (document.addEventListener) {\n document.addEventListener('DOMContentLoaded', wrappedFn_1, false);\n // fallback to onload.\n window.addEventListener('load', wrappedFn_1, false);\n }\n else if (document.attachEvent) {\n // IE.\n document.attachEvent('onreadystatechange', function () {\n if (document.readyState === 'complete')\n wrappedFn_1();\n });\n // fallback to onload.\n window.attachEvent('onload', wrappedFn_1);\n // jQuery has an extra hack for IE that we could employ (based on\n // http://javascript.nwbox.com/IEContentLoaded/) But it looks really old.\n // I'm hoping we don't need it.\n }\n }\n};\n/**\n * Minimum key name. Invalid for actual data, used as a marker to sort before any valid names\n * @type {!string}\n */\nexports.MIN_NAME = '[MIN_NAME]';\n/**\n * Maximum key name. Invalid for actual data, used as a marker to sort above any valid names\n * @type {!string}\n */\nexports.MAX_NAME = '[MAX_NAME]';\n/**\n * Compares valid Firebase key names, plus min and max name\n * @param {!string} a\n * @param {!string} b\n * @return {!number}\n */\nexports.nameCompare = function (a, b) {\n if (a === b) {\n return 0;\n }\n else if (a === exports.MIN_NAME || b === exports.MAX_NAME) {\n return -1;\n }\n else if (b === exports.MIN_NAME || a === exports.MAX_NAME) {\n return 1;\n }\n else {\n var aAsInt = exports.tryParseInt(a), bAsInt = exports.tryParseInt(b);\n if (aAsInt !== null) {\n if (bAsInt !== null) {\n return aAsInt - bAsInt == 0 ? a.length - b.length : aAsInt - bAsInt;\n }\n else {\n return -1;\n }\n }\n else if (bAsInt !== null) {\n return 1;\n }\n else {\n return a < b ? -1 : 1;\n }\n }\n};\n/**\n * @param {!string} a\n * @param {!string} b\n * @return {!number} comparison result.\n */\nexports.stringCompare = function (a, b) {\n if (a === b) {\n return 0;\n }\n else if (a < b) {\n return -1;\n }\n else {\n return 1;\n }\n};\n/**\n * @param {string} key\n * @param {Object} obj\n * @return {*}\n */\nexports.requireKey = function (key, obj) {\n if (obj && key in obj) {\n return obj[key];\n }\n else {\n throw new Error('Missing required key (' + key + ') in object: ' + util_6.stringify(obj));\n }\n};\n/**\n * @param {*} obj\n * @return {string}\n */\nexports.ObjectToUniqueKey = function (obj) {\n if (typeof obj !== 'object' || obj === null)\n return util_6.stringify(obj);\n var keys = [];\n for (var k in obj) {\n keys.push(k);\n }\n // Export as json, but with the keys sorted.\n keys.sort();\n var key = '{';\n for (var i = 0; i < keys.length; i++) {\n if (i !== 0)\n key += ',';\n key += util_6.stringify(keys[i]);\n key += ':';\n key += exports.ObjectToUniqueKey(obj[keys[i]]);\n }\n key += '}';\n return key;\n};\n/**\n * Splits a string into a number of smaller segments of maximum size\n * @param {!string} str The string\n * @param {!number} segsize The maximum number of chars in the string.\n * @return {Array.} The string, split into appropriately-sized chunks\n */\nexports.splitStringBySize = function (str, segsize) {\n var len = str.length;\n if (len <= segsize) {\n return [str];\n }\n var dataSegs = [];\n for (var c = 0; c < len; c += segsize) {\n if (c + segsize > len) {\n dataSegs.push(str.substring(c, len));\n }\n else {\n dataSegs.push(str.substring(c, c + segsize));\n }\n }\n return dataSegs;\n};\n/**\n * Apply a function to each (key, value) pair in an object or\n * apply a function to each (index, value) pair in an array\n * @param {!(Object|Array)} obj The object or array to iterate over\n * @param {function(?, ?)} fn The function to apply\n */\nexports.each = function (obj, fn) {\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; ++i) {\n fn(i, obj[i]);\n }\n }\n else {\n /**\n * in the conversion of code we removed the goog.object.forEach\n * function which did a value,key callback. We standardized on\n * a single impl that does a key, value callback. So we invert\n * to not have to touch the `each` code points\n */\n util_2.forEach(obj, function (key, val) { return fn(val, key); });\n }\n};\n/**\n * Like goog.bind, but doesn't bother to create a closure if opt_context is null/undefined.\n * @param {function(*)} callback Callback function.\n * @param {?Object=} context Optional context to bind to.\n * @return {function(*)}\n */\nexports.bindCallback = function (callback, context) {\n return context ? callback.bind(context) : callback;\n};\n/**\n * Borrowed from http://hg.secondlife.com/llsd/src/tip/js/typedarray.js (MIT License)\n * I made one modification at the end and removed the NaN / Infinity\n * handling (since it seemed broken [caused an overflow] and we don't need it). See MJL comments.\n * @param {!number} v A double\n * @return {string}\n */\nexports.doubleToIEEE754String = function (v) {\n util_1.assert(!exports.isInvalidJSONNumber(v), 'Invalid JSON number'); // MJL\n var ebits = 11, fbits = 52;\n var bias = (1 << (ebits - 1)) - 1, s, e, f, ln, i, bits, str;\n // Compute sign, exponent, fraction\n // Skip NaN / Infinity handling --MJL.\n if (v === 0) {\n e = 0;\n f = 0;\n s = 1 / v === -Infinity ? 1 : 0;\n }\n else {\n s = v < 0;\n v = Math.abs(v);\n if (v >= Math.pow(2, 1 - bias)) {\n // Normalized\n ln = Math.min(Math.floor(Math.log(v) / Math.LN2), bias);\n e = ln + bias;\n f = Math.round(v * Math.pow(2, fbits - ln) - Math.pow(2, fbits));\n }\n else {\n // Denormalized\n e = 0;\n f = Math.round(v / Math.pow(2, 1 - bias - fbits));\n }\n }\n // Pack sign, exponent, fraction\n bits = [];\n for (i = fbits; i; i -= 1) {\n bits.push(f % 2 ? 1 : 0);\n f = Math.floor(f / 2);\n }\n for (i = ebits; i; i -= 1) {\n bits.push(e % 2 ? 1 : 0);\n e = Math.floor(e / 2);\n }\n bits.push(s ? 1 : 0);\n bits.reverse();\n str = bits.join('');\n // Return the data as a hex string. --MJL\n var hexByteString = '';\n for (i = 0; i < 64; i += 8) {\n var hexByte = parseInt(str.substr(i, 8), 2).toString(16);\n if (hexByte.length === 1)\n hexByte = '0' + hexByte;\n hexByteString = hexByteString + hexByte;\n }\n return hexByteString.toLowerCase();\n};\n/**\n * Used to detect if we're in a Chrome content script (which executes in an\n * isolated environment where long-polling doesn't work).\n * @return {boolean}\n */\nexports.isChromeExtensionContentScript = function () {\n return !!(typeof window === 'object' &&\n window['chrome'] &&\n window['chrome']['extension'] &&\n !/^chrome/.test(window.location.href));\n};\n/**\n * Used to detect if we're in a Windows 8 Store app.\n * @return {boolean}\n */\nexports.isWindowsStoreApp = function () {\n // Check for the presence of a couple WinRT globals\n return typeof Windows === 'object' && typeof Windows.UI === 'object';\n};\n/**\n * Converts a server error code to a Javascript Error\n * @param {!string} code\n * @param {!Query} query\n * @return {Error}\n */\nexports.errorForServerCode = function (code, query) {\n var reason = 'Unknown Error';\n if (code === 'too_big') {\n reason =\n 'The data requested exceeds the maximum size ' +\n 'that can be accessed with a single request.';\n }\n else if (code == 'permission_denied') {\n reason = \"Client doesn't have permission to access the desired data.\";\n }\n else if (code == 'unavailable') {\n reason = 'The service is unavailable';\n }\n var error = new Error(code + ' at ' + query.path.toString() + ': ' + reason);\n error.code = code.toUpperCase();\n return error;\n};\n/**\n * Used to test for integer-looking strings\n * @type {RegExp}\n * @private\n */\nexports.INTEGER_REGEXP_ = new RegExp('^-?\\\\d{1,10}$');\n/**\n * If the string contains a 32-bit integer, return it. Else return null.\n * @param {!string} str\n * @return {?number}\n */\nexports.tryParseInt = function (str) {\n if (exports.INTEGER_REGEXP_.test(str)) {\n var intVal = Number(str);\n if (intVal >= -2147483648 && intVal <= 2147483647) {\n return intVal;\n }\n }\n return null;\n};\n/**\n * Helper to run some code but catch any exceptions and re-throw them later.\n * Useful for preventing user callbacks from breaking internal code.\n *\n * Re-throwing the exception from a setTimeout is a little evil, but it's very\n * convenient (we don't have to try to figure out when is a safe point to\n * re-throw it), and the behavior seems reasonable:\n *\n * * If you aren't pausing on exceptions, you get an error in the console with\n * the correct stack trace.\n * * If you're pausing on all exceptions, the debugger will pause on your\n * exception and then again when we rethrow it.\n * * If you're only pausing on uncaught exceptions, the debugger will only pause\n * on us re-throwing it.\n *\n * @param {!function()} fn The code to guard.\n */\nexports.exceptionGuard = function (fn) {\n try {\n fn();\n }\n catch (e) {\n // Re-throw exception when it's safe.\n setTimeout(function () {\n // It used to be that \"throw e\" would result in a good console error with\n // relevant context, but as of Chrome 39, you just get the firebase.js\n // file/line number where we re-throw it, which is useless. So we log\n // e.stack explicitly.\n var stack = e.stack || '';\n exports.warn('Exception was thrown by user callback.', stack);\n throw e;\n }, Math.floor(0));\n }\n};\n/**\n * Helper function to safely call opt_callback with the specified arguments. It:\n * 1. Turns into a no-op if opt_callback is null or undefined.\n * 2. Wraps the call inside exceptionGuard to prevent exceptions from breaking our state.\n *\n * @param {?Function=} callback Optional onComplete callback.\n * @param {...*} var_args Arbitrary args to be passed to opt_onComplete\n */\nexports.callUserCallback = function (callback) {\n var var_args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n var_args[_i - 1] = arguments[_i];\n }\n if (typeof callback === 'function') {\n exports.exceptionGuard(function () {\n callback.apply(void 0, var_args);\n });\n }\n};\n/**\n * @return {boolean} true if we think we're currently being crawled.\n */\nexports.beingCrawled = function () {\n var userAgent = (typeof window === 'object' &&\n window['navigator'] &&\n window['navigator']['userAgent']) ||\n '';\n // For now we whitelist the most popular crawlers. We should refine this to be the set of crawlers we\n // believe to support JavaScript/AJAX rendering.\n // NOTE: Google Webmaster Tools doesn't really belong, but their \"This is how a visitor to your website\n // would have seen the page\" is flaky if we don't treat it as a crawler.\n return (userAgent.search(/googlebot|google webmaster tools|bingbot|yahoo! slurp|baiduspider|yandexbot|duckduckbot/i) >= 0);\n};\n/**\n * Export a property of an object using a getter function.\n *\n * @param {!Object} object\n * @param {string} name\n * @param {!function(): *} fnGet\n */\nexports.exportPropGetter = function (object, name, fnGet) {\n Object.defineProperty(object, name, { get: fnGet });\n};\n/**\n * Same as setTimeout() except on Node.JS it will /not/ prevent the process from exiting.\n *\n * It is removed with clearTimeout() as normal.\n *\n * @param {Function} fn Function to run.\n * @param {number} time Milliseconds to wait before running.\n * @return {number|Object} The setTimeout() return value.\n */\nexports.setTimeoutNonBlocking = function (fn, time) {\n var timeout = setTimeout(fn, time);\n if (typeof timeout === 'object' && timeout['unref']) {\n timeout['unref']();\n }\n return timeout;\n};\n\n//# sourceMappingURL=util.js.map\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a ';\n }\n var iframeContents = '' + script + '';\n try {\n this.myIFrame.doc.open();\n this.myIFrame.doc.write(iframeContents);\n this.myIFrame.doc.close();\n }\n catch (e) {\n util_1.log('frame writing exception');\n if (e.stack) {\n util_1.log(e.stack);\n }\n util_1.log(e);\n }\n }\n else {\n this.commandCB = commandCB;\n this.onMessageCB = onMessageCB;\n }\n }\n /**\n * Each browser has its own funny way to handle iframes. Here we mush them all together into one object that I can\n * actually use.\n * @private\n * @return {Element}\n */\n FirebaseIFrameScriptHolder.createIFrame_ = function () {\n var iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n // This is necessary in order to initialize the document inside the iframe\n if (document.body) {\n document.body.appendChild(iframe);\n try {\n // If document.domain has been modified in IE, this will throw an error, and we need to set the\n // domain of the iframe's document manually. We can do this via a javascript: url as the src attribute\n // Also note that we must do this *after* the iframe has been appended to the page. Otherwise it doesn't work.\n var a = iframe.contentWindow.document;\n if (!a) {\n // Apologies for the log-spam, I need to do something to keep closure from optimizing out the assignment above.\n util_1.log('No IE domain setting required');\n }\n }\n catch (e) {\n var domain = document.domain;\n iframe.src =\n \"javascript:void((function(){document.open();document.domain='\" +\n domain +\n \"';document.close();})())\";\n }\n }\n else {\n // LongPollConnection attempts to delay initialization until the document is ready, so hopefully this\n // never gets hit.\n throw 'Document body has not initialized. Wait to initialize Firebase until after the document is ready.';\n }\n // Get the document of the iframe in a browser-specific way.\n if (iframe.contentDocument) {\n iframe.doc = iframe.contentDocument; // Firefox, Opera, Safari\n }\n else if (iframe.contentWindow) {\n iframe.doc = iframe.contentWindow.document; // Internet Explorer\n }\n else if (iframe.document) {\n iframe.doc = iframe.document; //others?\n }\n return iframe;\n };\n /**\n * Cancel all outstanding queries and remove the frame.\n */\n FirebaseIFrameScriptHolder.prototype.close = function () {\n var _this = this;\n //Mark this iframe as dead, so no new requests are sent.\n this.alive = false;\n if (this.myIFrame) {\n //We have to actually remove all of the html inside this iframe before removing it from the\n //window, or IE will continue loading and executing the script tags we've already added, which\n //can lead to some errors being thrown. Setting innerHTML seems to be the easiest way to do this.\n this.myIFrame.doc.body.innerHTML = '';\n setTimeout(function () {\n if (_this.myIFrame !== null) {\n document.body.removeChild(_this.myIFrame);\n _this.myIFrame = null;\n }\n }, Math.floor(0));\n }\n if (util_3.isNodeSdk() && this.myID) {\n var urlParams = {};\n urlParams[exports.FIREBASE_LONGPOLL_DISCONN_FRAME_PARAM] = 't';\n urlParams[exports.FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\n urlParams[exports.FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\n var theURL = this.urlFn(urlParams);\n FirebaseIFrameScriptHolder.nodeRestRequest(theURL);\n }\n // Protect from being called recursively.\n var onDisconnect = this.onDisconnect;\n if (onDisconnect) {\n this.onDisconnect = null;\n onDisconnect();\n }\n };\n /**\n * Actually start the long-polling session by adding the first script tag(s) to the iframe.\n * @param {!string} id - The ID of this connection\n * @param {!string} pw - The password for this connection\n */\n FirebaseIFrameScriptHolder.prototype.startLongPoll = function (id, pw) {\n this.myID = id;\n this.myPW = pw;\n this.alive = true;\n //send the initial request. If there are requests queued, make sure that we transmit as many as we are currently able to.\n while (this.newRequest_()) { }\n };\n /**\n * This is called any time someone might want a script tag to be added. It adds a script tag when there aren't\n * too many outstanding requests and we are still alive.\n *\n * If there are outstanding packet segments to send, it sends one. If there aren't, it sends a long-poll anyways if\n * needed.\n */\n FirebaseIFrameScriptHolder.prototype.newRequest_ = function () {\n // We keep one outstanding request open all the time to receive data, but if we need to send data\n // (pendingSegs.length > 0) then we create a new request to send the data. The server will automatically\n // close the old request.\n if (this.alive &&\n this.sendNewPolls &&\n this.outstandingRequests.count() < (this.pendingSegs.length > 0 ? 2 : 1)) {\n //construct our url\n this.currentSerial++;\n var urlParams = {};\n urlParams[exports.FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\n urlParams[exports.FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\n urlParams[exports.FIREBASE_LONGPOLL_SERIAL_PARAM] = this.currentSerial;\n var theURL = this.urlFn(urlParams);\n //Now add as much data as we can.\n var curDataString = '';\n var i = 0;\n while (this.pendingSegs.length > 0) {\n //first, lets see if the next segment will fit.\n var nextSeg = this.pendingSegs[0];\n if (nextSeg.d.length + SEG_HEADER_SIZE + curDataString.length <=\n MAX_URL_DATA_SIZE) {\n //great, the segment will fit. Lets append it.\n var theSeg = this.pendingSegs.shift();\n curDataString =\n curDataString +\n '&' +\n exports.FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM +\n i +\n '=' +\n theSeg.seg +\n '&' +\n exports.FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET +\n i +\n '=' +\n theSeg.ts +\n '&' +\n exports.FIREBASE_LONGPOLL_DATA_PARAM +\n i +\n '=' +\n theSeg.d;\n i++;\n }\n else {\n break;\n }\n }\n theURL = theURL + curDataString;\n this.addLongPollTag_(theURL, this.currentSerial);\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Queue a packet for transmission to the server.\n * @param segnum - A sequential id for this packet segment used for reassembly\n * @param totalsegs - The total number of segments in this packet\n * @param data - The data for this segment.\n */\n FirebaseIFrameScriptHolder.prototype.enqueueSegment = function (segnum, totalsegs, data) {\n //add this to the queue of segments to send.\n this.pendingSegs.push({ seg: segnum, ts: totalsegs, d: data });\n //send the data immediately if there isn't already data being transmitted, unless\n //startLongPoll hasn't been called yet.\n if (this.alive) {\n this.newRequest_();\n }\n };\n /**\n * Add a script tag for a regular long-poll request.\n * @param {!string} url - The URL of the script tag.\n * @param {!number} serial - The serial number of the request.\n * @private\n */\n FirebaseIFrameScriptHolder.prototype.addLongPollTag_ = function (url, serial) {\n var _this = this;\n //remember that we sent this request.\n this.outstandingRequests.add(serial, 1);\n var doNewRequest = function () {\n _this.outstandingRequests.remove(serial);\n _this.newRequest_();\n };\n // If this request doesn't return on its own accord (by the server sending us some data), we'll\n // create a new one after the KEEPALIVE interval to make sure we always keep a fresh request open.\n var keepaliveTimeout = setTimeout(doNewRequest, Math.floor(KEEPALIVE_REQUEST_INTERVAL));\n var readyStateCB = function () {\n // Request completed. Cancel the keepalive.\n clearTimeout(keepaliveTimeout);\n // Trigger a new request so we can continue receiving data.\n doNewRequest();\n };\n this.addTag(url, readyStateCB);\n };\n /**\n * Add an arbitrary script tag to the iframe.\n * @param {!string} url - The URL for the script tag source.\n * @param {!function()} loadCB - A callback to be triggered once the script has loaded.\n */\n FirebaseIFrameScriptHolder.prototype.addTag = function (url, loadCB) {\n var _this = this;\n if (util_3.isNodeSdk()) {\n this.doNodeLongPoll(url, loadCB);\n }\n else {\n setTimeout(function () {\n try {\n // if we're already closed, don't add this poll\n if (!_this.sendNewPolls)\n return;\n var newScript_1 = _this.myIFrame.doc.createElement('script');\n newScript_1.type = 'text/javascript';\n newScript_1.async = true;\n newScript_1.src = url;\n newScript_1.onload = newScript_1.onreadystatechange = function () {\n var rstate = newScript_1.readyState;\n if (!rstate || rstate === 'loaded' || rstate === 'complete') {\n newScript_1.onload = newScript_1.onreadystatechange = null;\n if (newScript_1.parentNode) {\n newScript_1.parentNode.removeChild(newScript_1);\n }\n loadCB();\n }\n };\n newScript_1.onerror = function () {\n util_1.log('Long-poll script failed to load: ' + url);\n _this.sendNewPolls = false;\n _this.close();\n };\n _this.myIFrame.doc.body.appendChild(newScript_1);\n }\n catch (e) {\n // TODO: we should make this error visible somehow\n }\n }, Math.floor(1));\n }\n };\n return FirebaseIFrameScriptHolder;\n}());\nexports.FirebaseIFrameScriptHolder = FirebaseIFrameScriptHolder;\n\n//# sourceMappingURL=BrowserPollConnection.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar app_1 = require(\"@firebase/app\");\nvar util_1 = require(\"@firebase/util\");\nvar util_2 = require(\"../core/util/util\");\nvar StatsManager_1 = require(\"../core/stats/StatsManager\");\nvar Constants_1 = require(\"./Constants\");\nvar util_3 = require(\"@firebase/util\");\nvar storage_1 = require(\"../core/storage/storage\");\nvar util_4 = require(\"@firebase/util\");\nvar util_5 = require(\"@firebase/util\");\nvar WEBSOCKET_MAX_FRAME_SIZE = 16384;\nvar WEBSOCKET_KEEPALIVE_INTERVAL = 45000;\nvar WebSocketImpl = null;\nif (typeof MozWebSocket !== 'undefined') {\n WebSocketImpl = MozWebSocket;\n}\nelse if (typeof WebSocket !== 'undefined') {\n WebSocketImpl = WebSocket;\n}\nfunction setWebSocketImpl(impl) {\n WebSocketImpl = impl;\n}\nexports.setWebSocketImpl = setWebSocketImpl;\n/**\n * Create a new websocket connection with the given callbacks.\n * @constructor\n * @implements {Transport}\n */\nvar WebSocketConnection = /** @class */ (function () {\n /**\n * @param {string} connId identifier for this transport\n * @param {RepoInfo} repoInfo The info for the websocket endpoint.\n * @param {string=} transportSessionId Optional transportSessionId if this is connecting to an existing transport\n * session\n * @param {string=} lastSessionId Optional lastSessionId if there was a previous connection\n */\n function WebSocketConnection(connId, repoInfo, transportSessionId, lastSessionId) {\n this.connId = connId;\n this.keepaliveTimer = null;\n this.frames = null;\n this.totalFrames = 0;\n this.bytesSent = 0;\n this.bytesReceived = 0;\n this.log_ = util_2.logWrapper(this.connId);\n this.stats_ = StatsManager_1.StatsManager.getCollection(repoInfo);\n this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId);\n }\n /**\n * @param {RepoInfo} repoInfo The info for the websocket endpoint.\n * @param {string=} transportSessionId Optional transportSessionId if this is connecting to an existing transport\n * session\n * @param {string=} lastSessionId Optional lastSessionId if there was a previous connection\n * @return {string} connection url\n * @private\n */\n WebSocketConnection.connectionURL_ = function (repoInfo, transportSessionId, lastSessionId) {\n var urlParams = {};\n urlParams[Constants_1.VERSION_PARAM] = Constants_1.PROTOCOL_VERSION;\n if (!util_5.isNodeSdk() &&\n typeof location !== 'undefined' &&\n location.href &&\n location.href.indexOf(Constants_1.FORGE_DOMAIN) !== -1) {\n urlParams[Constants_1.REFERER_PARAM] = Constants_1.FORGE_REF;\n }\n if (transportSessionId) {\n urlParams[Constants_1.TRANSPORT_SESSION_PARAM] = transportSessionId;\n }\n if (lastSessionId) {\n urlParams[Constants_1.LAST_SESSION_PARAM] = lastSessionId;\n }\n return repoInfo.connectionURL(Constants_1.WEBSOCKET, urlParams);\n };\n /**\n *\n * @param onMessage Callback when messages arrive\n * @param onDisconnect Callback with connection lost.\n */\n WebSocketConnection.prototype.open = function (onMessage, onDisconnect) {\n var _this = this;\n this.onDisconnect = onDisconnect;\n this.onMessage = onMessage;\n this.log_('Websocket connecting to ' + this.connURL);\n this.everConnected_ = false;\n // Assume failure until proven otherwise.\n storage_1.PersistentStorage.set('previous_websocket_failure', true);\n try {\n if (util_5.isNodeSdk()) {\n var device = util_3.CONSTANTS.NODE_ADMIN ? 'AdminNode' : 'Node';\n // UA Format: Firebase////\n var options = {\n headers: {\n 'User-Agent': \"Firebase/\" + Constants_1.PROTOCOL_VERSION + \"/\" + app_1.default.SDK_VERSION + \"/\" + process.platform + \"/\" + device\n }\n };\n // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.\n var env = process['env'];\n var proxy = this.connURL.indexOf('wss://') == 0\n ? env['HTTPS_PROXY'] || env['https_proxy']\n : env['HTTP_PROXY'] || env['http_proxy'];\n if (proxy) {\n options['proxy'] = { origin: proxy };\n }\n this.mySock = new WebSocketImpl(this.connURL, [], options);\n }\n else {\n this.mySock = new WebSocketImpl(this.connURL);\n }\n }\n catch (e) {\n this.log_('Error instantiating WebSocket.');\n var error = e.message || e.data;\n if (error) {\n this.log_(error);\n }\n this.onClosed_();\n return;\n }\n this.mySock.onopen = function () {\n _this.log_('Websocket connected.');\n _this.everConnected_ = true;\n };\n this.mySock.onclose = function () {\n _this.log_('Websocket connection was disconnected.');\n _this.mySock = null;\n _this.onClosed_();\n };\n this.mySock.onmessage = function (m) {\n _this.handleIncomingFrame(m);\n };\n this.mySock.onerror = function (e) {\n _this.log_('WebSocket error. Closing connection.');\n var error = e.message || e.data;\n if (error) {\n _this.log_(error);\n }\n _this.onClosed_();\n };\n };\n /**\n * No-op for websockets, we don't need to do anything once the connection is confirmed as open\n */\n WebSocketConnection.prototype.start = function () { };\n WebSocketConnection.forceDisallow = function () {\n WebSocketConnection.forceDisallow_ = true;\n };\n WebSocketConnection.isAvailable = function () {\n var isOldAndroid = false;\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\n var oldAndroidRegex = /Android ([0-9]{0,}\\.[0-9]{0,})/;\n var oldAndroidMatch = navigator.userAgent.match(oldAndroidRegex);\n if (oldAndroidMatch && oldAndroidMatch.length > 1) {\n if (parseFloat(oldAndroidMatch[1]) < 4.4) {\n isOldAndroid = true;\n }\n }\n }\n return (!isOldAndroid &&\n WebSocketImpl !== null &&\n !WebSocketConnection.forceDisallow_);\n };\n /**\n * Returns true if we previously failed to connect with this transport.\n * @return {boolean}\n */\n WebSocketConnection.previouslyFailed = function () {\n // If our persistent storage is actually only in-memory storage,\n // we default to assuming that it previously failed to be safe.\n return (storage_1.PersistentStorage.isInMemoryStorage ||\n storage_1.PersistentStorage.get('previous_websocket_failure') === true);\n };\n WebSocketConnection.prototype.markConnectionHealthy = function () {\n storage_1.PersistentStorage.remove('previous_websocket_failure');\n };\n WebSocketConnection.prototype.appendFrame_ = function (data) {\n this.frames.push(data);\n if (this.frames.length == this.totalFrames) {\n var fullMess = this.frames.join('');\n this.frames = null;\n var jsonMess = util_4.jsonEval(fullMess);\n //handle the message\n this.onMessage(jsonMess);\n }\n };\n /**\n * @param {number} frameCount The number of frames we are expecting from the server\n * @private\n */\n WebSocketConnection.prototype.handleNewFrameCount_ = function (frameCount) {\n this.totalFrames = frameCount;\n this.frames = [];\n };\n /**\n * Attempts to parse a frame count out of some text. If it can't, assumes a value of 1\n * @param {!String} data\n * @return {?String} Any remaining data to be process, or null if there is none\n * @private\n */\n WebSocketConnection.prototype.extractFrameCount_ = function (data) {\n util_1.assert(this.frames === null, 'We already have a frame buffer');\n // TODO: The server is only supposed to send up to 9999 frames (i.e. length <= 4), but that isn't being enforced\n // currently. So allowing larger frame counts (length <= 6). See https://app.asana.com/0/search/8688598998380/8237608042508\n if (data.length <= 6) {\n var frameCount = Number(data);\n if (!isNaN(frameCount)) {\n this.handleNewFrameCount_(frameCount);\n return null;\n }\n }\n this.handleNewFrameCount_(1);\n return data;\n };\n /**\n * Process a websocket frame that has arrived from the server.\n * @param mess The frame data\n */\n WebSocketConnection.prototype.handleIncomingFrame = function (mess) {\n if (this.mySock === null)\n return; // Chrome apparently delivers incoming packets even after we .close() the connection sometimes.\n var data = mess['data'];\n this.bytesReceived += data.length;\n this.stats_.incrementCounter('bytes_received', data.length);\n this.resetKeepAlive();\n if (this.frames !== null) {\n // we're buffering\n this.appendFrame_(data);\n }\n else {\n // try to parse out a frame count, otherwise, assume 1 and process it\n var remainingData = this.extractFrameCount_(data);\n if (remainingData !== null) {\n this.appendFrame_(remainingData);\n }\n }\n };\n /**\n * Send a message to the server\n * @param {Object} data The JSON object to transmit\n */\n WebSocketConnection.prototype.send = function (data) {\n this.resetKeepAlive();\n var dataStr = util_4.stringify(data);\n this.bytesSent += dataStr.length;\n this.stats_.incrementCounter('bytes_sent', dataStr.length);\n //We can only fit a certain amount in each websocket frame, so we need to split this request\n //up into multiple pieces if it doesn't fit in one request.\n var dataSegs = util_2.splitStringBySize(dataStr, WEBSOCKET_MAX_FRAME_SIZE);\n //Send the length header\n if (dataSegs.length > 1) {\n this.sendString_(String(dataSegs.length));\n }\n //Send the actual data in segments.\n for (var i = 0; i < dataSegs.length; i++) {\n this.sendString_(dataSegs[i]);\n }\n };\n WebSocketConnection.prototype.shutdown_ = function () {\n this.isClosed_ = true;\n if (this.keepaliveTimer) {\n clearInterval(this.keepaliveTimer);\n this.keepaliveTimer = null;\n }\n if (this.mySock) {\n this.mySock.close();\n this.mySock = null;\n }\n };\n WebSocketConnection.prototype.onClosed_ = function () {\n if (!this.isClosed_) {\n this.log_('WebSocket is closing itself');\n this.shutdown_();\n // since this is an internal close, trigger the close listener\n if (this.onDisconnect) {\n this.onDisconnect(this.everConnected_);\n this.onDisconnect = null;\n }\n }\n };\n /**\n * External-facing close handler.\n * Close the websocket and kill the connection.\n */\n WebSocketConnection.prototype.close = function () {\n if (!this.isClosed_) {\n this.log_('WebSocket is being closed');\n this.shutdown_();\n }\n };\n /**\n * Kill the current keepalive timer and start a new one, to ensure that it always fires N seconds after\n * the last activity.\n */\n WebSocketConnection.prototype.resetKeepAlive = function () {\n var _this = this;\n clearInterval(this.keepaliveTimer);\n this.keepaliveTimer = setInterval(function () {\n //If there has been no websocket activity for a while, send a no-op\n if (_this.mySock) {\n _this.sendString_('0');\n }\n _this.resetKeepAlive();\n }, Math.floor(WEBSOCKET_KEEPALIVE_INTERVAL));\n };\n /**\n * Send a string over the websocket.\n *\n * @param {string} str String to send.\n * @private\n */\n WebSocketConnection.prototype.sendString_ = function (str) {\n // Firefox seems to sometimes throw exceptions (NS_ERROR_UNEXPECTED) from websocket .send()\n // calls for some unknown reason. We treat these as an error and disconnect.\n // See https://app.asana.com/0/58926111402292/68021340250410\n try {\n this.mySock.send(str);\n }\n catch (e) {\n this.log_('Exception thrown from WebSocket.send():', e.message || e.data, 'Closing connection.');\n setTimeout(this.onClosed_.bind(this), 0);\n }\n };\n /**\n * Number of response before we consider the connection \"healthy.\"\n * @type {number}\n */\n WebSocketConnection.responsesRequiredToBeHealthy = 2;\n /**\n * Time to wait for the connection te become healthy before giving up.\n * @type {number}\n */\n WebSocketConnection.healthyTimeout = 30000;\n return WebSocketConnection;\n}());\nexports.WebSocketConnection = WebSocketConnection;\n\n//# sourceMappingURL=WebSocketConnection.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Interface defining the set of actions that can be performed against the Firebase server\n * (basically corresponds to our wire protocol).\n *\n * @interface\n */\nvar ServerActions = /** @class */ (function () {\n function ServerActions() {\n }\n /**\n * @param {string} pathString\n * @param {*} data\n * @param {function(string, string)=} onComplete\n * @param {string=} hash\n */\n ServerActions.prototype.put = function (pathString, data, onComplete, hash) { };\n /**\n * @param {string} pathString\n * @param {*} data\n * @param {function(string, ?string)} onComplete\n * @param {string=} hash\n */\n ServerActions.prototype.merge = function (pathString, data, onComplete, hash) { };\n /**\n * Refreshes the auth token for the current connection.\n * @param {string} token The authentication token\n */\n ServerActions.prototype.refreshAuthToken = function (token) { };\n /**\n * @param {string} pathString\n * @param {*} data\n * @param {function(string, string)=} onComplete\n */\n ServerActions.prototype.onDisconnectPut = function (pathString, data, onComplete) { };\n /**\n * @param {string} pathString\n * @param {*} data\n * @param {function(string, string)=} onComplete\n */\n ServerActions.prototype.onDisconnectMerge = function (pathString, data, onComplete) { };\n /**\n * @param {string} pathString\n * @param {function(string, string)=} onComplete\n */\n ServerActions.prototype.onDisconnectCancel = function (pathString, onComplete) { };\n /**\n * @param {Object.} stats\n */\n ServerActions.prototype.reportStats = function (stats) { };\n return ServerActions;\n}());\nexports.ServerActions = ServerActions;\n\n//# sourceMappingURL=ServerActions.js.map\n","\"use strict\";\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar IndexedFilter_1 = require(\"./IndexedFilter\");\nvar PriorityIndex_1 = require(\"../../snap/indexes/PriorityIndex\");\nvar Node_1 = require(\"../../../core/snap/Node\");\nvar ChildrenNode_1 = require(\"../../snap/ChildrenNode\");\n/**\n * Filters nodes by range and uses an IndexFilter to track any changes after filtering the node\n *\n * @constructor\n * @implements {NodeFilter}\n */\nvar RangedFilter = /** @class */ (function () {\n /**\n * @param {!QueryParams} params\n */\n function RangedFilter(params) {\n this.indexedFilter_ = new IndexedFilter_1.IndexedFilter(params.getIndex());\n this.index_ = params.getIndex();\n this.startPost_ = RangedFilter.getStartPost_(params);\n this.endPost_ = RangedFilter.getEndPost_(params);\n }\n /**\n * @return {!NamedNode}\n */\n RangedFilter.prototype.getStartPost = function () {\n return this.startPost_;\n };\n /**\n * @return {!NamedNode}\n */\n RangedFilter.prototype.getEndPost = function () {\n return this.endPost_;\n };\n /**\n * @param {!NamedNode} node\n * @return {boolean}\n */\n RangedFilter.prototype.matches = function (node) {\n return (this.index_.compare(this.getStartPost(), node) <= 0 &&\n this.index_.compare(node, this.getEndPost()) <= 0);\n };\n /**\n * @inheritDoc\n */\n RangedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {\n if (!this.matches(new Node_1.NamedNode(key, newChild))) {\n newChild = ChildrenNode_1.ChildrenNode.EMPTY_NODE;\n }\n return this.indexedFilter_.updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\n };\n /**\n * @inheritDoc\n */\n RangedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {\n if (newSnap.isLeafNode()) {\n // Make sure we have a children node with the correct index, not a leaf node;\n newSnap = ChildrenNode_1.ChildrenNode.EMPTY_NODE;\n }\n var filtered = newSnap.withIndex(this.index_);\n // Don't support priorities on queries\n filtered = filtered.updatePriority(ChildrenNode_1.ChildrenNode.EMPTY_NODE);\n var self = this;\n newSnap.forEachChild(PriorityIndex_1.PRIORITY_INDEX, function (key, childNode) {\n if (!self.matches(new Node_1.NamedNode(key, childNode))) {\n filtered = filtered.updateImmediateChild(key, ChildrenNode_1.ChildrenNode.EMPTY_NODE);\n }\n });\n return this.indexedFilter_.updateFullNode(oldSnap, filtered, optChangeAccumulator);\n };\n /**\n * @inheritDoc\n */\n RangedFilter.prototype.updatePriority = function (oldSnap, newPriority) {\n // Don't support priorities on queries\n return oldSnap;\n };\n /**\n * @inheritDoc\n */\n RangedFilter.prototype.filtersNodes = function () {\n return true;\n };\n /**\n * @inheritDoc\n */\n RangedFilter.prototype.getIndexedFilter = function () {\n return this.indexedFilter_;\n };\n /**\n * @inheritDoc\n */\n RangedFilter.prototype.getIndex = function () {\n return this.index_;\n };\n /**\n * @param {!QueryParams} params\n * @return {!NamedNode}\n * @private\n */\n RangedFilter.getStartPost_ = function (params) {\n if (params.hasStart()) {\n var startName = params.getIndexStartName();\n return params.getIndex().makePost(params.getIndexStartValue(), startName);\n }\n else {\n return params.getIndex().minPost();\n }\n };\n /**\n * @param {!QueryParams} params\n * @return {!NamedNode}\n * @private\n */\n RangedFilter.getEndPost_ = function (params) {\n if (params.hasEnd()) {\n var endName = params.getIndexEndName();\n return params.getIndex().makePost(params.getIndexEndValue(), endName);\n }\n else {\n return params.getIndex().maxPost();\n }\n };\n return RangedFilter;\n}());\nexports.RangedFilter = RangedFilter;\n\n//# sourceMappingURL=RangedFilter.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar firebase = require('./app');\nrequire('./auth');\nrequire('./database');\nrequire('./messaging');\nrequire('./storage');\n\nmodule.exports = firebase;\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createSubscribe, deepCopy, deepExtend, ErrorFactory, patchProperty } from '@firebase/util';\nvar contains = function (obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\nvar DEFAULT_ENTRY_NAME = '[DEFAULT]';\n// An array to capture listeners before the true auth functions\n// exist\nvar tokenListeners = [];\n/**\n * Global context object for a collection of services using\n * a shared authentication state.\n */\nvar FirebaseAppImpl = /** @class */ (function () {\n function FirebaseAppImpl(options, name, firebase_) {\n this.firebase_ = firebase_;\n this.isDeleted_ = false;\n this.services_ = {};\n this.name_ = name;\n this.options_ = deepCopy(options);\n this.INTERNAL = {\n getUid: function () { return null; },\n getToken: function () { return Promise.resolve(null); },\n addAuthTokenListener: function (callback) {\n tokenListeners.push(callback);\n // Make sure callback is called, asynchronously, in the absence of the auth module\n setTimeout(function () { return callback(null); }, 0);\n },\n removeAuthTokenListener: function (callback) {\n tokenListeners = tokenListeners.filter(function (listener) { return listener !== callback; });\n }\n };\n }\n Object.defineProperty(FirebaseAppImpl.prototype, \"name\", {\n get: function () {\n this.checkDestroyed_();\n return this.name_;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FirebaseAppImpl.prototype, \"options\", {\n get: function () {\n this.checkDestroyed_();\n return this.options_;\n },\n enumerable: true,\n configurable: true\n });\n FirebaseAppImpl.prototype.delete = function () {\n var _this = this;\n return new Promise(function (resolve) {\n _this.checkDestroyed_();\n resolve();\n })\n .then(function () {\n _this.firebase_.INTERNAL.removeApp(_this.name_);\n var services = [];\n Object.keys(_this.services_).forEach(function (serviceKey) {\n Object.keys(_this.services_[serviceKey]).forEach(function (instanceKey) {\n services.push(_this.services_[serviceKey][instanceKey]);\n });\n });\n return Promise.all(services.map(function (service) {\n return service.INTERNAL.delete();\n }));\n })\n .then(function () {\n _this.isDeleted_ = true;\n _this.services_ = {};\n });\n };\n /**\n * Return a service instance associated with this app (creating it\n * on demand), identified by the passed instanceIdentifier.\n *\n * NOTE: Currently storage is the only one that is leveraging this\n * functionality. They invoke it by calling:\n *\n * ```javascript\n * firebase.app().storage('STORAGE BUCKET ID')\n * ```\n *\n * The service name is passed to this already\n * @internal\n */\n FirebaseAppImpl.prototype._getService = function (name, instanceIdentifier) {\n if (instanceIdentifier === void 0) { instanceIdentifier = DEFAULT_ENTRY_NAME; }\n this.checkDestroyed_();\n if (!this.services_[name]) {\n this.services_[name] = {};\n }\n if (!this.services_[name][instanceIdentifier]) {\n /**\n * If a custom instance has been defined (i.e. not '[DEFAULT]')\n * then we will pass that instance on, otherwise we pass `null`\n */\n var instanceSpecifier = instanceIdentifier !== DEFAULT_ENTRY_NAME\n ? instanceIdentifier\n : undefined;\n var service = this.firebase_.INTERNAL.factories[name](this, this.extendApp.bind(this), instanceSpecifier);\n this.services_[name][instanceIdentifier] = service;\n }\n return this.services_[name][instanceIdentifier];\n };\n /**\n * Callback function used to extend an App instance at the time\n * of service instance creation.\n */\n FirebaseAppImpl.prototype.extendApp = function (props) {\n var _this = this;\n // Copy the object onto the FirebaseAppImpl prototype\n deepExtend(this, props);\n /**\n * If the app has overwritten the addAuthTokenListener stub, forward\n * the active token listeners on to the true fxn.\n *\n * TODO: This function is required due to our current module\n * structure. Once we are able to rely strictly upon a single module\n * implementation, this code should be refactored and Auth should\n * provide these stubs and the upgrade logic\n */\n if (props.INTERNAL && props.INTERNAL.addAuthTokenListener) {\n tokenListeners.forEach(function (listener) {\n _this.INTERNAL.addAuthTokenListener(listener);\n });\n tokenListeners = [];\n }\n };\n /**\n * This function will throw an Error if the App has already been deleted -\n * use before performing API actions on the App.\n */\n FirebaseAppImpl.prototype.checkDestroyed_ = function () {\n if (this.isDeleted_) {\n error('app-deleted', { name: this.name_ });\n }\n };\n return FirebaseAppImpl;\n}());\n// Prevent dead-code elimination of these methods w/o invalid property\n// copying.\n(FirebaseAppImpl.prototype.name && FirebaseAppImpl.prototype.options) ||\n FirebaseAppImpl.prototype.delete ||\n console.log('dc');\n/**\n * Return a firebase namespace object.\n *\n * In production, this will be called exactly once and the result\n * assigned to the 'firebase' global. It may be called multiple times\n * in unit tests.\n */\nexport function createFirebaseNamespace() {\n var apps_ = {};\n var factories = {};\n var appHooks = {};\n // A namespace is a plain JavaScript Object.\n var namespace = {\n // Hack to prevent Babel from modifying the object returned\n // as the firebase namespace.\n __esModule: true,\n initializeApp: initializeApp,\n app: app,\n apps: null,\n Promise: Promise,\n SDK_VERSION: '4.9.1',\n INTERNAL: {\n registerService: registerService,\n createFirebaseNamespace: createFirebaseNamespace,\n extendNamespace: extendNamespace,\n createSubscribe: createSubscribe,\n ErrorFactory: ErrorFactory,\n removeApp: removeApp,\n factories: factories,\n useAsService: useAsService,\n Promise: Promise,\n deepExtend: deepExtend\n }\n };\n // Inject a circular default export to allow Babel users who were previously\n // using:\n //\n // import firebase from 'firebase';\n // which becomes: var firebase = require('firebase').default;\n //\n // instead of\n //\n // import * as firebase from 'firebase';\n // which becomes: var firebase = require('firebase');\n patchProperty(namespace, 'default', namespace);\n // firebase.apps is a read-only getter.\n Object.defineProperty(namespace, 'apps', {\n get: getApps\n });\n /**\n * Called by App.delete() - but before any services associated with the App\n * are deleted.\n */\n function removeApp(name) {\n var app = apps_[name];\n callAppHooks(app, 'delete');\n delete apps_[name];\n }\n /**\n * Get the App object for a given name (or DEFAULT).\n */\n function app(name) {\n name = name || DEFAULT_ENTRY_NAME;\n if (!contains(apps_, name)) {\n error('no-app', { name: name });\n }\n return apps_[name];\n }\n patchProperty(app, 'App', FirebaseAppImpl);\n /**\n * Create a new App instance (name must be unique).\n */\n function initializeApp(options, name) {\n if (name === undefined) {\n name = DEFAULT_ENTRY_NAME;\n }\n else {\n if (typeof name !== 'string' || name === '') {\n error('bad-app-name', { name: name + '' });\n }\n }\n if (contains(apps_, name)) {\n error('duplicate-app', { name: name });\n }\n var app = new FirebaseAppImpl(options, name, namespace);\n apps_[name] = app;\n callAppHooks(app, 'create');\n return app;\n }\n /*\n * Return an array of all the non-deleted FirebaseApps.\n */\n function getApps() {\n // Make a copy so caller cannot mutate the apps list.\n return Object.keys(apps_).map(function (name) { return apps_[name]; });\n }\n /*\n * Register a Firebase Service.\n *\n * firebase.INTERNAL.registerService()\n *\n * TODO: Implement serviceProperties.\n */\n function registerService(name, createService, serviceProperties, appHook, allowMultipleInstances) {\n // Cannot re-register a service that already exists\n if (factories[name]) {\n error('duplicate-service', { name: name });\n }\n // Capture the service factory for later service instantiation\n factories[name] = createService;\n // Capture the appHook, if passed\n if (appHook) {\n appHooks[name] = appHook;\n // Run the **new** app hook on all existing apps\n getApps().forEach(function (app) {\n appHook('create', app);\n });\n }\n // The Service namespace is an accessor function ...\n var serviceNamespace = function (appArg) {\n if (appArg === void 0) { appArg = app(); }\n if (typeof appArg[name] !== 'function') {\n // Invalid argument.\n // This happens in the following case: firebase.storage('gs:/')\n error('invalid-app-argument', { name: name });\n }\n // Forward service instance lookup to the FirebaseApp.\n return appArg[name]();\n };\n // ... and a container for service-level properties.\n if (serviceProperties !== undefined) {\n deepExtend(serviceNamespace, serviceProperties);\n }\n // Monkey-patch the serviceNamespace onto the firebase namespace\n namespace[name] = serviceNamespace;\n // Patch the FirebaseAppImpl prototype\n FirebaseAppImpl.prototype[name] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var serviceFxn = this._getService.bind(this, name);\n return serviceFxn.apply(this, allowMultipleInstances ? args : []);\n };\n return serviceNamespace;\n }\n /**\n * Patch the top-level firebase namespace with additional properties.\n *\n * firebase.INTERNAL.extendNamespace()\n */\n function extendNamespace(props) {\n deepExtend(namespace, props);\n }\n function callAppHooks(app, eventName) {\n Object.keys(factories).forEach(function (serviceName) {\n // Ignore virtual services\n var factoryName = useAsService(app, serviceName);\n if (factoryName === null) {\n return;\n }\n if (appHooks[factoryName]) {\n appHooks[factoryName](eventName, app);\n }\n });\n }\n // Map the requested service to a registered service name\n // (used to map auth to serverAuth service when needed).\n function useAsService(app, name) {\n if (name === 'serverAuth') {\n return null;\n }\n var useService = name;\n var options = app.options;\n return useService;\n }\n return namespace;\n}\nfunction error(code, args) {\n throw appErrors.create(code, args);\n}\n// TypeScript does not support non-string indexes!\n// let errors: {[code: AppError: string} = {\nvar errors = {\n 'no-app': \"No Firebase App '{$name}' has been created - \" +\n 'call Firebase App.initializeApp()',\n 'bad-app-name': \"Illegal App name: '{$name}\",\n 'duplicate-app': \"Firebase App named '{$name}' already exists\",\n 'app-deleted': \"Firebase App named '{$name}' already deleted\",\n 'duplicate-service': \"Firebase service named '{$name}' already registered\",\n 'sa-not-supported': 'Initializing the Firebase SDK with a service ' +\n 'account is only allowed in a Node.js environment. On client ' +\n 'devices, you should instead initialize the SDK with an api key and ' +\n 'auth domain',\n 'invalid-app-argument': 'firebase.{$name}() takes either no argument or a ' +\n 'Firebase App instance.'\n};\nvar appErrors = new ErrorFactory('app', 'Firebase', errors);\n\n\n//# sourceMappingURL=firebaseApp.js.map\n","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createFirebaseNamespace } from './src/firebaseApp';\nexport var firebase = createFirebaseNamespace();\nexport default firebase;\n\n\n//# sourceMappingURL=index.js.map\n"],"sourceRoot":""}