fipamo/themes/dash/assets/js/dash.min.map
2018-11-14 11:32:35 -05:00

1 line
813 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"sources":["../../../../brain/tools/events/EventEmitter.js","../../../../brain/tools/events/DataEvent.js","../../../../brain/tools/utilities/DataUtils.js","../../../../brain/tools/effects/Animate.js","../../../../brain/tools/utilities/StringUtils.js","actions/PostActions.js","../../../../brain/tools/events/EditorEvent.js","../../../../node_modules/tiny-date-picker/dist/tiny-date-picker.js","../../../../brain/tools/utilities/DateUtils.js","../../src/mirror.js","../../src/utils.js","../../src/input.js","../../src/editable.js","../../src/main.js","../../../../brain/tools/ui/TextEditor.js","controllers/PostEditor.js","controllers/DisplayManager.js","../../../../node_modules/argsarray/index.js","../../../../node_modules/immediate/lib/browser.js","../../../../../../.nvm/versions/node/v8.12.0/lib/node_modules/parcel-bundler/node_modules/events/events.js","../../../../node_modules/inherits/inherits_browser.js","../../../../node_modules/spark-md5/spark-md5.js","../../../../node_modules/pouchdb/node_modules/uuid/lib/rng-browser.js","../../../../node_modules/pouchdb/node_modules/uuid/lib/bytesToUuid.js","../../../../node_modules/pouchdb/node_modules/uuid/v1.js","../../../../node_modules/pouchdb/node_modules/uuid/v4.js","../../../../node_modules/pouchdb/node_modules/uuid/index.js","../../../../node_modules/vuvuzela/index.js","../../../../../../.nvm/versions/node/v8.12.0/lib/node_modules/parcel-bundler/node_modules/process/browser.js","../../../../node_modules/pouchdb/lib/index-browser.es.js","Base.js","Start.js"],"names":["EventEmitter","listeners","Map","label","callback","has","set","get","push","isFunction","obj","index","length","reduce","i","listener","splice","args","forEach","REQUEST_GOOD","REQUEST_LAME","IMG_REQUEST_GOOD","IMG_REQUEST_LAME","SETTINGS_LOADED","HTML_LOADED","ARCHIVES_JSON_LOADED","ARCHIVES_PAGE_LOADED","ARCHIVES_ENTRY_LOADED","PROJECT_UPDATED","PROJECT_ADDED","PROJECTS_SORTED","POST_IMAGE_ADDED","POST_ERROR","POST_ADDED","POST_UPDATED","POST_DELETED","DataEvent","REQUEST_TYPE_POST","REQUEST_TYPE_GET","REQUEST_TYPE_PUT","REQUEST_TYPE_DELETE","CONTENT_TYPE_JSON","CONTENT_TYPE_FORM","DataUtils","self","requestURL","eventType","requestType","contentType","requestData","Promise","resolve","reject","request","XMLHttpRequest","upload","onprogress","handleLoadProgress","open","onload","e","status","setRequestHeader","send","JSON","stringify","url","responseType","response","Error","statusText","onerror","src","body","document","querySelector","myImage","Image","crossOrigin","imgLoad","then","imageURL","window","URL","createObjectURL","percentComplete","Math","ceil","loaded","total","Animate","properties","animation","anime","StringUtils","string","clean","replace","toLowerCase","quote_style","optTemp","noquotes","toString","OPTS","concat","ENT_HTML_QUOTE_SINGLE","PostActions","folio","dataUtils","edit","uploadFiles","postData","FormData","files","file","type","match","append","name","txt","createElement","innerHTML","getElementById","value","cleanString","getAttribute","postURL","postEventType","postID","catch","err","EDITOR_DELETE","EDITOR_UPLOAD_POST_IMAGE","EDITOR_SAVE","EDITOR_UPDATE","EditorEvent","DateUtils","time","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getTime","seconds","date","rawdate","day","String","getUTCDate","month","getUTCMonth","year","getUTCFullYear","hour","getUTCHours","minute","getUTCMinutes","getUTCSeconds","millisecond","getUTCMilliseconds","offset","getTimezoneOffset","attributes","createMirror","element","html","mirror","mirrorCss","css","tagName","attr","getComputedStyle","initialize","styles","keys","style","key","parentNode","insertBefore","nextSibling","rect","marker","ownerDocument","boundingRect","offsetLeft","offsetTop","offsetHeight","removeChild","isContentEditable","contentEditable","getContext","settings","customPos","iframe","noShadowCaret","contentWindow","contentDocument","getOffset","ctx","win","doc","getBoundingClientRect","docEl","documentElement","scrollLeft","pageXOffset","scrollTop","pageYOffset","top","left","isObject","createInputCaret","getPos","selectionStart","setPos","pos","setSelectionRange","elementOffset","position","getPosition","height","format","val","undefined","startRange","slice","endRange","createEditableCaret","sel","getSelection","found","find","parent","childNodes","node","nodeType","range","createRange","setStart","removeAllRanges","addRange","getRange","hasCustomPos","endOffset","endContainer","clonedRange","cloneRange","fixedPosition","setEnd","width","detach","shadowCaret","createTextNode","insertNode","selectNode","clientTop","clientLeft","inputOffset","rangeCount","getRangeAt","selectNodeContents","createCaret","options","caret","TextEditor","textEditor","scrollLimit","hljs","initHighlightingOnLoad","dateUtils","fixLimit","caretPos","setInputs","addEventListener","f","refresh","editorButtons","querySelectorAll","handleEditorOption","inputType","spiffed","highlight","innerText","temp","data","classList","add","remove","setTimeout","pulled","deleteContents","preventDefault","target","id","emitEvent","PostEditor","anim","editor","addListener","handleEditorOptions","handlePostImageAdd","mode","start","object","targets","duration","opacity","easing","complete","display","visibility","handleDragOver","handleDrop","handleClicked","click","optionButtons","handlePostOptions","currentOption","active","setAttribute","submitPost","note","parse","notify","message","location","console","log","confirm","deletePost","stopPropagation","dataTransfer","dropEffect","reader","FileReader","theFile","image","result","title","escape","span","join","appendChild","readAsDataURL","DisplayManager","currentDisplay","urlPieces","split","chooseDisplay","section","page","_events","_maxListeners","module","exports","prototype","defaultMaxListeners","setMaxListeners","n","isNumber","isNaN","TypeError","emit","er","handler","len","error","arguments","context","isUndefined","call","Array","apply","m","newListener","warned","trace","on","once","fired","g","removeListener","list","removeAllListeners","ret","listenerCount","evlistener","emitter","arg","process","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","clearTimeout","runTimeout","fun","runClearTimeout","queue","draining","currentQueue","queueIndex","cleanUpNextTick","drainQueue","timeout","run","nextTick","Item","array","browser","env","argv","version","versions","noop","off","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","isBinaryObject","ArrayBuffer","Blob","cloneArrayBuffer","buff","byteLength","targetArray","Uint8Array","sourceArray","cloneBinaryObject","size","webkitSlice","funcToString","Function","objectCtorString","Object","isPlainObject","proto","getPrototypeOf","Ctor","constructor","clone","newObject","isArray","toISOString","hasOwnProperty","called","toPromise","func","usedCB","pop","promise","fulfill","resp","mesg","logApiCall","logArgs","origCallback","res","responseArgs","adapterFun","_closed","_destroyed","taskqueue","isReady","addTask","failed","mangle","unmangle","substring","Map$1","_store","mangled","delete","cb","defineProperty","Set$1","supportsMapAndSet","Symbol","Set","prop","getOwnPropertyDescriptor","species","ExportedSet","ExportedMap","pick","arr","MAX_NUM_CONCURRENT_REQUESTS","identityFunction","x","formatResultForOpenRevsGet","ok","bulkGet","db","opts","requests","docs","requestsById","numDocs","numDone","perDocResults","collapseResultsAndFinish","results","info","checkDone","gotResult","docIndex","allRequests","nextBatch","upTo","min","batch","processBatch","docId","j","docIdx","docRequests","docOpts","open_revs","map","rev","filter","formatResult","param","hasLocal","localStorage","setItem","getItem","hasLocalStorage","Changes","attachBrowserEvents","_listeners","dbName","inprogress","eventFunction","changesOpts","onError","changes","c","seq","since","cancelled","onChange","notifyLocalWindows","guardedConsole","method","randomNumber","max","maxTimeout","parseInt","ratio","random","defaultBackOff","explainError","str","assign","to","nextSource","nextKey","$inject_Object_assign","PouchError","reason","UNAUTHORIZED","MISSING_BULK_DOCS","MISSING_DOC","REV_CONFLICT","INVALID_ID","MISSING_ID","RESERVED_ID","NOT_OPEN","UNKNOWN_ERROR","BAD_ARG","INVALID_REQUEST","QUERY_PARSE_ERROR","DOC_VALIDATION","BAD_REQUEST","NOT_AN_OBJECT","DB_MISSING","IDB_ERROR","WSQ_ERROR","LDB_ERROR","FORBIDDEN","INVALID_REV","FILE_EXISTS","MISSING_STUB","INVALID_URL","createError","CustomPouchError","p","generateErrorFromResponse","tryFilter","req","msg","filterChange","hasFilter","query","query_params","change","filterReturn","include_docs","attachments","att","_attachments","stub","flatten","arrs","invalidIdError","test","isRemote","_remote","ee","parseDesignDocFunctionName","s","parts","normalizeDesignDocFunctionName","normalized","qName","qParser","parser","parseUri","exec","uri","encoded","indexOf","decodeURIComponent","$0","$1","$2","scopeEval","source","scope","values","upsert","diffFun","docRev","_rev","newDoc","updated","_id","tryAndPut","put","thisAtob","atob","thisBtoa","btoa","createBlob","Builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","builder","getBlob","binaryStringToArrayBuffer","bin","buf","charCodeAt","binStringToBluffer","binString","b64ToBluffer","b64","arrayBufferToBinaryString","buffer","binary","bytes","fromCharCode","readAsBinaryString","blob","hasBinaryString","onloadend","readAsArrayBuffer","blobToBinaryString","blobOrBuffer","blobToBase64","base64","setImmediateShim","global","setImmediate","MD5_CHUNK_SIZE","rawToBase64","raw","sliceBlob","end","appendBlob","arrayBuffer","appendString","appendBinary","binaryMd5","inputIsString","chunkSize","chunks","currentChunk","Md5","next","loadNextChunk","done","destroy","stringMd5","hash","rev$$1","deterministic_revs","clonedDoc","uuidV4","v4","_rev_tree","uuid","winningRev","metadata","winningId","winningPos","winningDeleted","toVisit","rev_tree","tree","ids","branches","deleted","traverseRevTree","revs","newCtx","sortByPos","a","b","collectLeaves","leaves","isLeaf","acc","sort","reverse","collectConflicts","conflicts","leaf","compactTree","revHash","rootToLeaf","paths","history","sortByPos$1","binarySearch","item","comparator","low","high","mid","insertSorted","idx","pathToTree","path","numStemmed","root","currentLeaf","compareTree","mergeTree","in_tree1","in_tree2","tree1","tree2","merged","doMerge","dontExpand","restree","branch","t1","t2","diff","candidateParents","trees","parentIdx","elements","elementsLen","el","stem","depth","stemmedRevs","stemmed","merge","newTree","revExists","splitRev","targetPos","targetId","getTrees","isDeleted","isLocalId","latest","historyNode","historyRev","l","Changes$1","tryCatchInChangeListener","pending","lastSeq","onDestroy","cancel","isCancelled","bind","validateChanges","processChange","changeList","_conflicts","PouchDB","_changesFilterPlugin","validate","doChanges","continuous","live","update_seq","normalize","shouldFilter","descending","limit","newPromise","_changes","compare","right","yankError","cleanDocs","_deleted","atts","compareByIdThenRev","idCompare","aStart","_revisions","bStart","computeHeight","edges","prnt","from","edge","allDocsKeysParse","skip","doNextCompaction","task","_compactionQueue","last_seq","_compact","shift","attachmentNameError","charAt","AbstractPouchDB","post","bulkDocs","_putLocal","_removeLocal","force","transformForceOptionToNewEditsOption","putDoc","oldRevId","oldRevNum","newRevNum","newRevId","new_edits","_put","putAttachment","attachmentId","api","createAttachment","prevrevpos","content_type","revpos","removeAttachment","docOrId","optsOrRev","was_delete","revsDiff","count","missing","addToMissing","revId","processDoc","missingForId","_getRevisionTree","missingObj","compactDocument","maxHeight","revTree","candidates","_doCompaction","compact","return_docs","promises","row","onComplete","all","deltaFunc","_getLocal","finishOpenRevs","existing","_get","revs_info","splittedRev","revNo","currentPath","hashIndex","hashFoundAtRevPos","indexOfRev","howMany","_revs_info","_getAttachment","getAttachment","allDocs","start_key","startkey","end_key","endkey","incompatibleOpt","_allDocs","close","_close","_info","db_name","auto_compaction","adapter","_type","attachmentError","_bulkDocs","registerDependentDatabase","dependentDb","depDB","__opts","dependentDbs","usePrefix","use_prefix","destroyDb","_destroy","localDoc","deletedMap","trueName","RegExp","prefix","TaskQueue","execute","fail","ready","parseAdapter","adapters","preferredAdapters","adapterName","prepareForDestruction","onDestroyed","from_constructor","onClosed","prefixedName","backend","_adapter","valid","AbortController","abort","f$1","fetch","h","Headers","eventEmitter","setUpEventEmitter","Pouch","destructListeners","_destructionListeners","onConstructorRef","onConstructorUnref","dbList","onConstructorDestroyed","addToPreferredAdapters","plugin","__defaults","defaults","defaultOpts","PouchAlt","getFieldFromDoc","parsedField","compare$1","parseField","fieldName","fields","current","ch","combinationFields","isCombinationalField","field","getKey","getValue","mergeAndedSelectors","selectors","selector","matcher","$eq","fieldMatchers","operator","mergeGtGte","mergeLtLte","mergeNe","mergeEq","$gte","$gt","$lte","$lt","$ne","massageSelector","input","wasAnded","orOrNor","subSelector","pad","padWith","upToLength","padding","targetLength","padLeft","MIN_MAGNITUDE","MAGNITUDE_DIGITS","SEP","collate","normalizeKey","ai","collationIndex","bi","stringCollate","arrayCollate","objectCollate","Infinity","origKey","toJSON","k","indexify","numToIndexableString","toIndexableString","objKey","zero","parseNumber","originalIdx","num","neg","numAsString","magAsString","magnitude","parseFloat","stack","metaStack","lastMetaElement","lastElementIndex","parseIndexableString","parsedNum","parsedStr","arrayElement","objElement","ak","bk","expFormat","toExponential","magForComparison","magString","factor","abs","factorStr","toFixed","createFieldSorter","getFieldValuesAsArray","sorting","docFieldValue","aRow","bRow","aFieldValues","bFieldValues","collation","filterInMemoryFields","rows","requestDef","inMemoryFields","rowFilter","fieldSorter","every","matchCominationalSelector","matchSelector","userOperator","userValue","some","orMatchers","matchers","fieldExists","fieldIsNotUndefined","modField","divisor","mod","arrayContainsValue","arrayContainsAllValues","arraySize","regexMatch","re","typeMatch","neValue","matchesSelector","rowsMatched","evalFilter","evalView","code","filterName","view","changesHandler","doc_ids","viewName","ddoc","mapFun","views","filterFun","filters","applyChangesFilterPlugin","toObject","reservedWords","dataWords","parseRevisionInfo","makeRevTreeFromRevisions","revisions","revisionIds","parseDoc","newEdits","dbOpts","nRevNum","revInfo","specialKey","parseBase64","preprocessString","blobType","asBinary","digest","preprocessBlob","md5","preprocessAttachment","preprocessAttachments","docInfos","docv","overallErr","docInfo","recv","processedAttachment","updateDoc","revLimit","prev","writeDoc","previousWinningRev","previouslyDeleted","isRoot","inConflict","newRev","rev_map","winningRev$$1","winningRevIsDeleted","delta","newRevIsDeleted","rootIsMissing","processDocs","fetchedDocs","tx","overallCallback","insertDoc","resultsIdx","idsToDocs","docsDone","docsToDo","checkAllDocsDone","currentDoc","docWritten","nextDoc","ADAPTER_VERSION","DOC_STORE","BY_SEQ_STORE","ATTACH_STORE","ATTACH_AND_SEQ_STORE","META_STORE","LOCAL_STORE","DETECT_BLOB_SUPPORT_STORE","safeJsonParse","vuvuzela","safeJsonStringify","json","idbError","evt","encodeMetadata","deletedOrLocal","decodeMetadata","storedObject","decodeDoc","_doc_id_rev","lastIndexOf","readBlobData","asBlob","fetchAttachmentsIfNecessary","txn","fetchAttachment","attObj","objectStore","onsuccess","postProcessAttachments","attNames","compactRevs","possiblyOrphanedDigests","seqStore","attStore","attAndSeqStore","deleteOrphanedAttachments","countReq","IDBKeyRange","bound","cursor","openCursor","only","event","digestSeq","primaryKey","continue","openTransactionSafely","idb","stores","transaction","idbBulkDocs","docStore","bySeqStore","attachStore","attachAndSeqStore","metaStore","docInfoError","metaDoc","allDocsProcessed","docCountDelta","preconditionErrored","_meta","blobSupport","startTransaction","txnResult","onabort","ontimeout","oncomplete","updateDocCountIfReady","verifyAttachments","fetchExistingDocs","onAllDocsProcessed","idbProcessDocs","revs_limit","docCount","numFetched","readMetadata","verifyAttachment","finish","digests","filename","attErr","isUpdate","hasAttachments","writeAttachments","finishDoc","afterPutDoc","revsToDelete","metadataToStore","metaDataReq","afterPutMetadata","afterPutDocError","getKeyReq","putReq","insertAttachmentMappings","collectResults","attachmentSaved","saveAttachment","attsAdded","attsToAdd","newAtt","runBatchedCursor","keyRange","batchSize","onBatch","useGetAll","getAll","getAllKeys","keysBatch","valuesBatch","pseudoCursor","onGetAll","onGetAllKeys","continuePseudoCursor","lastKey","newKeyRange","upper","upperOpen","lowerBound","onCursor","onSuccess","allDocsKeys","createKeyRange","inclusiveEnd","upperBound","idbAllDocs","inclusive_end","keyRangeError","onTxnComplete","docIdRevIndex","updateSeq","getMaxUpdateSeq","maxKey","fetchDocAsynchronously","onGetDoc","allDocsInner","batchValues","batchValue","batchKeys","onResultsReady","returnVal","total_rows","checkBlobSupport","blob$$1","matchedChrome","navigator","userAgent","matchedEdge","countDocs","running","tryCode","applyNext","enqueueTask","action","runAction","runCallback","runNext","docIds","numResults","docIdsToMetadata","winningDocs","metadatas","processMetadataAndWinningDoc","winningDoc","filtered","onBatchDone","fetchWinningDocAndMetadata","onGetMetadata","docIdRev","objectStores","cachedDBs","blobSupportPromise","openReqList","IdbPouch","thisCallback","init","createSchema","createObjectStore","keyPath","autoIncrement","createIndex","unique","addDeletedOrLocalIndex","createLocalStoreSchema","migrateLocalStore","localStore","local","seqCursor","addAttachAndSeqStore","migrateAttsAndSeqs","digestMap","migrateMetadata","decodeMetadataCompat","fetchMetadataSeq","metadataSeq","onGetMetadataSeq","instanceId","idb_bulkDocs","reqOpts","idb_get","attachId","attachment","blobData","idb_info","doc_count","idb_attachment_format","idb_allDocs","idbChanges","oldRev","oStore","oldDoc","openReq","indexedDB","deleteDatabase","cached","onupgradeneeded","oldVersion","currentTarget","migrations","migration","onversionchange","storedMetaDoc","completeSetup","storeMetaDocIfReady","instanceKey","IDBPouch","pool","promiseFactories","doNext","runNextBatch","thisErr","CHANGES_BATCH_SIZE","MAX_SIMULTANEOUS_REVS","CHANGES_TIMEOUT_BUFFER","DEFAULT_HEARTBEAT","supportsBulkGetMap","readAttachmentsAsBlobOrBuffer","encodeDocId","encodeURIComponent","preprocessAttachments$1","hasUrlPrefix","protocol","getHost","substr","user","password","auth","username","genDBUrl","genUrl","pathDel","host","port","paramsToStr","params","shouldCacheBust","ua","isIE","isTrident","isEdge","isGET","HttpPouch","dbUrl","ourFetch","headers","nAuth","token","unescape","now","fetchFun","adapterFun$$1","setup","fetchJSON","v","setupPromise","skip_setup","uuid$$1","ping","compact_running","interval","doBulkGet","doBulkGetShim","numBatches","onResult","batchNum","subOpts","supportsBulkGet","fetchAttachments","filenames","fetchData","encodeAttachmentId","fetchAllAttachments","docOrDocs","paramStr","batch_size","heartbeat","requestTimeout","leftToFetch","feed","seq_interval","param_name","controller","lastFetchedSeq","aborted","fetchOpts","signal","fetched","raw_results_length","finished","HttpPouch$1","QueryParseError","captureStackTrace","NotFoundError","BuiltInError","promisedCallback","callbackify","fin","finalPromiseFactory","sequentialize","promiseFactory","that","uniq","theSet","mapToKeysArray","createBuiltInError","sum","jLen","jNum","evalFunctionWithEval","TaskQueue$1","createViewSignature","reduceFun","createView","sourceDB","temporary","localDocName","viewSignature","cachedViews","_cachedViews","promiseForView","depDbName","diffFunction","fullViewName","depDbs","lastSeqDoc","persistentQueues","tempViewQueue","CHANGES_BATCH_SIZE$1","parseViewName","isGenOne","emitError","createAbstractMapReduce","mapper","reducer","ddocValidator","tryMap","tryReduce","rereduce","output","sortByKeyThenValue","y","keyCompare","sliceResults","rowToDocId","postprocessAttachments","addHttpParam","paramName","asJson","coerceInteger","integerCandidate","asNumber","Number","coerceOptions","group_level","checkPositiveInteger","number","checkQueryParseError","startkeyName","endkeyName","group","optionName","httpQuery","MAX_URL_LENGTH","keysAsString","customQuery","_query","customViewCleanup","_viewCleanup","defaultsTo","getDocsToPersist","docIdsToChangesAndEmits","metaDocId","defaultMetaDoc","docData","indexableKeysToKeyValues","getMetaDoc","getKeyValueDocs","processKeyValueDocs","kvDocsRes","kvDocs","oldKeys","keyValue","newKeys","kvDoc","saveKeyValues","seqDocId","listOfDocsToPersist","docsToPersist","getQueue","updateView","updateViewInQueue","mapResults","currentSeq","processNextBatch","createDocIdsToChangesAndEmits","createIndexableKeysToKeyValues","emittedKeyValue","complexKey","reduceView","shouldGroup","groups","lvl","POSITIVE_INFINITY","last","groupKey","reduceTry","queryView","queryViewInQueue","totalRows","shouldReduce","fetchFromView","viewOpts","expectedKeys","parsedKeyAndDocId","onMapResultsReady","finalResults","allDocsRes","docIdsToDocs","fetchPromises","keyStart","keyEnd","httpViewCleanup","localViewCleanup","docsToViews","designDocName","viewsToStatus","ddocName","viewDBNames","statusIsGood","viewDBName","dbsToDelete","destroyPromises","queryPromised","createViewPromise","stale","abstractQuery","abstractViewCleanup","viewCleanup","builtInReduce","_sum","_count","_stats","sumsqr","_sumsqr","getBuiltIn","reduceFunString","origMap","builtIn","abstract","mapreduce","isGenOne$1","fileHasChanged","remoteDoc","getDocAttachments","getDocAttachmentsFromTargetOrSource","doCheckForLocalAttachments","createBulkGetOpts","diffs","missingRevs","missingRev","getDocs","state","resultDocs","getAllDocs","bulkGetOpts","bulkGetResponse","bulkGetInfo","Boolean","hasConflicts","fetchRevisionOneDocs","getRevisionOneDocs","returnResult","CHECKPOINT_VERSION","REPLICATOR","CHECKPOINT_HISTORY_SIZE","LOWEST_SEQ","updateCheckpoint","checkpoint","session","returnValue","session_id","replicator","unshift","Checkpointer","writeCheckpoint","updateTarget","updateSource","writeTargetCheckpoint","writeSourceCheckpoint","isForbiddenError","comparisons","targetDoc","sourceDoc","compareReplicationLogs","getCheckpoint","srcDoc","tgtDoc","compareReplicationHistory","sourceHistory","targetHistory","S","sourceRest","T","targetRest","sourceId","hasSessionId","sessionId","props","rest","floor","STARTING_BACK_OFF","backOff","retry","back_off_function","backOffSet","backoffTimeSet","current_back_off","removeBackOffSetter","removeBackOffTimeSet","sortObjectPropertiesByKey","queryParams","generateReplicationId","filterViewName","queryData","md5sum","replicate","batches","currentBatch","pendingBatch","writingCheckpoint","changesCompleted","replicationCompleted","batches_limit","changesPending","repId","checkpointer","changedDocs","start_time","docs_read","docs_written","doc_write_failures","errors","initCheckpointer","checkpointOpts","writeDocs","bulkOpts","completeReplication","errorsById","create","errorsNo","errorName","finishBatch","outResult","getChanges","onCheckpointError","getDiffs","getBatchDocs","got","startNextBatch","processPendingBatch","abortReplication","immediate","fatalError","end_time","onChangesComplete","onChangesError","abortChanges","_abortChanges","startChanges","_addedListeners","Replication","_readyCalled","cleanup","toPouch","PouchConstructor","replicateWrapper","replicateRet","srcPouch","targetPouch","Sync","sync","canceled","optsPush","optsPull","pull","pushPaused","pullPaused","pullChange","direction","pushChange","pushDenied","pullDenied","pushActive","pullActive","removed","removeAll","isChange","isDenied","isPaused","isActive","addOneListener","out","success","replication","replicateMethods","other","Base","admin","displayManager","loadSettings","remote","base"],"mappings":"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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ICjrCMC;;;AAEF;AACA;AACA;AACA,uBAAc;AAAA;AAAE,IAEhB;AACA;AACA;;;;;gCAC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C,MAAM;AACzB,WAAKL,cAAL,GAAsB,EAAtB;;AACA,cAAQI,OAAR;AACI,aAAK,OAAL;AACI,eAAKJ,cAAL,GAAsB,IAAIlD,mBAAJ,EAAtB;AACA;;AAEJ;AACI;AACA;AAPR;;AASA,WAAKO,KAAL;AAEH,MACD;AACA;AACA;;;;;;;;;ACnEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,SAASjT,YAAT,GAAwB;AACtB,OAAKkW,OAAL,GAAe,KAAKA,OAAL,IAAgB,EAA/B;AACA,OAAKC,aAAL,GAAqB,KAAKA,aAAL,IAAsBjI,SAA3C;AACD;;AACDkI,MAAM,CAACC,OAAP,GAAiBrW,YAAjB,EAEA;;AACAA,YAAY,CAACA,YAAb,GAA4BA,YAA5B;AAEAA,YAAY,CAACsW,SAAb,CAAuBJ,OAAvB,GAAiChI,SAAjC;AACAlO,YAAY,CAACsW,SAAb,CAAuBH,aAAvB,GAAuCjI,SAAvC,EAEA;AACA;;AACAlO,YAAY,CAACuW,mBAAb,GAAmC,EAAnC,EAEA;AACA;;AACAvW,YAAY,CAACsW,SAAb,CAAuBE,eAAvB,GAAyC,UAASC,CAAT,EAAY;AACnD,MAAI,CAACC,QAAQ,CAACD,CAAD,CAAT,IAAgBA,CAAC,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A;AACA;AACA;AACA;AACA;AACA;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/uBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC7KA;AACA,IAAIC,OAAO,GAAGpC,MAAM,CAACC,OAAP,GAAiB,EAA/B,EAEA;AACA;AACA;AACA;;AAEA,IAAIoC,gBAAJ;AACA,IAAIC,kBAAJ;;AAEA,SAASC,gBAAT,GAA4B;AACxB,QAAM,IAAItU,KAAJ,CAAU,iCAAV,CAAN;AACH;;AACD,SAASuU,mBAAT,GAAgC;AAC5B,QAAM,IAAIvU,KAAJ,CAAU,mCAAV,CAAN;AACH;;AACA,aAAY;AACT,MAAI;AACA,QAAI,OAAO8N,UAAP,KAA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","file":"dash.min.map","sourceRoot":"../../src/com","sourcesContent":["class EventEmitter\n{\n\n //--------------------------\n // constructor\n //--------------------------\n constructor()\n {\n this.listeners = new Map();\n }\n //--------------------------\n // methods\n //--------------------------\n addListener(label, callback) {\n this.listeners.has(label) || this.listeners.set(label, []);\n this.listeners.get(label).push(callback);\n }\n\n removeListener(label, callback) {\n var isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n\n var listeners = this.listeners.get(label),\n index;\n\n if (listeners && listeners.length) {\n index = listeners.reduce((i, listener, index) => {\n return (isFunction(listener) && listener === callback)\n ? i = index\n : i;\n }, -1);\n\n if (index > -1) {\n listeners.splice(index, 1);\n this.listeners.set(label, listeners);\n return true;\n }\n }\n return false;\n }\n\n emitEvent(label, ...args) {\n var listeners = this.listeners.get(label);\n if (listeners && listeners.length) {\n listeners.forEach((listener) => {\n listener(...args);\n });\n return true;\n }\n return false;\n }\n //--------------------------\n // event handlers\n //--------------------------\n}\nexport default EventEmitter\n","export const REQUEST_GOOD = 'requestGood';\nexport const REQUEST_LAME = 'requestLame';\nexport const IMG_REQUEST_GOOD = 'imgRequestGood';\nexport const IMG_REQUEST_LAME = 'imgRequestLame';\nexport const SETTINGS_LOADED = 'dataLoaded';\nexport const HTML_LOADED = 'htmlLoaded';\nexport const ARCHIVES_JSON_LOADED = 'archivesJSONLoaded';\nexport const ARCHIVES_PAGE_LOADED = 'archivesPAGELoaded';\nexport const ARCHIVES_ENTRY_LOADED = 'archivesEntryLoaded';\nexport const PROJECT_UPDATED = 'projectUpdated';\nexport const PROJECT_ADDED = 'projectAdded';\nexport const PROJECTS_SORTED = 'projectsSorted';\nexport const POST_IMAGE_ADDED = 'postImageAdded';\nexport const POST_ERROR = 'postError';\nexport const POST_ADDED = 'postAdded';\nexport const POST_UPDATED = 'postUpdated';\nexport const POST_DELETED = 'postImageAdded';\n\nclass DataEvent\n{\n\n //--------------------------\n // methods\n //--------------------------\n\n\n\n //--------------------------\n // event handlers\n //--------------------------\n}\nexport default new DataEvent\n","export const REQUEST_TYPE_POST = \"POST\";\nexport const REQUEST_TYPE_GET = \"GET\";\nexport const REQUEST_TYPE_PUT = \"PUT\";\nexport const REQUEST_TYPE_DELETE = \"DELETE\";\nexport const CONTENT_TYPE_JSON = 'json';\nexport const CONTENT_TYPE_FORM = 'x-www-form-urlencoded';\nimport EventEmitter from '../events/EventEmitter';\nimport * as DataEvent from '../events/DataEvent';\nclass DataUtils extends EventEmitter {\n //--------------------------\n // constructor\n //--------------------------\n constructor() {\n super();\n var self = this;\n }\n //--------------------------\n // methods\n //--------------------------\n request(requestURL, eventType, requestType = REQUEST_TYPE_GET, contentType = CONTENT_TYPE_JSON, requestData = null) {\n var self = this;\n return new Promise(function(resolve, reject) {\n var request = new XMLHttpRequest();\n request.upload.onprogress = self.handleLoadProgress;\n request.open(requestType, requestURL, true);\n request.onload = function(e) {\n if (request.status == 200) {\n resolve({\n request,\n eventType\n });\n } else {\n reject({\n request,\n eventType\n });\n }\n ;\n };\n if (requestType == REQUEST_TYPE_PUT || requestType == REQUEST_TYPE_POST) {\n switch (contentType) {\n case CONTENT_TYPE_JSON:\n request.setRequestHeader(\"Content-type\", \"application/\" + contentType);\n request.send(JSON.stringify(requestData));\n break;\n case CONTENT_TYPE_FORM:\n request.send(requestData);\n break;\n }\n } else {\n request.send();\n }\n })\n }\n imgLoad(url) {\n 'use strict';\n // Create new promise with the Promise() constructor;\n // This has as its argument a function with two parameters, resolve and reject\n return new Promise(function(resolve, reject) {\n // Standard XHR to load an image\n var request = new XMLHttpRequest();\n request.open('GET', url);\n request.responseType = 'blob';\n // When the request loads, check whether it was successful\n request.onload = function() {\n if (request.status === 200) {\n // If successful, resolve the promise by passing back the request response\n resolve(request.response);\n } else {\n // If it fails, reject the promise with a error message\n reject(new Error('Image didn\\'t load successfully; error code:' + request.statusText));\n }\n };\n request.onerror = function() {\n // Also deal with the case when the entire request fails to begin with\n // This is probably a network error, so reject the promise with an appropriate message\n reject(new Error('There was a network error.'));\n };\n // Send the request\n request.send();\n });\n }\n loadImage(src) {\n 'use strict';\n let self = this;\n return new Promise(function(resolve, reject) {\n // Get a reference to the body element, and create a new image object\n var body = document.querySelector('body'),\n myImage = new Image();\n myImage.crossOrigin = \"\"; // or \"anonymous\"\n // Call the function with the URL we want to load, but then chain the\n // promise then() method on to the end of it. This contains two callbacks\n self.imgLoad(src).then(function(response) {\n // The first runs when the promise resolves, with the request.reponse specified within the resolve() method.\n var imageURL = window.URL.createObjectURL(response);\n resolve(imageURL);\n //$('background-content').setStyle('background-image', 'url('+imageURL+')') //myImage.src = imageURL;\n //console.log(imageURL);\n //body.appendChild(myImage);\n // The second runs when the promise is rejected, and logs the Error specified with the reject() method.\n }, function(Error) {\n reject(Error)\n });\n });\n }\n //--------------------------\n // event handlers\n //--------------------------\n handleLoadProgress(e) {\n var percentComplete = Math.ceil((e.loaded / e.total) * 100);\n //console.log(percentComplete);\n }\n}\nexport default DataUtils;\n","import EventEmitter from '../events/EventEmitter';\n\nclass Animate extends EventEmitter {\n //--------------------------\n // constructor\n //--------------------------\n constructor() {\n super();\n }\n //--------------------------\n // methods\n //--------------------------\n object(properties) {\n var animation = anime(\n properties\n );\n //animation.start(properties);\n }\n //--------------------------\n // event handlers\n //--------------------------\n}\nexport default Animate\n","class StringUtils\n{\n\n //--------------------------\n // constructor\n //--------------------------\n constructor()\n {}\n //--------------------------\n // methods\n //--------------------------\n cleanString(string)\n {\n var clean = string.replace(/(^\\-+|[^a-zA-Z0-9\\/_| -]+|\\-+$)/g, '').toLowerCase().replace(/[\\/_| -]+/g, '-');\n return clean;\n }\n\n decodeHTML(string, quote_style) {\n var optTemp = 0,\n i = 0,\n noquotes = false;\n if (typeof quote_style === 'undefined') {\n quote_style = 2;\n }\n string = string.toString().replace(/&lt;/g, '<').replace(/&gt;/g, '>');\n var OPTS = {\n 'ENT_NOQUOTES': 0,\n 'ENT_HTML_QUOTE_SINGLE': 1,\n 'ENT_HTML_QUOTE_DOUBLE': 2,\n 'ENT_COMPAT': 2,\n 'ENT_QUOTES': 3,\n 'ENT_IGNORE': 4\n };\n if (quote_style === 0) {\n noquotes = true;\n }\n if (typeof quote_style !== 'number') { // Allow for a single string or an array of string flags\n quote_style = [].concat(quote_style);\n for (i = 0; i < quote_style.length; i++) {\n // Resolve string input to bitwise e.g. 'PATHINFO_EXTENSION' becomes 4\n if (OPTS[quote_style[i]] === 0) {\n noquotes = true;\n } else if (OPTS[quote_style[i]]) {\n optTemp = optTemp | OPTS[quote_style[i]];\n }\n }\n quote_style = optTemp;\n }\n if (quote_style & OPTS.ENT_HTML_QUOTE_SINGLE) {\n string = string.replace(/&#0*39;/g, \"'\"); // PHP doesn't currently escape if more than one 0, but it should\n // string = string.replace(/&apos;|&#x0*27;/g, \"'\"); // This would also be useful here, but not a part of PHP\n }\n if (!noquotes) {\n string = string.replace(/&quot;/g, '\"');\n }\n // Put this in last place to avoid escape being double-decoded\n string = string.replace(/&amp;/g, '&');\n return string;\n }\n\n //--------------------------\n // event handlers\n //--------------------------\n}\nexport default StringUtils\n","import DataUtils, {\n REQUEST_TYPE_GET,\n REQUEST_TYPE_PUT,\n REQUEST_TYPE_POST,\n REQUEST_TYPE_DELETE,\n CONTENT_TYPE_JSON,\n CONTENT_TYPE_FORM\n} from '../../../../../brain//tools/utilities/DataUtils';\nimport * as DataEvent from '../../../../../brain//tools/events/DataEvent';\nimport StringUtils from '../../../../../brain//tools/utilities/StringUtils';\n\nclass PostActions {\n //--------------------------\n // constructor\n //--------------------------\n constructor() {\n var folio = [];\n this.dataUtils = new DataUtils();\n }\n //--------------------------\n // methods\n //--------------------------\n start() {}\n\n submitPost(edit, uploadFiles) {\n let self = this;\n return new Promise(function (resolve, reject) {\n //collect form data\n //if(!this.validateForm())\n var postData = new FormData();\n //let projectImages = document.getElementById('projectImages');\n //var fileSelect = projectImages;\n var files = uploadFiles;\n for (var i = 0; i < files.length; i++) {\n var file = files[i];\n // Check the file type.\n if (!file.type.match('image.*')) {\n continue;\n }\n // Add the file to the request.\n postData.append('feature_image', file, file.name);\n }\n //var category = document.getElementById(\"content_category\");\n //let project_form = document.forms.namedItem(\"folio-project\");\n var txt = document.createElement(\"textarea\");\n txt.innerHTML = document.getElementById('edit-post-text').innerHTML;\n postData.append(\"title\", document.getElementById('post_title').value);\n postData.append('slug', new StringUtils().cleanString(document.getElementById('post_title').value));\n postData.append(\"post_plaintext\", txt.value);\n postData.append(\"origin_date\", document.getElementById('post-date').value);\n postData.append(\"tags\", document.getElementById('post_tags').value);\n postData.append(\"status_page\", document.getElementById('option-page').getAttribute('data-active'));\n postData.append(\"status_feature\", document.getElementById('option-feature').getAttribute('data-active'));\n postData.append(\"status_published\", document.getElementById('option-published').getAttribute('data-active'));\n\n let postURL;\n let postEventType;\n if (edit) {\n let postID = document.getElementById('edit-update').getAttribute('data-id');\n postURL = \"/api/post/update/\" + postID;\n postEventType = DataEvent.POST_UPDATED;\n\n } else {\n postURL = \"/api/post/add\";\n postEventType = DataEvent.POST_ADDED;\n }\n self.dataUtils.request(postURL, postEventType, REQUEST_TYPE_POST, CONTENT_TYPE_FORM, postData)\n .then((response) => {\n resolve({\n response\n })\n }).catch((err) => {\n reject({\n err\n });\n })\n });\n }\n\n deletePost() {\n let self = this;\n let postID = document.getElementById('edit-update').getAttribute('data-id');\n return new Promise(function (resolve, reject) {\n self.dataUtils.request(\"/api/post/delete/\" + postID, DataEvent.POST_DELETED, REQUEST_TYPE_POST, CONTENT_TYPE_FORM)\n .then((response) => {\n resolve({\n response\n })\n }).catch((err) => {\n reject({\n err\n });\n })\n })\n //this.dataUtils.re\n }\n //--------------------------\n // event handlers\n //--------------------------\n}\nexport {\n PostActions as\n default\n}","export const EDITOR_DELETE = 'editorDelete';\nexport const EDITOR_UPLOAD_POST_IMAGE = 'editorUploadImage';\nexport const EDITOR_SAVE = 'editorSave';\nexport const EDITOR_UPDATE = 'editorUpdate';\n\nclass EditorEvent\n{\n\n //--------------------------\n // methods\n //--------------------------\n\n\n\n //--------------------------\n // event handlers\n //--------------------------\n}\nexport default new EditorEvent\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.TinyDatePicker = factory());\n}(this, (function () { 'use strict';\n\n /**\n * @file A generic set of mutation-free date functions.\n */\n\n /**\n * now returns the current date without any time values\n *\n * @returns {Date}\n */\n function now() {\n var dt = new Date();\n dt.setHours(0, 0, 0, 0);\n return dt;\n }\n\n /**\n * dateEq compares two dates\n *\n * @param {Date} date1 the first date\n * @param {Date} date2 the second date\n * @returns {boolean}\n */\n function datesEq(date1, date2) {\n return (date1 && date1.toDateString()) === (date2 && date2.toDateString());\n }\n\n /**\n * shiftDay shifts the specified date by n days\n *\n * @param {Date} dt\n * @param {number} n\n * @returns {Date}\n */\n function shiftDay(dt, n) {\n dt = new Date(dt);\n dt.setDate(dt.getDate() + n);\n return dt;\n }\n\n /**\n * shiftMonth shifts the specified date by a specified number of months\n *\n * @param {Date} dt\n * @param {number} n\n * @param {boolean} wrap optional, if true, does not change year\n * value, defaults to false\n * @returns {Date}\n */\n function shiftMonth(dt, n, wrap) {\n dt = new Date(dt);\n\n var dayOfMonth = dt.getDate();\n var month = dt.getMonth() + n;\n\n dt.setDate(1);\n dt.setMonth(wrap ? (12 + month) % 12 : month);\n dt.setDate(dayOfMonth);\n\n // If dayOfMonth = 31, but the target month only has 30 or 29 or whatever...\n // head back to the max of the target month\n if (dt.getDate() < dayOfMonth) {\n dt.setDate(0);\n }\n\n return dt;\n }\n\n /**\n * shiftYear shifts the specified date by n years\n *\n * @param {Date} dt\n * @param {number} n\n * @returns {Date}\n */\n function shiftYear(dt, n) {\n dt = new Date(dt);\n dt.setFullYear(dt.getFullYear() + n);\n return dt;\n }\n\n /**\n * setYear changes the specified date to the specified year\n *\n * @param {Date} dt\n * @param {number} year\n */\n function setYear(dt, year) {\n dt = new Date(dt);\n dt.setFullYear(year);\n return dt;\n }\n\n /**\n * setMonth changes the specified date to the specified month\n *\n * @param {Date} dt\n * @param {number} month\n */\n function setMonth(dt, month) {\n return shiftMonth(dt, month - dt.getMonth());\n }\n\n /**\n * dateOrParse creates a function which, given a date or string, returns a date\n *\n * @param {function} parse the function used to parse strings\n * @returns {function}\n */\n function dateOrParse(parse) {\n return function (dt) {\n return dropTime(typeof dt === 'string' ? parse(dt) : dt);\n };\n }\n\n /**\n * constrainDate returns dt or min/max depending on whether dt is out of bounds (inclusive)\n *\n * @export\n * @param {Date} dt\n * @param {Date} min\n * @param {Date} max\n * @returns {Date}\n */\n function constrainDate(dt, min, max) {\n return (dt < min) ? min :\n (dt > max) ? max :\n dt;\n }\n\n function dropTime(dt) {\n dt = new Date(dt);\n dt.setHours(0, 0, 0, 0);\n return dt;\n }\n\n /**\n * @file Utility functions for function manipulation.\n */\n\n /**\n * bufferFn buffers calls to fn so they only happen every ms milliseconds\n *\n * @param {number} ms number of milliseconds\n * @param {function} fn the function to be buffered\n * @returns {function}\n */\n function bufferFn(ms, fn) {\n var timeout = undefined;\n return function () {\n clearTimeout(timeout);\n timeout = setTimeout(fn, ms);\n };\n }\n\n /**\n * noop is a function which does nothing at all.\n */\n function noop() { }\n\n /**\n * copy properties from object o2 to object o1.\n *\n * @params {Object} o1\n * @params {Object} o2\n * @returns {Object}\n */\n function cp() {\n var args = arguments;\n var o1 = args[0];\n for (var i = 1; i < args.length; ++i) {\n var o2 = args[i] || {};\n for (var key in o2) {\n o1[key] = o2[key];\n }\n }\n return o1;\n }\n\n /**\n * @file Responsible for sanitizing and creating date picker options.\n */\n\n var english = {\n days: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n months: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n today: 'Today',\n clear: 'Clear',\n close: 'Close',\n };\n\n /**\n * DatePickerOptions constructs a new date picker options object, overriding\n * default values with any values specified in opts.\n *\n * @param {DatePickerOptions} opts\n * @returns {DatePickerOptions}\n */\n function DatePickerOptions(opts) {\n opts = opts || {};\n opts = cp(defaults(), opts);\n var parse = dateOrParse(opts.parse);\n opts.lang = cp(english, opts.lang);\n opts.parse = parse;\n opts.inRange = makeInRangeFn(opts);\n opts.min = parse(opts.min || shiftYear(now(), -100));\n opts.max = parse(opts.max || shiftYear(now(), 100));\n opts.hilightedDate = opts.parse(opts.hilightedDate);\n\n return opts;\n }\n\n function defaults() {\n return {\n lang: english,\n\n // Possible values: dp-modal, dp-below, dp-permanent\n mode: 'dp-modal',\n\n // The date to hilight initially if the date picker has no\n // initial value.\n hilightedDate: now(),\n\n format: function (dt) {\n return (dt.getMonth() + 1) + '/' + dt.getDate() + '/' + dt.getFullYear();\n },\n\n parse: function (str) {\n var date = new Date(str);\n return isNaN(date) ? now() : date;\n },\n\n dateClass: function () { },\n\n inRange: function () {\n return true;\n }\n };\n }\n\n function makeInRangeFn(opts) {\n var inRange = opts.inRange; // Cache this version, and return a variant\n\n return function (dt, dp) {\n return inRange(dt, dp) && opts.min <= dt && opts.max >= dt;\n };\n }\n\n /**\n * @file Helper functions for dealing with dom elements.\n */\n\n var Key = {\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n enter: 13,\n esc: 27,\n };\n\n /**\n * on attaches an event handler to the specified element, and returns an\n * off function which can be used to remove the handler.\n *\n * @param {string} evt the name of the event to handle\n * @param {HTMLElement} el the element to attach to\n * @param {function} handler the event handler\n * @returns {function} the off function\n */\n function on(evt, el, handler) {\n el.addEventListener(evt, handler, true);\n\n return function () {\n el.removeEventListener(evt, handler, true);\n };\n }\n\n var CustomEvent = shimCustomEvent();\n\n function shimCustomEvent() {\n var CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function (event, params) {\n params = params || {bubbles: false, cancelable: false, detail: undefined};\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n }\n\n return CustomEvent;\n }\n\n /**\n * @file Manages the calendar / day-picker view.\n */\n\n var dayPicker = {\n onKeyDown: keyDown,\n onClick: {\n 'dp-day': selectDay,\n 'dp-next': gotoNextMonth,\n 'dp-prev': gotoPrevMonth,\n 'dp-today': selectToday,\n 'dp-clear': clear,\n 'dp-close': close,\n 'dp-cal-month': showMonthPicker,\n 'dp-cal-year': showYearPicker,\n },\n render: render\n };\n\n /**\n * view renders the calendar (day picker) as an HTML string.\n *\n * @param {DatePickerContext} context the date picker being rendered\n * @returns {string}\n */\n function render(dp) {\n var opts = dp.opts;\n var lang = opts.lang;\n var state = dp.state;\n var dayNames = lang.days;\n var dayOffset = opts.dayOffset || 0;\n var selectedDate = state.selectedDate;\n var hilightedDate = state.hilightedDate;\n var hilightedMonth = hilightedDate.getMonth();\n var today = now().getTime();\n\n return (\n '<div class=\"dp-cal\">' +\n '<header class=\"dp-cal-header\">' +\n '<button tabindex=\"-1\" type=\"button\" class=\"dp-prev\">Prev</button>' +\n '<button tabindex=\"-1\" type=\"button\" class=\"dp-cal-month\">' +\n lang.months[hilightedMonth] +\n '</button>' +\n '<button tabindex=\"-1\" type=\"button\" class=\"dp-cal-year\">' +\n hilightedDate.getFullYear() +\n '</button>' +\n '<button tabindex=\"-1\" type=\"button\" class=\"dp-next\">Next</button>' +\n '</header>' +\n '<div class=\"dp-days\">' +\n dayNames.map(function (name, i) {\n return (\n '<span class=\"dp-col-header\">' + dayNames[(i + dayOffset) % dayNames.length] + '</span>'\n );\n }).join('') +\n mapDays(hilightedDate, dayOffset, function (date) {\n var isNotInMonth = date.getMonth() !== hilightedMonth;\n var isDisabled = !opts.inRange(date);\n var isToday = date.getTime() === today;\n var className = 'dp-day';\n className += (isNotInMonth ? ' dp-edge-day' : '');\n className += (datesEq(date, hilightedDate) ? ' dp-current' : '');\n className += (datesEq(date, selectedDate) ? ' dp-selected' : '');\n className += (isDisabled ? ' dp-day-disabled' : '');\n className += (isToday ? ' dp-day-today' : '');\n className += ' ' + opts.dateClass(date, dp);\n\n return (\n '<button tabindex=\"-1\" type=\"button\" class=\"' + className + '\" data-date=\"' + date.getTime() + '\">' +\n date.getDate() +\n '</button>'\n );\n }) +\n '</div>' +\n '<footer class=\"dp-cal-footer\">' +\n '<button tabindex=\"-1\" type=\"button\" class=\"dp-today\">' + lang.today + '</button>' +\n '<button tabindex=\"-1\" type=\"button\" class=\"dp-clear\">' + lang.clear + '</button>' +\n '<button tabindex=\"-1\" type=\"button\" class=\"dp-close\">' + lang.close + '</button>' +\n '</footer>' +\n '</div>'\n );\n }\n\n /**\n * keyDown handles the key down event for the day-picker\n *\n * @param {Event} e\n * @param {DatePickerContext} dp\n */\n function keyDown(e, dp) {\n var key = e.keyCode;\n var shiftBy =\n (key === Key.left) ? -1 :\n (key === Key.right) ? 1 :\n (key === Key.up) ? -7 :\n (key === Key.down) ? 7 :\n 0;\n\n if (key === Key.esc) {\n dp.close();\n } else if (shiftBy) {\n e.preventDefault();\n dp.setState({\n hilightedDate: shiftDay(dp.state.hilightedDate, shiftBy)\n });\n }\n }\n\n function selectToday(e, dp) {\n dp.setState({\n selectedDate: now(),\n });\n }\n\n function clear(e, dp) {\n dp.setState({\n selectedDate: null,\n });\n }\n\n function close(e, dp) {\n dp.close();\n }\n\n function showMonthPicker(e, dp) {\n dp.setState({\n view: 'month'\n });\n }\n\n function showYearPicker(e, dp) {\n dp.setState({\n view: 'year'\n });\n }\n\n function gotoNextMonth(e, dp) {\n var hilightedDate = dp.state.hilightedDate;\n dp.setState({\n hilightedDate: shiftMonth(hilightedDate, 1)\n });\n }\n\n function gotoPrevMonth(e, dp) {\n var hilightedDate = dp.state.hilightedDate;\n dp.setState({\n hilightedDate: shiftMonth(hilightedDate, -1)\n });\n }\n\n function selectDay(e, dp) {\n dp.setState({\n selectedDate: new Date(parseInt(e.target.getAttribute('data-date'))),\n });\n }\n\n function mapDays(currentDate, dayOffset, fn) {\n var result = '';\n var iter = new Date(currentDate);\n iter.setDate(1);\n iter.setDate(1 - iter.getDay() + dayOffset);\n\n // If we are showing monday as the 1st of the week,\n // and the monday is the 2nd of the month, the sunday won't\n // show, so we need to shift backwards\n if (dayOffset && iter.getDate() === dayOffset + 1) {\n iter.setDate(dayOffset - 6);\n }\n\n // We are going to have 6 weeks always displayed to keep a consistent\n // calendar size\n for (var day = 0; day < (6 * 7); ++day) {\n result += fn(iter);\n iter.setDate(iter.getDate() + 1);\n }\n\n return result;\n }\n\n /**\n * @file Manages the month-picker view.\n */\n\n var monthPicker = {\n onKeyDown: keyDown$1,\n onClick: {\n 'dp-month': onChooseMonth\n },\n render: render$1\n };\n\n function onChooseMonth(e, dp) {\n dp.setState({\n hilightedDate: setMonth(dp.state.hilightedDate, parseInt(e.target.getAttribute('data-month'))),\n view: 'day',\n });\n }\n\n /**\n * render renders the month picker as an HTML string\n *\n * @param {DatePickerContext} dp the date picker context\n * @returns {string}\n */\n function render$1(dp) {\n var opts = dp.opts;\n var lang = opts.lang;\n var months = lang.months;\n var currentDate = dp.state.hilightedDate;\n var currentMonth = currentDate.getMonth();\n\n return (\n '<div class=\"dp-months\">' +\n months.map(function (month, i) {\n var className = 'dp-month';\n className += (currentMonth === i ? ' dp-current' : '');\n\n return (\n '<button tabindex=\"-1\" type=\"button\" class=\"' + className + '\" data-month=\"' + i + '\">' +\n month +\n '</button>'\n );\n }).join('') +\n '</div>'\n );\n }\n\n /**\n * keyDown handles keydown events that occur in the month picker\n *\n * @param {Event} e\n * @param {DatePickerContext} dp\n */\n function keyDown$1(e, dp) {\n var key = e.keyCode;\n var shiftBy =\n (key === Key.left) ? -1 :\n (key === Key.right) ? 1 :\n (key === Key.up) ? -3 :\n (key === Key.down) ? 3 :\n 0;\n\n if (key === Key.esc) {\n dp.setState({\n view: 'day',\n });\n } else if (shiftBy) {\n e.preventDefault();\n dp.setState({\n hilightedDate: shiftMonth(dp.state.hilightedDate, shiftBy, true)\n });\n }\n }\n\n /**\n * @file Manages the year-picker view.\n */\n\n var yearPicker = {\n render: render$2,\n onKeyDown: keyDown$2,\n onClick: {\n 'dp-year': onChooseYear\n },\n };\n\n /**\n * view renders the year picker as an HTML string.\n *\n * @param {DatePickerContext} dp the date picker context\n * @returns {string}\n */\n function render$2(dp) {\n var state = dp.state;\n var currentYear = state.hilightedDate.getFullYear();\n var selectedYear = state.selectedDate.getFullYear();\n\n return (\n '<div class=\"dp-years\">' +\n mapYears(dp, function (year) {\n var className = 'dp-year';\n className += (year === currentYear ? ' dp-current' : '');\n className += (year === selectedYear ? ' dp-selected' : '');\n\n return (\n '<button tabindex=\"-1\" type=\"button\" class=\"' + className + '\" data-year=\"' + year + '\">' +\n year +\n '</button>'\n );\n }) +\n '</div>'\n );\n }\n\n function onChooseYear(e, dp) {\n dp.setState({\n hilightedDate: setYear(dp.state.hilightedDate, parseInt(e.target.getAttribute('data-year'))),\n view: 'day',\n });\n }\n\n function keyDown$2(e, dp) {\n var key = e.keyCode;\n var opts = dp.opts;\n var shiftBy =\n (key === Key.left || key === Key.up) ? 1 :\n (key === Key.right || key === Key.down) ? -1 :\n 0;\n\n if (key === Key.esc) {\n dp.setState({\n view: 'day',\n });\n } else if (shiftBy) {\n e.preventDefault();\n var shiftedYear = shiftYear(dp.state.hilightedDate, shiftBy);\n\n dp.setState({\n hilightedDate: constrainDate(shiftedYear, opts.min, opts.max),\n });\n }\n }\n\n function mapYears(dp, fn) {\n var result = '';\n var max = dp.opts.max.getFullYear();\n\n for (var i = max; i >= dp.opts.min.getFullYear(); --i) {\n result += fn(i);\n }\n\n return result;\n }\n\n /**\n * @file Defines the base date picker behavior, overridden by various modes.\n */\n\n var views = {\n day: dayPicker,\n year: yearPicker,\n month: monthPicker\n };\n\n function BaseMode(input, emit, opts) {\n var detatchInputEvents; // A function that detaches all events from the input\n var closing = false; // A hack to prevent calendar from re-opening when closing.\n var selectedDate; // The currently selected date\n var dp = {\n // The root DOM element for the date picker, initialized on first open.\n el: undefined,\n opts: opts,\n shouldFocusOnBlur: true,\n shouldFocusOnRender: true,\n state: initialState(),\n adjustPosition: noop,\n containerHTML: '<div class=\"dp\"></div>',\n\n attachToDom: function () {\n document.body.appendChild(dp.el);\n },\n\n updateInput: function (selectedDate) {\n var e = new CustomEvent('change', {bubbles: true});\n e.simulated = true;\n input.value = selectedDate ? opts.format(selectedDate) : '';\n input.dispatchEvent(e);\n },\n\n computeSelectedDate: function () {\n return opts.parse(input.value);\n },\n\n currentView: function() {\n return views[dp.state.view];\n },\n\n open: function () {\n if (closing) {\n return;\n }\n\n if (!dp.el) {\n dp.el = createContainerElement(opts, dp.containerHTML);\n attachContainerEvents(dp);\n }\n\n selectedDate = constrainDate(dp.computeSelectedDate(), opts.min, opts.max);\n dp.state.hilightedDate = selectedDate || opts.hilightedDate;\n dp.state.view = 'day';\n\n dp.attachToDom();\n dp.render();\n\n emit('open');\n },\n\n isVisible: function () {\n return !!dp.el && !!dp.el.parentNode;\n },\n\n hasFocus: function () {\n var focused = document.activeElement;\n return dp.el &&\n dp.el.contains(focused) &&\n focused.className.indexOf('dp-focuser') < 0;\n },\n\n shouldHide: function () {\n return dp.isVisible();\n },\n\n close: function (becauseOfBlur) {\n var el = dp.el;\n\n if (!dp.isVisible()) {\n return;\n }\n\n if (el) {\n var parent = el.parentNode;\n parent && parent.removeChild(el);\n }\n\n closing = true;\n\n if (becauseOfBlur && dp.shouldFocusOnBlur) {\n focusInput(input);\n }\n\n // When we close, the input often gains refocus, which\n // can then launch the date picker again, so we buffer\n // a bit and don't show the date picker within N ms of closing\n setTimeout(function() {\n closing = false;\n }, 100);\n\n emit('close');\n },\n\n destroy: function () {\n dp.close();\n detatchInputEvents();\n },\n\n render: function () {\n if (!dp.el) {\n return;\n }\n\n var hadFocus = dp.hasFocus();\n var html = dp.currentView().render(dp);\n html && (dp.el.firstChild.innerHTML = html);\n\n dp.adjustPosition();\n\n if (hadFocus || dp.shouldFocusOnRender) {\n focusCurrent(dp);\n }\n },\n\n // Conceptually similar to setState in React, updates\n // the view state and re-renders.\n setState: function (state) {\n for (var key in state) {\n dp.state[key] = state[key];\n }\n\n emit('statechange');\n dp.render();\n },\n };\n\n detatchInputEvents = attachInputEvents(input, dp);\n\n // Builds the initial view state\n // selectedDate is a special case and causes changes to hilightedDate\n // hilightedDate is set on open, so remains undefined initially\n // view is the current view (day, month, year)\n function initialState() {\n return {\n get selectedDate() {\n return selectedDate;\n },\n set selectedDate(dt) {\n if (dt && !opts.inRange(dt)) {\n return;\n }\n\n if (dt) {\n selectedDate = new Date(dt);\n dp.state.hilightedDate = selectedDate;\n } else {\n selectedDate = dt;\n }\n\n dp.updateInput(selectedDate);\n emit('select');\n dp.close();\n },\n view: 'day',\n };\n }\n\n return dp;\n }\n\n function createContainerElement(opts, containerHTML) {\n var el = document.createElement('div');\n\n el.className = opts.mode;\n el.innerHTML = containerHTML;\n\n return el;\n }\n\n function attachInputEvents(input, dp) {\n var bufferShow = bufferFn(5, function () {\n if (dp.shouldHide()) {\n dp.close();\n } else {\n dp.open();\n }\n });\n\n var off = [\n on('blur', input, bufferFn(150, function () {\n if (!dp.hasFocus()) {\n dp.close(true);\n }\n })),\n\n on('mousedown', input, function () {\n if (input === document.activeElement) {\n bufferShow();\n }\n }),\n\n on('focus', input, bufferShow),\n\n on('input', input, function (e) {\n var date = dp.opts.parse(e.target.value);\n isNaN(date) || dp.setState({\n hilightedDate: date\n });\n }),\n ];\n\n // Unregister all events that were registered above.\n return function() {\n off.forEach(function (f) {\n f();\n });\n };\n }\n\n function focusCurrent(dp) {\n var current = dp.el.querySelector('.dp-current');\n return current && current.focus();\n }\n\n function attachContainerEvents(dp) {\n var el = dp.el;\n var calEl = el.querySelector('.dp');\n\n // Hack to get iOS to show active CSS states\n el.ontouchstart = noop;\n\n function onClick(e) {\n e.target.className.split(' ').forEach(function(evt) {\n var handler = dp.currentView().onClick[evt];\n handler && handler(e, dp);\n });\n }\n\n // The calender fires a blur event *every* time we redraw\n // this means we need to buffer the blur event to see if\n // it still has no focus after redrawing, and only then\n // do we return focus to the input. A possible other approach\n // would be to set context.redrawing = true on redraw and\n // set it to false in the blur event.\n on('blur', calEl, bufferFn(150, function () {\n if (!dp.hasFocus()) {\n dp.close(true);\n }\n }));\n\n on('keydown', el, function (e) {\n if (e.keyCode === Key.enter) {\n onClick(e);\n } else {\n dp.currentView().onKeyDown(e, dp);\n }\n });\n\n // If the user clicks in non-focusable space, but\n // still within the date picker, we don't want to\n // hide, so we need to hack some things...\n on('mousedown', calEl, function (e) {\n e.target.focus && e.target.focus(); // IE hack\n if (document.activeElement !== e.target) {\n e.preventDefault();\n focusCurrent(dp);\n }\n });\n\n on('click', el, onClick);\n }\n\n function focusInput(input) {\n // When the modal closes, we need to focus the original input so the\n // user can continue tabbing from where they left off.\n input.focus();\n\n // iOS zonks out if we don't blur the input, so...\n if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {\n input.blur();\n }\n }\n\n /**\n * @file Defines the modal date picker behavior.\n */\n\n function ModalMode(input, emit, opts) {\n var dp = BaseMode(input, emit, opts);\n\n // In modal mode, users really shouldn't be able to type in\n // the input, as all input is done via the calendar.\n input.readonly = true;\n\n // In modal mode, we need to know when the user has tabbed\n // off the end of the calendar, and set focus to the original\n // input. To do this, we add a special element to the DOM.\n // When the user tabs off the bottom of the calendar, they\n // will tab onto this element.\n dp.containerHTML += '<a href=\"#\" class=\"dp-focuser\">.</a>';\n\n return dp;\n }\n\n /**\n * @file Defines the dropdown date picker behavior.\n */\n\n function DropdownMode(input, emit, opts) {\n var dp = BaseMode(input, emit, opts);\n\n dp.shouldFocusOnBlur = false;\n\n Object.defineProperty(dp, 'shouldFocusOnRender', {\n get: function() {\n return input !== document.activeElement;\n }\n });\n\n dp.adjustPosition = function () {\n autoPosition(input, dp);\n };\n\n return dp;\n }\n\n function autoPosition(input, dp) {\n var inputPos = input.getBoundingClientRect();\n var win = window;\n\n adjustCalY(dp, inputPos, win);\n adjustCalX(dp, inputPos, win);\n\n dp.el.style.visibility = '';\n }\n\n function adjustCalX(dp, inputPos, win) {\n var cal = dp.el;\n var scrollLeft = win.pageXOffset;\n var inputLeft = inputPos.left + scrollLeft;\n var maxRight = win.innerWidth + scrollLeft;\n var offsetWidth = cal.offsetWidth;\n var calRight = inputLeft + offsetWidth;\n var shiftedLeft = maxRight - offsetWidth;\n var left = calRight > maxRight && shiftedLeft > 0 ? shiftedLeft : inputLeft;\n\n cal.style.left = left + 'px';\n }\n\n function adjustCalY(dp, inputPos, win) {\n var cal = dp.el;\n var scrollTop = win.pageYOffset;\n var inputTop = scrollTop + inputPos.top;\n var calHeight = cal.offsetHeight;\n var belowTop = inputTop + inputPos.height + 8;\n var aboveTop = inputTop - calHeight - 8;\n var isAbove = (aboveTop > 0 && belowTop + calHeight > scrollTop + win.innerHeight);\n var top = isAbove ? aboveTop : belowTop;\n\n if (cal.classList) {\n cal.classList.toggle('dp-is-above', isAbove);\n cal.classList.toggle('dp-is-below', !isAbove);\n }\n cal.style.top = top + 'px';\n }\n\n /**\n * @file Defines the permanent date picker behavior.\n */\n\n function PermanentMode(root, emit, opts) {\n var dp = BaseMode(root, emit, opts);\n\n dp.close = noop;\n dp.destroy = noop;\n dp.updateInput = noop;\n dp.shouldFocusOnRender = opts.shouldFocusOnRender;\n\n dp.computeSelectedDate = function () {\n return opts.hilightedDate;\n };\n\n dp.attachToDom = function () {\n root.appendChild(dp.el);\n };\n\n dp.open();\n\n return dp;\n }\n\n /**\n * @file Defines the various date picker modes (modal, dropdown, permanent)\n */\n\n function Mode(input, emit, opts) {\n input = input && input.tagName ? input : document.querySelector(input);\n\n if (opts.mode === 'dp-modal') {\n return ModalMode(input, emit, opts);\n }\n\n if (opts.mode === 'dp-below') {\n return DropdownMode(input, emit, opts);\n }\n\n if (opts.mode === 'dp-permanent') {\n return PermanentMode(input, emit, opts);\n }\n }\n\n /**\n * @file Defines simple event emitter behavior.\n */\n\n /**\n * Emitter constructs a new emitter object which has on/off methods.\n *\n * @returns {EventEmitter}\n */\n function Emitter() {\n var handlers = {};\n\n function onOne(name, handler) {\n (handlers[name] = (handlers[name] || [])).push(handler);\n }\n\n function onMany(fns) {\n for (var name in fns) {\n onOne(name, fns[name]);\n }\n }\n\n return {\n on: function (name, handler) {\n if (handler) {\n onOne(name, handler);\n } else {\n onMany(name);\n }\n\n return this;\n },\n\n emit: function (name, arg) {\n (handlers[name] || []).forEach(function (handler) {\n handler(name, arg);\n });\n },\n\n off: function (name, handler) {\n if (!name) {\n handlers = {};\n } else if (!handler) {\n handlers[name] = [];\n } else {\n handlers[name] = (handlers[name] || []).filter(function (h) {\n return h !== handler;\n });\n }\n\n return this;\n }\n };\n }\n\n /**\n * @file The root date picker file, defines public exports for the library.\n */\n\n /**\n * The date picker language configuration\n * @typedef {Object} LangOptions\n * @property {Array.<string>} [days] - Days of the week\n * @property {Array.<string>} [months] - Months of the year\n * @property {string} today - The label for the 'today' button\n * @property {string} close - The label for the 'close' button\n * @property {string} clear - The label for the 'clear' button\n */\n\n /**\n * The configuration options for a date picker.\n *\n * @typedef {Object} DatePickerOptions\n * @property {LangOptions} [lang] - Configures the label text, defaults to English\n * @property {('dp-modal'|'dp-below'|'dp-permanent')} [mode] - The date picker mode, defaults to 'dp-modal'\n * @property {(string|Date)} [hilightedDate] - The date to hilight if no date is selected\n * @property {function(string|Date):Date} [parse] - Parses a date, the complement of the \"format\" function\n * @property {function(Date):string} [format] - Formats a date for displaying to user\n * @property {function(Date):string} [dateClass] - Associates a custom CSS class with a date\n * @property {function(Date):boolean} [inRange] - Indicates whether or not a date is selectable\n * @property {(string|Date)} [min] - The minimum selectable date (inclusive, default 100 years ago)\n * @property {(string|Date)} [max] - The maximum selectable date (inclusive, default 100 years from now)\n */\n\n /**\n * The state values for the date picker\n *\n * @typedef {Object} DatePickerState\n * @property {string} view - The current view 'day' | 'month' | 'year'\n * @property {Date} selectedDate - The date which has been selected by the user\n * @property {Date} hilightedDate - The date which is currently hilighted / active\n */\n\n /**\n * An instance of TinyDatePicker\n *\n * @typedef {Object} DatePicker\n * @property {DatePickerState} state - The values currently displayed.\n * @property {function} on - Adds an event handler\n * @property {function} off - Removes an event handler\n * @property {function} setState - Changes the current state of the date picker\n * @property {function} open - Opens the date picker\n * @property {function} close - Closes the date picker\n * @property {function} destroy - Destroys the date picker (removing all handlers from the input, too)\n */\n\n /**\n * TinyDatePicker constructs a new date picker for the specified input\n *\n * @param {HTMLElement | string} input The input or CSS selector associated with the datepicker\n * @param {DatePickerOptions} opts The options for initializing the date picker\n * @returns {DatePicker}\n */\n function TinyDatePicker(input, opts) {\n var emitter = Emitter();\n var options = DatePickerOptions(opts);\n var mode = Mode(input, emit, options);\n var me = {\n get state() {\n return mode.state;\n },\n on: emitter.on,\n off: emitter.off,\n setState: mode.setState,\n open: mode.open,\n close: mode.close,\n destroy: mode.destroy,\n };\n\n function emit(evt) {\n emitter.emit(evt, me);\n }\n\n return me;\n }\n\n return TinyDatePicker;\n\n})));\n","class DateUtils {\n\n //--------------------------\n // constructor\n //--------------------------\n constructor() {}\n\n //--------------------------\n // methods\n //--------------------------\n getMKtime() {\n var time = new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate(), new Date().getHours(), new Date().getMinutes(), new Date().getSeconds(), 0).getTime() / 1000;\n return time;\n }\n\n convertMKtime(seconds) {\n var date = new Date(seconds * 1000);\n return date;\n }\n\n getDate(type, rawdate) {\n var day = ((rawdate != null || rawdate != '') ? String(new Date(rawdate).getUTCDate()) : String(new Date().getUTCDate()));\n var month = ((rawdate != null || rawdate != '') ? String(new Date(rawdate).getUTCMonth() + 1) : String(new Date().getUTCMonth() + 1));\n var year = ((rawdate != null || rawdate != '') ? String(new Date(rawdate).getUTCFullYear()) : String(new Date().getUTCFullYear()));\n var hour = ((rawdate != null || rawdate != '') ? String(new Date(rawdate).getUTCHours()) : String(new Date().getUTCHours()));\n var minute = ((rawdate != null || rawdate != '') ? String(new Date(rawdate).getUTCMinutes()) : String(new Date().getUTCMinutes()));\n var seconds = ((rawdate != null || rawdate != '') ? String(new Date(rawdate).getUTCSeconds()) : String(new Date().getUTCSeconds()));\n var millisecond = ((rawdate != null || rawdate != '') ? String(new Date(rawdate).getUTCMilliseconds()) : String(new Date().getUTCMilliseconds()));\n var offset = ((rawdate != null || rawdate != '') ? String(new Date(rawdate).getTimezoneOffset()) : String(new Date().getTimezoneOffset()));\n if (day.length == 1)\n day = String(\"0\" + day);\n if (month.length == 1)\n month = String(\"0\" + month);\n offset = String(offset / 60);\n if (offset.length == 1)\n offset = String(\"0\" + offset);\n switch (type) {\n case \"day\":\n return day;\n break;\n case \"month\":\n return month;\n break;\n case \"year\":\n return year;\n break;\n case \"stamp\":\n return String(year + \"-\" + month + \"-\" + day + \" \" + hour + \":\" + minute + \":\" + seconds + \".\" + millisecond + \"-\" + (offset));\n break\n default:\n return String(year + \"-\" + month + \"-\" + day);\n break;\n }\n }\n\n //--------------------------\n // event handlers\n //--------------------------\n}\n\nexport default DateUtils","const attributes = [\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopStyle',\n 'borderRightStyle',\n 'borderBottomStyle',\n 'borderLeftStyle',\n 'borderTopWidth',\n 'boxSizing',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'height',\n 'letterSpacing',\n 'lineHeight',\n 'marginBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'outlineWidth',\n 'overflow',\n 'overflowX',\n 'overflowY',\n 'paddingBottom',\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'textAlign',\n 'textOverflow',\n 'textTransform',\n 'whiteSpace',\n 'wordBreak',\n 'wordWrap',\n];\n\n/**\n * Create a mirror\n *\n * @param {Element} element The element\n * @param {string} html The html\n *\n * @return {object} The mirror object\n */\nconst createMirror = (element, html) => {\n\n /**\n * The mirror element\n */\n const mirror = document.createElement('div');\n\n /**\n * Create the CSS for the mirror object\n *\n * @return {object} The style object\n */\n const mirrorCss = () => {\n const css = {\n position: 'absolute',\n left: -9999,\n top: 0,\n zIndex: -2000\n };\n\n if (element.tagName === 'TEXTAREA') {\n attributes.push('width');\n }\n\n attributes.forEach((attr) => {\n css[attr] = getComputedStyle(element)[attr];\n });\n\n return css;\n };\n\n /**\n * Initialize the mirror\n *\n * @param {string} html The html\n *\n * @return {void}\n */\n const initialize = (html) => {\n const styles = mirrorCss();\n Object.keys(styles).forEach(key => {\n mirror.style[key] = styles[key];\n });\n mirror.innerHTML = html;\n element.parentNode.insertBefore(mirror, element.nextSibling);\n };\n\n /**\n * Get the rect\n *\n * @return {Rect} The bounding rect\n */\n const rect = () => {\n const marker = mirror.ownerDocument.getElementById('caret-position-marker');\n const boundingRect = {\n left: marker.offsetLeft,\n top: marker.offsetTop,\n height: marker.offsetHeight\n };\n mirror.parentNode.removeChild(mirror);\n\n return boundingRect;\n };\n\n initialize(html);\n\n return {\n rect,\n };\n};\n\nexport default createMirror;\n","/**\n * Check if a DOM Element is content editable\n *\n * @param {Element} element The DOM element\n *\n * @return {bool} If it is content editable\n */\nexport const isContentEditable = (element) => !!(\n element.contentEditable &&\n element.contentEditable === 'true'\n);\n\n/**\n * Get the context from settings passed in\n *\n * @param {object} settings The settings object\n *\n * @return {object} window and document\n */\nexport const getContext = (settings = {}) => {\n const { customPos, iframe, noShadowCaret } = settings;\n if (iframe) {\n return {\n iframe,\n window: iframe.contentWindow,\n document: iframe.contentDocument || iframe.contentWindow.document,\n noShadowCaret,\n customPos,\n };\n }\n\n return {\n window,\n document,\n noShadowCaret,\n customPos,\n };\n};\n\n/**\n * Get the offset of an element\n *\n * @param {Element} element The DOM element\n * @param {object} ctx The context\n *\n * @return {object} top and left\n */\nexport const getOffset = (element, ctx) => {\n const win = ctx && ctx.window || window;\n const doc = ctx && ctx.document || document;\n const rect = element.getBoundingClientRect();\n const docEl = doc.documentElement;\n const scrollLeft = win.pageXOffset || docEl.scrollLeft;\n const scrollTop = win.pageYOffset || docEl.scrollTop;\n\n return {\n top: rect.top + scrollTop,\n left: rect.left + scrollLeft\n };\n};\n\n/**\n * Check if a value is an object\n *\n * @param {any} value The value to check\n *\n * @return {bool} If it is an object\n */\nexport const isObject = (value) => typeof value === 'object' && value !== null;\n","import createMirror from './mirror';\nimport { getOffset as elementOffset } from './utils';\n\n/**\n * Create a Input caret object.\n *\n * @param {Element} element The element\n * @param {Object} ctx The context\n */\nconst createInputCaret = (element, ctx) => {\n\n /**\n * Get the current position\n *\n * @returns {int} The caret position\n */\n const getPos = () => {\n return element.selectionStart;\n };\n\n /**\n * Set the position\n *\n * @param {int} pos The position\n *\n * @return {Element} The element\n */\n const setPos = (pos) => {\n element.setSelectionRange(pos, pos);\n\n return element;\n };\n\n /**\n * The offset\n *\n * @param {int} pos The position\n *\n * @return {object} The offset\n */\n const getOffset = (pos) => {\n const rect = elementOffset(element);\n const position = getPosition(pos);\n\n return {\n top: rect.top + position.top + ctx.document.body.scrollTop,\n left: rect.left + position.left + ctx.document.body.scrollLeft,\n height: position.height,\n };\n };\n\n /**\n * Get the current position\n *\n * @param {int} pos The position\n *\n * @return {object} The position\n */\n const getPosition = (pos) => {\n const format = (val) => {\n let value = val.replace(/<|>|`|\"|&/g, '?')\n .replace(/\\r\\n|\\r|\\n/g,'<br/>');\n return value;\n };\n\n if (ctx.customPos || ctx.customPos === 0) {\n pos = ctx.customPos;\n }\n\n const position = pos === undefined ? getPos() : pos;\n const startRange = element.value.slice(0, position);\n const endRange = element.value.slice(position);\n let html = `<span style=\"position: relative; display: inline;\">${format(startRange)}</span>`;\n html += '<span id=\"caret-position-marker\" style=\"position: relative; display: inline;\">|</span>';\n html += `<span style=\"position: relative; display: inline;\">${format(endRange)}</span>`;\n\n const mirror = createMirror(element, html);\n const rect = mirror.rect();\n rect.pos = getPos();\n\n return rect;\n };\n\n return {\n getPos,\n setPos,\n getOffset,\n getPosition,\n };\n};\n\nexport default createInputCaret;\n","/**\n * Create an Editable Caret\n * @param {Element} element The editable element\n * @param {object|null} ctx The context\n *\n * @return {EditableCaret}\n */\nconst createEditableCaret = (element, ctx) => {\n\n /**\n * Set the caret position\n *\n * @param {int} pos The position to se\n *\n * @return {Element} The element\n */\n const setPos = (pos) => {\n const sel = ctx.window.getSelection();\n if (sel) {\n let offset = 0;\n let found = false;\n const find = (position, parent) => {\n for (let i = 0; i < parent.childNodes.length; i++) {\n const node = parent.childNodes[i];\n if (found) {\n break;\n }\n if (node.nodeType === 3) {\n if (offset + node.length >= position) {\n found = true;\n const range = ctx.document.createRange();\n range.setStart(node, position - offset);\n sel.removeAllRanges();\n sel.addRange(range);\n break;\n } else {\n offset += node.length;\n }\n } else {\n find(pos, node);\n }\n }\n };\n find(pos, element);\n }\n\n return element;\n };\n\n /**\n * Get the offset\n *\n * @return {object} The offset\n */\n const getOffset = () => {\n const range = getRange();\n let offset = {\n height: 0,\n left: 0,\n right: 0,\n };\n\n if (!range) {\n return offset;\n }\n\n const hasCustomPos = ctx.customPos || ctx.customPos === 0;\n\n // endContainer in Firefox would be the element at the start of\n // the line\n if ((range.endOffset - 1 > 0 && range.endContainer !== element) || hasCustomPos) {\n const clonedRange = range.cloneRange();\n const fixedPosition = hasCustomPos ? ctx.customPos : range.endOffset;\n clonedRange.setStart(range.endContainer, fixedPosition - 1 < 0 ? 0 : fixedPosition - 1);\n clonedRange.setEnd(range.endContainer, fixedPosition);\n const rect = clonedRange.getBoundingClientRect();\n offset = {\n height: rect.height,\n left: rect.left + rect.width,\n top: rect.top,\n };\n clonedRange.detach();\n }\n\n if ((!offset || (offset && offset.height === 0)) && !ctx.noShadowCaret) {\n const clonedRange = range.cloneRange();\n const shadowCaret = ctx.document.createTextNode('|');\n clonedRange.insertNode(shadowCaret);\n clonedRange.selectNode(shadowCaret);\n const rect = clonedRange.getBoundingClientRect();\n offset = {\n height: rect.height,\n left: rect.left,\n top: rect.top,\n };\n shadowCaret.parentNode.removeChild(shadowCaret);\n clonedRange.detach();\n }\n\n if (offset) {\n const doc = ctx.document.documentElement;\n offset.top += ctx.window.pageYOffset - (doc.clientTop || 0);\n offset.left += ctx.window.pageXOffset - (doc.clientLeft || 0);\n }\n\n return offset;\n };\n\n /**\n * Get the position\n *\n * @return {object} The position\n */\n const getPosition = () => {\n const offset = getOffset();\n const pos = getPos();\n const rect = element.getBoundingClientRect();\n const inputOffset = {\n top: rect.top + ctx.document.body.scrollTop,\n left: rect.left + ctx.document.body.scrollLeft\n };\n offset.left -= inputOffset.left;\n offset.top -= inputOffset.top;\n offset.pos = pos;\n\n return offset;\n };\n\n /**\n * Get the range\n *\n * @return {Range|null}\n */\n const getRange = () => {\n if (!ctx.window.getSelection) {\n return;\n }\n const sel = ctx.window.getSelection();\n\n return sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n };\n\n /**\n * Get the caret position\n *\n * @return {int} The position\n */\n const getPos = () => {\n const range = getRange();\n const clonedRange = range.cloneRange();\n clonedRange.selectNodeContents(element);\n clonedRange.setEnd(range.endContainer, range.endOffset);\n const pos = clonedRange.toString().length;\n clonedRange.detach();\n\n return pos;\n };\n\n return {\n getPos,\n setPos,\n getPosition,\n getOffset,\n getRange,\n };\n};\n\nexport default createEditableCaret;\n","import createInputCaret from './input';\nimport createEditableCaret from './editable';\nimport {\n isContentEditable,\n getContext,\n isObject,\n} from './utils';\n\nexport { getOffset } from './utils';\n\nconst createCaret = (element, ctx) => {\n if (isContentEditable(element)) {\n return createEditableCaret(element, ctx);\n }\n\n return createInputCaret(element, ctx);\n};\n\nexport const position = (element, value, settings = {}) => {\n let options = settings;\n if (isObject(value)) {\n options = value;\n value = null;\n }\n const ctx = getContext(options);\n const caret = createCaret(element, ctx);\n\n if (value || value === 0) {\n return caret.setPos(value);\n }\n\n return caret.getPosition();\n};\n\n/**\n *\n * @param {Element} element The DOM element\n * @param {number|undefined} value The value to set\n * @param {object} settings Any settings for context\n */\nexport const offset = (element, value, settings = {}) => {\n let options = settings;\n if (isObject(value)) {\n options = value;\n value = null;\n }\n\n const ctx = getContext(options);\n const caret = createCaret(element, ctx);\n return caret.getOffset(value);\n};\n","import * as DataEvent from '../events/DataEvent';\nimport DateUtils from '../utilities/DateUtils';\nimport\n{\n position,\n offset\n}\nfrom 'caret-pos';\nimport EventEmitter from '../events/EventEmitter';\nimport * as EditorEvent from '../events/EditorEvent';\nclass TextEditor extends EventEmitter\n{\n //--------------------------\n // constructor\n //--------------------------\n constructor(textEditor, scrollLimit)\n {\n super();\n hljs.initHighlightingOnLoad();\n this.dateUtils = new DateUtils();\n this.textEditor = textEditor;\n this.fixLimit = scrollLimit;\n this.caretPos = null;\n this.url = '';\n let self = this;\n this.setInputs();\n window.addEventListener(\"scroll\", f =>\n {\n var fixLimit = this.fixLimit;\n if (window.pageYOffset >= fixLimit)\n {\n document.getElementById('edit-control').style.position = \"fixed\"\n }\n else\n {\n document.getElementById('edit-control').style.position = \"relative\"\n }\n });\n this.refresh();\n }\n //--------------------------\n // methods\n //--------------------------\n setInputs()\n {\n let self = this;\n var editorButtons = document.querySelectorAll('.editor-button');\n for (var i = 0, length = editorButtons.length; i < length; i++)\n {\n editorButtons[i].addEventListener('click', e => this.handleEditorOption(e), false);\n }\n this.textEditor.addEventListener('input', f =>\n {\n if (f.inputType == \"insertParagraph\")\n {\n var caret = position(self.textEditor).pos + 1;\n var spiffed = hljs.highlight('markdown', self.textEditor.innerText).value;\n var temp = document.createElement(\"div\");\n temp.innerText = spiffed;\n self.textEditor.innerHTML = temp.innerText;\n position(self.textEditor, caret)\n }\n else\n {\n self.refresh()\n }\n })\n }\n refresh()\n {\n var caret = position(this.textEditor).pos;\n var spiffed = hljs.highlight('markdown', this.textEditor.innerText).value;\n var temp = document.createElement(\"div\");\n temp.innerText = spiffed;\n this.textEditor.innerHTML = temp.innerText;\n position(this.textEditor, caret)\n }\n notify(type, data)\n {\n switch (type)\n {\n case DataEvent.POST_UPDATED:\n document.getElementById('submit-update').classList.add('icon-hide');\n document.getElementById('submit-good').classList.remove('icon-hide');\n document.getElementById('edit-update').classList.remove('submit-start');\n document.getElementById('edit-update').classList.add('submit-cool');\n setTimeout(f =>\n {\n document.getElementById('submit-update').classList.remove('icon-hide');\n document.getElementById('submit-good').classList.add('icon-hide');\n document.getElementById('edit-update').classList.add('submit-start');\n document.getElementById('edit-update').classList.remove('submit-cool');\n }, 2000);\n break;\n case DataEvent.POST_ADDED:\n // do nothing\n break;\n case EditorEvent.EDITOR_UPLOAD_POST_IMAGE:\n position(this.textEditor, this.caretPos);\n var sel, range, pulled;\n sel = window.getSelection(); //console.log(sel)\n //console.log(note.message)\n if (sel.rangeCount)\n {\n range = sel.getRangeAt(0);\n pulled = sel.getRangeAt(0).toString();\n range.deleteContents();\n range.insertNode(document.createTextNode(\"![image alt text](\" + data + \" 'image title')\"));\n }\n this.refresh();\n break;\n }\n }\n //--------------------------\n // event handlers\n //--------------------------\n handleEditorOption(e)\n {\n e.preventDefault();\n var self = this;\n var sel, range, pulled;\n sel = window.getSelection(); //console.log(sel)\n if (sel.rangeCount)\n {\n range = sel.getRangeAt(0);\n pulled = sel.getRangeAt(0).toString();\n range.deleteContents();\n switch (e.target.id)\n {\n case \"edit-bold\":\n range.insertNode(document.createTextNode(\"**\" + pulled + \"**\"));\n break;\n case \"edit-italic\":\n range.insertNode(document.createTextNode(\"*\" + pulled + \"*\"));\n break;\n case \"edit-strikethrough\":\n range.insertNode(document.createTextNode(\"<del>\" + pulled + \"</del>\"));\n break;\n case \"edit-header1\":\n range.insertNode(document.createTextNode(\"# \" + pulled));\n break;\n case \"edit-header2\":\n range.insertNode(document.createTextNode(\"## \" + pulled));\n break;\n case \"edit-header3\":\n range.insertNode(document.createTextNode(\"### \" + pulled));\n break;\n case \"edit-image\":\n this.caretPos = position(this.textEditor).pos;\n this.emitEvent(EditorEvent.EDITOR_UPLOAD_POST_IMAGE);\n break;\n case \"submit-save\":\n case \"edit-save\":\n this.emitEvent(EditorEvent.EDITOR_SAVE);\n break;\n case \"submit-update\":\n case \"edit-update\":\n this.emitEvent(EditorEvent.EDITOR_UPDATE);\n break\n case \"edit-link\":\n range.insertNode(document.createTextNode(\"[\" + pulled + \"](PASTE URL HERE)\"));\n break;\n case \"edit-delete\":\n this.emitEvent(EditorEvent.EDITOR_DELETE);\n break\n default:\n //range.insertNode(document.createTextNode(\"[\" + self.url + \"](PASTE URL HERE)\"));\n break;\n }\n }\n this.refresh()\n }\n}\nexport default TextEditor","//TOOLS\nimport DataUtils,\n{\n REQUEST_TYPE_GET,\n REQUEST_TYPE_PUT,\n REQUEST_TYPE_POST,\n REQUEST_TYPE_DELETE,\n CONTENT_TYPE_JSON,\n CONTENT_TYPE_FORM\n}\nfrom '../../../../../brain/tools/utilities/DataUtils';\nimport * as DataEvent from '../../../../../brain/tools/events/DataEvent';\nimport Animate from '../../../../../brain/tools/effects/Animate';\nimport PostActions from '../actions/PostActions';\nimport * as EditorEvent from '../../../../../brain/tools/events/EditorEvent';\nimport TinyDatePicker from 'tiny-date-picker';\nimport DateUtils from '../../../../../brain/tools/utilities/DateUtils';\nimport TextEditor from '../../../../../brain/tools/ui/TextEditor';\nclass PostEditor\n{\n //--------------------------\n // constructor\n //--------------------------\n constructor()\n {\n //reframe('iframe');\n let self = this;\n this.uploadFiles;\n this.anim = new Animate();\n this.dataUtils = new DataUtils\n this.dateUtils = new DateUtils();\n if (document.getElementById('edit-post-text'))\n {\n this.editor = new TextEditor(document.getElementById('edit-post-text'), document.getElementById('header').offsetHeight + document.getElementById('post-header').offsetHeight + document.getElementById('post-feature').offsetHeight);\n this.editor.addListener(EditorEvent.EDITOR_DELETE, f => this.handleEditorOptions(EditorEvent.EDITOR_DELETE), false)\n this.editor.addListener(EditorEvent.EDITOR_UPLOAD_POST_IMAGE, f => this.handleEditorOptions(EditorEvent.EDITOR_UPLOAD_POST_IMAGE), false)\n this.editor.addListener(EditorEvent.EDITOR_UPDATE, f => this.handleEditorOptions(EditorEvent.EDITOR_UPDATE), false)\n this.editor.addListener(EditorEvent.EDITOR_SAVE, f => this.handleEditorOptions(EditorEvent.EDITOR_SAVE), false)\n document.getElementById('post-image').addEventListener('change', e => this.handlePostImageAdd(e), false);\n TinyDatePicker(document.getElementById('post-date'),\n {\n mode: 'dp-below',\n format(date)\n {\n //return date;\n return self.dateUtils.getDate('origin', date);\n }\n });\n }\n this.start();\n }\n //--------------------------\n // methods\n //--------------------------\n start()\n {\n let self = this;\n new Animate().object(\n {\n targets: document.getElementById('loader'),\n duration: 300,\n opacity: 0,\n easing: 'easeInOutQuad',\n complete: function()\n {\n document.getElementById('loader').style.display = 'none';\n document.getElementById('loader').style.visibility = 'hidden';\n new Animate().object(\n {\n targets: document.getElementById('header'),\n duration: 10,\n opacity: 1,\n easing: 'easeInOutQuad',\n complete: function()\n {\n if (document.getElementById('the-intro')) document.getElementById('the-intro').style.opacity = 1;\n if (document.getElementById('blog-entry')) document.getElementById('blog-entry').style.opacity = 1;\n }\n });\n }\n });\n if (document.getElementById('featured-image-drop'))\n {\n document.getElementById('featured-image-drop').addEventListener('dragover', this.handleDragOver, false);\n document.getElementById('featured-image-drop').addEventListener('drop', this.handleDrop, false);\n document.getElementById('featured-click').addEventListener('change', this.handleClicked, false);\n if (document.getElementById('new-upload-link'))\n {\n document.getElementById('new-upload-link').addEventListener('click', e =>\n {\n document.getElementById('featured-click').click();\n })\n }\n var optionButtons = document.querySelectorAll('.post-option-btn');\n for (var i = 0, length = optionButtons.length; i < length; i++)\n {\n optionButtons[i].addEventListener('click', e => this.handlePostOptions(e), false);\n }\n }\n }\n //--------------------------\n // event handlers\n //--------------------------\n handlePostOptions(e)\n {\n let currentOption;\n switch (e.target.id)\n {\n case \"option-page-icon\":\n case \"option-page\":\n currentOption = document.getElementById('option-page');\n break;\n case \"option-feature-icon\":\n case \"option-feature\":\n currentOption = document.getElementById('option-feature');\n break;\n case \"option-published-icon\":\n case \"option-published\":\n currentOption = document.getElementById('option-published');\n break;\n }\n let active = currentOption.getAttribute('data-active');\n (active == 'false') ? currentOption.setAttribute('data-active', 'true'): currentOption.setAttribute('data-active', 'false')\n }\n handleEditorOptions(e)\n {\n switch (e)\n {\n case EditorEvent.EDITOR_SAVE:\n case EditorEvent.EDITOR_UPDATE:\n let edit = false;\n if (e == EditorEvent.EDITOR_UPDATE) edit = true;\n new PostActions().submitPost(edit, PostEditor.uploadFiles).then((response) =>\n {\n let note = JSON.parse(response['response']['request'].response);\n this.editor.notify(note.message, note.postID);\n if (note.message == DataEvent.POST_ADDED) window.location = \"/@/dashboard/posts/edit/\" + note.postID;\n }).catch((err) =>\n {\n console.log(err)\n });\n break;\n case EditorEvent.EDITOR_DELETE:\n if (confirm('Aye! You know you\\'re deleting this post, right?'))\n {\n new PostActions().deletePost().then((response) =>\n {\n let note = JSON.parse(response['response']['request'].response);\n window.location = \"/@/dashboard/posts/\";\n //console.log(note);\n }).catch((err) =>\n {\n console.log(err)\n });\n }\n else\n {\n // Do nothing!\n }\n break;\n case EditorEvent.EDITOR_UPLOAD_POST_IMAGE:\n document.getElementById('post-image').click();\n break;\n }\n }\n handleDragOver(e)\n {\n e.stopPropagation();\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.\n }\n handleClicked(e)\n {\n e.stopPropagation();\n e.preventDefault();\n //console.log(\"IMAGES \" + e.target.files);\n PostEditor.uploadFiles = e.target.files;\n for (var i = 0, f; f = PostEditor.uploadFiles[i]; i++)\n {\n // Only process image files.\n if (!f.type.match('image.*'))\n {\n continue;\n }\n var reader = new FileReader();\n // Closure to capture the file information.\n reader.onload = (function(theFile)\n {\n return function(f)\n {\n // Render thumbnail.\n var image = document.createElement('img');\n image.src = f.target.result;\n image.title = escape(theFile.name);\n var span = document.createElement('div');\n span.innerHTML = ['<img src=\"',\n f.target.result, '\" title=\"',\n escape(theFile.name), '\"/>'\n ].join('');\n //document.getElementById('featured-image-drop').insertBefore(span, null);\n document.getElementById('featured-image-drop').innerHTML = '';\n document.getElementById('featured-image-drop').appendChild(image);\n };\n })(f);\n // Read in the image file as a data URL.\n reader.readAsDataURL(f);\n }\n }\n handleDrop(e)\n {\n e.stopPropagation();\n e.preventDefault();\n PostEditor.uploadFiles = e.dataTransfer.files;\n //console.log(MemberArea.uploadFiles.length);\n for (var i = 0, f; f = PostEditor.uploadFiles[i]; i++)\n {\n // Only process image files.\n if (!f.type.match('image.*'))\n {\n continue;\n }\n var reader = new FileReader();\n // Closure to capture the file information.\n reader.onload = (function(theFile)\n {\n return function(f)\n {\n // Render thumbnail.\n var span = document.createElement('span');\n span.innerHTML = ['<img src=\"',\n f.target.result, '\" title=\"',\n escape(theFile.name), '\"/>'\n ].join('');\n //document.getElementById('featured-image-drop').insertBefore(span, null);\n document.getElementById('featured-image-drop').innerHTML = '';\n document.getElementById('featured-image-drop').appendChild(span);\n };\n })(f);\n // Read in the image file as a data URL.\n reader.readAsDataURL(f);\n }\n }\n handlePostImageAdd(e)\n {\n e.stopPropagation();\n e.preventDefault();\n let self = this;\n var postData = new FormData();\n var files = e.target.files;\n for (var i = 0; i < files.length; i++)\n {\n var file = files[i];\n // Check the file type.\n if (!file.type.match('image.*'))\n {\n continue;\n }\n postData.append('post_image', file, file.name);\n }\n this.dataUtils.request(\"/api/blog/add-post-image\", DataEvent.POST_IMAGE_ADDED, REQUEST_TYPE_POST, CONTENT_TYPE_FORM, postData).then((response) =>\n {\n self.editor.notify(EditorEvent.EDITOR_UPLOAD_POST_IMAGE, JSON.parse(response.request['response']).url);\n }).catch((err) =>\n {\n console.log(err)\n })\n }\n}\nPostEditor.uploadFiles = [];\nexport\n{\n PostEditor as\n default\n}","//TOOLS\nimport DataUtils, {\n REQUEST_TYPE_GET,\n REQUEST_TYPE_PUT,\n REQUEST_TYPE_POST,\n REQUEST_TYPE_DELETE,\n CONTENT_TYPE_JSON,\n CONTENT_TYPE_FORM\n} from '../../../../../brain/tools/utilities/DataUtils';\nimport PostEditor from './PostEditor';\nimport Animate from '../../../../../brain/tools/effects/Animate';\n\nclass DisplayManager {\n //--------------------------\n // constructor\n //--------------------------\n constructor() {\n this.dataUtils = new DataUtils();\n this.currentDisplay = '';\n this.urlPieces = document.URL.split(\"/\");\n //grab url so system knows what to display \n this.chooseDisplay(this.urlPieces[5], this.urlPieces[6]);\n }\n //--------------------------\n // methods\n //--------------------------\n start() {\n let self = this;\n // new stuff\n new Animate().object({\n targets: document.getElementById('loader'),\n duration: 300,\n opacity: 0,\n easing: 'easeInOutQuad',\n complete: function () {\n document.getElementById('loader').style.display = 'none';\n document.getElementById('loader').style.visibility = 'hidden';\n new Animate().object({\n targets: document.getElementById('header'),\n duration: 10,\n opacity: 1,\n easing: 'easeInOutQuad',\n complete: function () {\n document.getElementById('loader').style.display = 'none';\n document.getElementById('loader').style.visibility = 'hidden';\n }\n });\n }\n });\n }\n\n chooseDisplay(section, page) {\n this.currentDisplay = '';\n switch (section) {\n case 'posts':\n this.currentDisplay = new PostEditor();\n break;\n \n default:\n // just chill\n break;\n }\n this.start();\n\n }\n //--------------------------\n // event handlers\n //--------------------------\n\n}\nexport {\n DisplayManager as\n default\n}","'use strict';\n\nmodule.exports = argsArray;\n\nfunction argsArray(fun) {\n return function () {\n var len = arguments.length;\n if (len) {\n var args = [];\n var i = -1;\n while (++i < len) {\n args[i] = arguments[i];\n }\n return fun.call(this, args);\n } else {\n return fun.call(this, []);\n }\n };\n}","'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","(function (factory) {\n if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n // AMD\n define(factory);\n } else {\n // Browser globals (with support for web workers)\n var glob;\n\n try {\n glob = window;\n } catch (e) {\n glob = self;\n }\n\n glob.SparkMD5 = factory();\n }\n}(function (undefined) {\n\n 'use strict';\n\n /*\n * Fastest md5 implementation around (JKM md5).\n * Credits: Joseph Myers\n *\n * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n * @see http://jsperf.com/md5-shootout/7\n */\n\n /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */\n var add32 = function (a, b) {\n return (a + b) & 0xFFFFFFFF;\n },\n hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n function cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32((a << s) | (a >>> (32 - s)), b);\n }\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n }\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n // containing the last element of the parent array if the sub array specified starts\n // beyond the length of the parent array - weird.\n // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << ((i % 4) << 3);\n }\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n\n return state;\n }\n\n function rhex(n) {\n var s = '',\n j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n }\n return s;\n }\n\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join('');\n }\n\n // In some cases the fast add32 function cannot be used..\n if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n add32 = function (x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xFFFF);\n };\n }\n\n // ---------------------------------------------------\n\n /**\n * ArrayBuffer slice polyfill.\n *\n * @see https://github.com/ttaubert/node-arraybuffer-slice\n */\n\n if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = (val | 0) || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n\n return target;\n };\n })();\n }\n\n // ---------------------------------------------------\n\n /**\n * Helpers.\n */\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation.\n *\n * Use this class to perform an incremental md5, otherwise use the\n * static methods instead.\n */\n\n function SparkMD5() {\n // call reset to init the instance\n this.reset();\n }\n\n /**\n * Appends a string.\n * A conversion will be applied if an utf8 string is detected.\n *\n * @param {String} str The string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.append = function (str) {\n // Converts the string to utf8 bytes if necessary\n // Then append as binary\n this.appendBinary(toUtf8(str));\n\n return this;\n };\n\n /**\n * Appends a binary string.\n *\n * @param {String} contents The binary string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.reset = function () {\n this._buff = '';\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n\n return this;\n };\n\n /**\n * Releases memory used by the incremental buffer and other additional\n * resources. If you plan to use the instance again, use reset instead.\n */\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n /**\n * Finish the final calculation based on the tail.\n *\n * @param {Array} tail The tail (will be modified)\n * @param {Number} length The length of the remaining buffer\n */\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n /**\n * Performs the md5 hash on a string.\n * A conversion will be applied if utf8 string is detected.\n *\n * @param {String} str The string\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hash = function (str, raw) {\n // Converts the string to utf8 bytes if necessary\n // Then compute it using the binary function\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n /**\n * Performs the md5 hash on a binary string.\n *\n * @param {String} content The binary string\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation for array buffers.\n *\n * Use this class to perform an incremental md5 ONLY for array buffers.\n */\n SparkMD5.ArrayBuffer = function () {\n // call reset to init the instance\n this.reset();\n };\n\n /**\n * Appends an array buffer.\n *\n * @param {ArrayBuffer} arr The array to be appended\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n\n // Convert buffer to a string\n state.buff = arrayBuffer2Utf8Str(state.buff);\n\n return state;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n // Convert string to buffer\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n /**\n * Performs the md5 hash on an array buffer.\n *\n * @param {ArrayBuffer} arr The array buffer\n * @param {Boolean} raw True to get the raw string, false to get the hex one\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n}));\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && msCrypto.getRandomValues.bind(msCrypto));\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n return bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]];\n}\n\nmodule.exports = bytesToUuid;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","'use strict';\n\n/**\n * Stringify/parse functions that don't operate\n * recursively, so they avoid call stack exceeded\n * errors.\n */\nexports.stringify = function stringify(input) {\n var queue = [];\n queue.push({obj: input});\n\n var res = '';\n var next, obj, prefix, val, i, arrayPrefix, keys, k, key, value, objPrefix;\n while ((next = queue.pop())) {\n obj = next.obj;\n prefix = next.prefix || '';\n val = next.val || '';\n res += prefix;\n if (val) {\n res += val;\n } else if (typeof obj !== 'object') {\n res += typeof obj === 'undefined' ? null : JSON.stringify(obj);\n } else if (obj === null) {\n res += 'null';\n } else if (Array.isArray(obj)) {\n queue.push({val: ']'});\n for (i = obj.length - 1; i >= 0; i--) {\n arrayPrefix = i === 0 ? '' : ',';\n queue.push({obj: obj[i], prefix: arrayPrefix});\n }\n queue.push({val: '['});\n } else { // object\n keys = [];\n for (k in obj) {\n if (obj.hasOwnProperty(k)) {\n keys.push(k);\n }\n }\n queue.push({val: '}'});\n for (i = keys.length - 1; i >= 0; i--) {\n key = keys[i];\n value = obj[key];\n objPrefix = (i > 0 ? ',' : '');\n objPrefix += JSON.stringify(key) + ':';\n queue.push({obj: value, prefix: objPrefix});\n }\n queue.push({val: '{'});\n }\n }\n return res;\n};\n\n// Convenience function for the parse function.\n// This pop function is basically copied from\n// pouchCollate.parseIndexableString\nfunction pop(obj, stack, metaStack) {\n var lastMetaElement = metaStack[metaStack.length - 1];\n if (obj === lastMetaElement.element) {\n // popping a meta-element, e.g. an object whose value is another object\n metaStack.pop();\n lastMetaElement = metaStack[metaStack.length - 1];\n }\n var element = lastMetaElement.element;\n var lastElementIndex = lastMetaElement.index;\n if (Array.isArray(element)) {\n element.push(obj);\n } else if (lastElementIndex === stack.length - 2) { // obj with key+value\n var key = stack.pop();\n element[key] = obj;\n } else {\n stack.push(obj); // obj with key only\n }\n}\n\nexports.parse = function (str) {\n var stack = [];\n var metaStack = []; // stack for arrays and objects\n var i = 0;\n var collationIndex,parsedNum,numChar;\n var parsedString,lastCh,numConsecutiveSlashes,ch;\n var arrayElement, objElement;\n while (true) {\n collationIndex = str[i++];\n if (collationIndex === '}' ||\n collationIndex === ']' ||\n typeof collationIndex === 'undefined') {\n if (stack.length === 1) {\n return stack.pop();\n } else {\n pop(stack.pop(), stack, metaStack);\n continue;\n }\n }\n switch (collationIndex) {\n case ' ':\n case '\\t':\n case '\\n':\n case ':':\n case ',':\n break;\n case 'n':\n i += 3; // 'ull'\n pop(null, stack, metaStack);\n break;\n case 't':\n i += 3; // 'rue'\n pop(true, stack, metaStack);\n break;\n case 'f':\n i += 4; // 'alse'\n pop(false, stack, metaStack);\n break;\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n case '-':\n parsedNum = '';\n i--;\n while (true) {\n numChar = str[i++];\n if (/[\\d\\.\\-e\\+]/.test(numChar)) {\n parsedNum += numChar;\n } else {\n i--;\n break;\n }\n }\n pop(parseFloat(parsedNum), stack, metaStack);\n break;\n case '\"':\n parsedString = '';\n lastCh = void 0;\n numConsecutiveSlashes = 0;\n while (true) {\n ch = str[i++];\n if (ch !== '\"' || (lastCh === '\\\\' &&\n numConsecutiveSlashes % 2 === 1)) {\n parsedString += ch;\n lastCh = ch;\n if (lastCh === '\\\\') {\n numConsecutiveSlashes++;\n } else {\n numConsecutiveSlashes = 0;\n }\n } else {\n break;\n }\n }\n pop(JSON.parse('\"' + parsedString + '\"'), stack, metaStack);\n break;\n case '[':\n arrayElement = { element: [], index: stack.length };\n stack.push(arrayElement.element);\n metaStack.push(arrayElement);\n break;\n case '{':\n objElement = { element: {}, index: stack.length };\n stack.push(objElement.element);\n metaStack.push(objElement);\n break;\n default:\n throw new Error(\n 'unexpectedly reached end of input: ' + collationIndex);\n }\n }\n};\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","import getArguments from 'argsarray';\nimport nextTick from 'immediate';\nimport { EventEmitter } from 'events';\nimport inherits from 'inherits';\nimport Md5 from 'spark-md5';\nimport uuidV4 from 'uuid';\nimport vuvuzela from 'vuvuzela';\n\nfunction isBinaryObject(object) {\n return (typeof ArrayBuffer !== 'undefined' && object instanceof ArrayBuffer) ||\n (typeof Blob !== 'undefined' && object instanceof Blob);\n}\n\nfunction cloneArrayBuffer(buff) {\n if (typeof buff.slice === 'function') {\n return buff.slice(0);\n }\n // IE10-11 slice() polyfill\n var target = new ArrayBuffer(buff.byteLength);\n var targetArray = new Uint8Array(target);\n var sourceArray = new Uint8Array(buff);\n targetArray.set(sourceArray);\n return target;\n}\n\nfunction cloneBinaryObject(object) {\n if (object instanceof ArrayBuffer) {\n return cloneArrayBuffer(object);\n }\n var size = object.size;\n var type = object.type;\n // Blob\n if (typeof object.slice === 'function') {\n return object.slice(0, size, type);\n }\n // PhantomJS slice() replacement\n return object.webkitSlice(0, size, type);\n}\n\n// most of this is borrowed from lodash.isPlainObject:\n// https://github.com/fis-components/lodash.isplainobject/\n// blob/29c358140a74f252aeb08c9eb28bef86f2217d4a/index.js\n\nvar funcToString = Function.prototype.toString;\nvar objectCtorString = funcToString.call(Object);\n\nfunction isPlainObject(value) {\n var proto = Object.getPrototypeOf(value);\n /* istanbul ignore if */\n if (proto === null) { // not sure when this happens, but I guess it can\n return true;\n }\n var Ctor = proto.constructor;\n return (typeof Ctor == 'function' &&\n Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nfunction clone(object) {\n var newObject;\n var i;\n var len;\n\n if (!object || typeof object !== 'object') {\n return object;\n }\n\n if (Array.isArray(object)) {\n newObject = [];\n for (i = 0, len = object.length; i < len; i++) {\n newObject[i] = clone(object[i]);\n }\n return newObject;\n }\n\n // special case: to avoid inconsistencies between IndexedDB\n // and other backends, we automatically stringify Dates\n if (object instanceof Date) {\n return object.toISOString();\n }\n\n if (isBinaryObject(object)) {\n return cloneBinaryObject(object);\n }\n\n if (!isPlainObject(object)) {\n return object; // don't clone objects like Workers\n }\n\n newObject = {};\n for (i in object) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(object, i)) {\n var value = clone(object[i]);\n if (typeof value !== 'undefined') {\n newObject[i] = value;\n }\n }\n }\n return newObject;\n}\n\nfunction once(fun) {\n var called = false;\n return getArguments(function (args) {\n /* istanbul ignore if */\n if (called) {\n // this is a smoke test and should never actually happen\n throw new Error('once called more than once');\n } else {\n called = true;\n fun.apply(this, args);\n }\n });\n}\n\nfunction toPromise(func) {\n //create the function we will be returning\n return getArguments(function (args) {\n // Clone arguments\n args = clone(args);\n var self = this;\n // if the last argument is a function, assume its a callback\n var usedCB = (typeof args[args.length - 1] === 'function') ? args.pop() : false;\n var promise = new Promise(function (fulfill, reject) {\n var resp;\n try {\n var callback = once(function (err, mesg) {\n if (err) {\n reject(err);\n } else {\n fulfill(mesg);\n }\n });\n // create a callback for this invocation\n // apply the function in the orig context\n args.push(callback);\n resp = func.apply(self, args);\n if (resp && typeof resp.then === 'function') {\n fulfill(resp);\n }\n } catch (e) {\n reject(e);\n }\n });\n // if there is a callback, call it back\n if (usedCB) {\n promise.then(function (result) {\n usedCB(null, result);\n }, usedCB);\n }\n return promise;\n });\n}\n\nfunction logApiCall(self, name, args) {\n /* istanbul ignore if */\n if (self.constructor.listeners('debug').length) {\n var logArgs = ['api', self.name, name];\n for (var i = 0; i < args.length - 1; i++) {\n logArgs.push(args[i]);\n }\n self.constructor.emit('debug', logArgs);\n\n // override the callback itself to log the response\n var origCallback = args[args.length - 1];\n args[args.length - 1] = function (err, res) {\n var responseArgs = ['api', self.name, name];\n responseArgs = responseArgs.concat(\n err ? ['error', err] : ['success', res]\n );\n self.constructor.emit('debug', responseArgs);\n origCallback(err, res);\n };\n }\n}\n\nfunction adapterFun(name, callback) {\n return toPromise(getArguments(function (args) {\n if (this._closed) {\n return Promise.reject(new Error('database is closed'));\n }\n if (this._destroyed) {\n return Promise.reject(new Error('database is destroyed'));\n }\n var self = this;\n logApiCall(self, name, args);\n if (!this.taskqueue.isReady) {\n return new Promise(function (fulfill, reject) {\n self.taskqueue.addTask(function (failed) {\n if (failed) {\n reject(failed);\n } else {\n fulfill(self[name].apply(self, args));\n }\n });\n });\n }\n return callback.apply(this, args);\n }));\n}\n\nfunction mangle(key) {\n return '$' + key;\n}\nfunction unmangle(key) {\n return key.substring(1);\n}\nfunction Map$1() {\n this._store = {};\n}\nMap$1.prototype.get = function (key) {\n var mangled = mangle(key);\n return this._store[mangled];\n};\nMap$1.prototype.set = function (key, value) {\n var mangled = mangle(key);\n this._store[mangled] = value;\n return true;\n};\nMap$1.prototype.has = function (key) {\n var mangled = mangle(key);\n return mangled in this._store;\n};\nMap$1.prototype.delete = function (key) {\n var mangled = mangle(key);\n var res = mangled in this._store;\n delete this._store[mangled];\n return res;\n};\nMap$1.prototype.forEach = function (cb) {\n var keys = Object.keys(this._store);\n for (var i = 0, len = keys.length; i < len; i++) {\n var key = keys[i];\n var value = this._store[key];\n key = unmangle(key);\n cb(value, key);\n }\n};\nObject.defineProperty(Map$1.prototype, 'size', {\n get: function () {\n return Object.keys(this._store).length;\n }\n});\n\nfunction Set$1(array) {\n this._store = new Map$1();\n\n // init with an array\n if (array && Array.isArray(array)) {\n for (var i = 0, len = array.length; i < len; i++) {\n this.add(array[i]);\n }\n }\n}\nSet$1.prototype.add = function (key) {\n return this._store.set(key, true);\n};\nSet$1.prototype.has = function (key) {\n return this._store.has(key);\n};\nSet$1.prototype.forEach = function (cb) {\n this._store.forEach(function (value, key) {\n cb(key);\n });\n};\nObject.defineProperty(Set$1.prototype, 'size', {\n get: function () {\n return this._store.size;\n }\n});\n\n/* global Map,Set,Symbol */\n// Based on https://kangax.github.io/compat-table/es6/ we can sniff out\n// incomplete Map/Set implementations which would otherwise cause our tests to fail.\n// Notably they fail in IE11 and iOS 8.4, which this prevents.\nfunction supportsMapAndSet() {\n if (typeof Symbol === 'undefined' || typeof Map === 'undefined' || typeof Set === 'undefined') {\n return false;\n }\n var prop = Object.getOwnPropertyDescriptor(Map, Symbol.species);\n return prop && 'get' in prop && Map[Symbol.species] === Map;\n}\n\n// based on https://github.com/montagejs/collections\n\nvar ExportedSet;\nvar ExportedMap;\n\n{\n if (supportsMapAndSet()) { // prefer built-in Map/Set\n ExportedSet = Set;\n ExportedMap = Map;\n } else { // fall back to our polyfill\n ExportedSet = Set$1;\n ExportedMap = Map$1;\n }\n}\n\n// like underscore/lodash _.pick()\nfunction pick(obj, arr) {\n var res = {};\n for (var i = 0, len = arr.length; i < len; i++) {\n var prop = arr[i];\n if (prop in obj) {\n res[prop] = obj[prop];\n }\n }\n return res;\n}\n\n// Most browsers throttle concurrent requests at 6, so it's silly\n// to shim _bulk_get by trying to launch potentially hundreds of requests\n// and then letting the majority time out. We can handle this ourselves.\nvar MAX_NUM_CONCURRENT_REQUESTS = 6;\n\nfunction identityFunction(x) {\n return x;\n}\n\nfunction formatResultForOpenRevsGet(result) {\n return [{\n ok: result\n }];\n}\n\n// shim for P/CouchDB adapters that don't directly implement _bulk_get\nfunction bulkGet(db, opts, callback) {\n var requests = opts.docs;\n\n // consolidate into one request per doc if possible\n var requestsById = new ExportedMap();\n requests.forEach(function (request) {\n if (requestsById.has(request.id)) {\n requestsById.get(request.id).push(request);\n } else {\n requestsById.set(request.id, [request]);\n }\n });\n\n var numDocs = requestsById.size;\n var numDone = 0;\n var perDocResults = new Array(numDocs);\n\n function collapseResultsAndFinish() {\n var results = [];\n perDocResults.forEach(function (res) {\n res.docs.forEach(function (info) {\n results.push({\n id: res.id,\n docs: [info]\n });\n });\n });\n callback(null, {results: results});\n }\n\n function checkDone() {\n if (++numDone === numDocs) {\n collapseResultsAndFinish();\n }\n }\n\n function gotResult(docIndex, id, docs) {\n perDocResults[docIndex] = {id: id, docs: docs};\n checkDone();\n }\n\n var allRequests = [];\n requestsById.forEach(function (value, key) {\n allRequests.push(key);\n });\n\n var i = 0;\n\n function nextBatch() {\n\n if (i >= allRequests.length) {\n return;\n }\n\n var upTo = Math.min(i + MAX_NUM_CONCURRENT_REQUESTS, allRequests.length);\n var batch = allRequests.slice(i, upTo);\n processBatch(batch, i);\n i += batch.length;\n }\n\n function processBatch(batch, offset) {\n batch.forEach(function (docId, j) {\n var docIdx = offset + j;\n var docRequests = requestsById.get(docId);\n\n // just use the first request as the \"template\"\n // TODO: The _bulk_get API allows for more subtle use cases than this,\n // but for now it is unlikely that there will be a mix of different\n // \"atts_since\" or \"attachments\" in the same request, since it's just\n // replicate.js that is using this for the moment.\n // Also, atts_since is aspirational, since we don't support it yet.\n var docOpts = pick(docRequests[0], ['atts_since', 'attachments']);\n docOpts.open_revs = docRequests.map(function (request) {\n // rev is optional, open_revs disallowed\n return request.rev;\n });\n\n // remove falsey / undefined revisions\n docOpts.open_revs = docOpts.open_revs.filter(identityFunction);\n\n var formatResult = identityFunction;\n\n if (docOpts.open_revs.length === 0) {\n delete docOpts.open_revs;\n\n // when fetching only the \"winning\" leaf,\n // transform the result so it looks like an open_revs\n // request\n formatResult = formatResultForOpenRevsGet;\n }\n\n // globally-supplied options\n ['revs', 'attachments', 'binary', 'ajax', 'latest'].forEach(function (param) {\n if (param in opts) {\n docOpts[param] = opts[param];\n }\n });\n db.get(docId, docOpts, function (err, res) {\n var result;\n /* istanbul ignore if */\n if (err) {\n result = [{error: err}];\n } else {\n result = formatResult(res);\n }\n gotResult(docIdx, docId, result);\n nextBatch();\n });\n });\n }\n\n nextBatch();\n\n}\n\nvar hasLocal;\n\ntry {\n localStorage.setItem('_pouch_check_localstorage', 1);\n hasLocal = !!localStorage.getItem('_pouch_check_localstorage');\n} catch (e) {\n hasLocal = false;\n}\n\nfunction hasLocalStorage() {\n return hasLocal;\n}\n\n// Custom nextTick() shim for browsers. In node, this will just be process.nextTick(). We\n\ninherits(Changes, EventEmitter);\n\n/* istanbul ignore next */\nfunction attachBrowserEvents(self) {\n if (hasLocalStorage()) {\n addEventListener(\"storage\", function (e) {\n self.emit(e.key);\n });\n }\n}\n\nfunction Changes() {\n EventEmitter.call(this);\n this._listeners = {};\n\n attachBrowserEvents(this);\n}\nChanges.prototype.addListener = function (dbName, id, db, opts) {\n /* istanbul ignore if */\n if (this._listeners[id]) {\n return;\n }\n var self = this;\n var inprogress = false;\n function eventFunction() {\n /* istanbul ignore if */\n if (!self._listeners[id]) {\n return;\n }\n if (inprogress) {\n inprogress = 'waiting';\n return;\n }\n inprogress = true;\n var changesOpts = pick(opts, [\n 'style', 'include_docs', 'attachments', 'conflicts', 'filter',\n 'doc_ids', 'view', 'since', 'query_params', 'binary', 'return_docs'\n ]);\n\n /* istanbul ignore next */\n function onError() {\n inprogress = false;\n }\n\n db.changes(changesOpts).on('change', function (c) {\n if (c.seq > opts.since && !opts.cancelled) {\n opts.since = c.seq;\n opts.onChange(c);\n }\n }).on('complete', function () {\n if (inprogress === 'waiting') {\n nextTick(eventFunction);\n }\n inprogress = false;\n }).on('error', onError);\n }\n this._listeners[id] = eventFunction;\n this.on(dbName, eventFunction);\n};\n\nChanges.prototype.removeListener = function (dbName, id) {\n /* istanbul ignore if */\n if (!(id in this._listeners)) {\n return;\n }\n EventEmitter.prototype.removeListener.call(this, dbName,\n this._listeners[id]);\n delete this._listeners[id];\n};\n\n\n/* istanbul ignore next */\nChanges.prototype.notifyLocalWindows = function (dbName) {\n //do a useless change on a storage thing\n //in order to get other windows's listeners to activate\n if (hasLocalStorage()) {\n localStorage[dbName] = (localStorage[dbName] === \"a\") ? \"b\" : \"a\";\n }\n};\n\nChanges.prototype.notify = function (dbName) {\n this.emit(dbName);\n this.notifyLocalWindows(dbName);\n};\n\nfunction guardedConsole(method) {\n /* istanbul ignore else */\n if (typeof console !== 'undefined' && typeof console[method] === 'function') {\n var args = Array.prototype.slice.call(arguments, 1);\n console[method].apply(console, args);\n }\n}\n\nfunction randomNumber(min, max) {\n var maxTimeout = 600000; // Hard-coded default of 10 minutes\n min = parseInt(min, 10) || 0;\n max = parseInt(max, 10);\n if (max !== max || max <= min) {\n max = (min || 1) << 1; //doubling\n } else {\n max = max + 1;\n }\n // In order to not exceed maxTimeout, pick a random value between half of maxTimeout and maxTimeout\n if (max > maxTimeout) {\n min = maxTimeout >> 1; // divide by two\n max = maxTimeout;\n }\n var ratio = Math.random();\n var range = max - min;\n\n return ~~(range * ratio + min); // ~~ coerces to an int, but fast.\n}\n\nfunction defaultBackOff(min) {\n var max = 0;\n if (!min) {\n max = 2000;\n }\n return randomNumber(min, max);\n}\n\n// designed to give info to browser users, who are disturbed\n// when they see http errors in the console\nfunction explainError(status, str) {\n guardedConsole('info', 'The above ' + status + ' is totally normal. ' + str);\n}\n\nvar assign;\n{\n if (typeof Object.assign === 'function') {\n assign = Object.assign;\n } else {\n // lite Object.assign polyfill based on\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n assign = function (target) {\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n };\n }\n}\n\nvar $inject_Object_assign = assign;\n\ninherits(PouchError, Error);\n\nfunction PouchError(status, error, reason) {\n Error.call(this, reason);\n this.status = status;\n this.name = error;\n this.message = reason;\n this.error = true;\n}\n\nPouchError.prototype.toString = function () {\n return JSON.stringify({\n status: this.status,\n name: this.name,\n message: this.message,\n reason: this.reason\n });\n};\n\nvar UNAUTHORIZED = new PouchError(401, 'unauthorized', \"Name or password is incorrect.\");\nvar MISSING_BULK_DOCS = new PouchError(400, 'bad_request', \"Missing JSON list of 'docs'\");\nvar MISSING_DOC = new PouchError(404, 'not_found', 'missing');\nvar REV_CONFLICT = new PouchError(409, 'conflict', 'Document update conflict');\nvar INVALID_ID = new PouchError(400, 'bad_request', '_id field must contain a string');\nvar MISSING_ID = new PouchError(412, 'missing_id', '_id is required for puts');\nvar RESERVED_ID = new PouchError(400, 'bad_request', 'Only reserved document ids may start with underscore.');\nvar NOT_OPEN = new PouchError(412, 'precondition_failed', 'Database not open');\nvar UNKNOWN_ERROR = new PouchError(500, 'unknown_error', 'Database encountered an unknown error');\nvar BAD_ARG = new PouchError(500, 'badarg', 'Some query argument is invalid');\nvar INVALID_REQUEST = new PouchError(400, 'invalid_request', 'Request was invalid');\nvar QUERY_PARSE_ERROR = new PouchError(400, 'query_parse_error', 'Some query parameter is invalid');\nvar DOC_VALIDATION = new PouchError(500, 'doc_validation', 'Bad special document member');\nvar BAD_REQUEST = new PouchError(400, 'bad_request', 'Something wrong with the request');\nvar NOT_AN_OBJECT = new PouchError(400, 'bad_request', 'Document must be a JSON object');\nvar DB_MISSING = new PouchError(404, 'not_found', 'Database not found');\nvar IDB_ERROR = new PouchError(500, 'indexed_db_went_bad', 'unknown');\nvar WSQ_ERROR = new PouchError(500, 'web_sql_went_bad', 'unknown');\nvar LDB_ERROR = new PouchError(500, 'levelDB_went_went_bad', 'unknown');\nvar FORBIDDEN = new PouchError(403, 'forbidden', 'Forbidden by design doc validate_doc_update function');\nvar INVALID_REV = new PouchError(400, 'bad_request', 'Invalid rev format');\nvar FILE_EXISTS = new PouchError(412, 'file_exists', 'The database could not be created, the file already exists.');\nvar MISSING_STUB = new PouchError(412, 'missing_stub', 'A pre-existing attachment stub wasn\\'t found');\nvar INVALID_URL = new PouchError(413, 'invalid_url', 'Provided URL is invalid');\n\nfunction createError(error, reason) {\n function CustomPouchError(reason) {\n // inherit error properties from our parent error manually\n // so as to allow proper JSON parsing.\n /* jshint ignore:start */\n for (var p in error) {\n if (typeof error[p] !== 'function') {\n this[p] = error[p];\n }\n }\n /* jshint ignore:end */\n if (reason !== undefined) {\n this.reason = reason;\n }\n }\n CustomPouchError.prototype = PouchError.prototype;\n return new CustomPouchError(reason);\n}\n\nfunction generateErrorFromResponse(err) {\n\n if (typeof err !== 'object') {\n var data = err;\n err = UNKNOWN_ERROR;\n err.data = data;\n }\n\n if ('error' in err && err.error === 'conflict') {\n err.name = 'conflict';\n err.status = 409;\n }\n\n if (!('name' in err)) {\n err.name = err.error || 'unknown';\n }\n\n if (!('status' in err)) {\n err.status = 500;\n }\n\n if (!('message' in err)) {\n err.message = err.message || err.reason;\n }\n\n return err;\n}\n\nfunction tryFilter(filter, doc, req) {\n try {\n return !filter(doc, req);\n } catch (err) {\n var msg = 'Filter function threw: ' + err.toString();\n return createError(BAD_REQUEST, msg);\n }\n}\n\nfunction filterChange(opts) {\n var req = {};\n var hasFilter = opts.filter && typeof opts.filter === 'function';\n req.query = opts.query_params;\n\n return function filter(change) {\n if (!change.doc) {\n // CSG sends events on the changes feed that don't have documents,\n // this hack makes a whole lot of existing code robust.\n change.doc = {};\n }\n\n var filterReturn = hasFilter && tryFilter(opts.filter, change.doc, req);\n\n if (typeof filterReturn === 'object') {\n return filterReturn;\n }\n\n if (filterReturn) {\n return false;\n }\n\n if (!opts.include_docs) {\n delete change.doc;\n } else if (!opts.attachments) {\n for (var att in change.doc._attachments) {\n /* istanbul ignore else */\n if (change.doc._attachments.hasOwnProperty(att)) {\n change.doc._attachments[att].stub = true;\n }\n }\n }\n return true;\n };\n}\n\nfunction flatten(arrs) {\n var res = [];\n for (var i = 0, len = arrs.length; i < len; i++) {\n res = res.concat(arrs[i]);\n }\n return res;\n}\n\n// shim for Function.prototype.name,\n\n// Determine id an ID is valid\n// - invalid IDs begin with an underescore that does not begin '_design' or\n// '_local'\n// - any other string value is a valid id\n// Returns the specific error object for each case\nfunction invalidIdError(id) {\n var err;\n if (!id) {\n err = createError(MISSING_ID);\n } else if (typeof id !== 'string') {\n err = createError(INVALID_ID);\n } else if (/^_/.test(id) && !(/^_(design|local)/).test(id)) {\n err = createError(RESERVED_ID);\n }\n if (err) {\n throw err;\n }\n}\n\n// Checks if a PouchDB object is \"remote\" or not. This is\n\nfunction isRemote(db) {\n if (typeof db._remote === 'boolean') {\n return db._remote;\n }\n /* istanbul ignore next */\n if (typeof db.type === 'function') {\n guardedConsole('warn',\n 'db.type() is deprecated and will be removed in ' +\n 'a future version of PouchDB');\n return db.type() === 'http';\n }\n /* istanbul ignore next */\n return false;\n}\n\nfunction listenerCount(ee, type) {\n return 'listenerCount' in ee ? ee.listenerCount(type) :\n EventEmitter.listenerCount(ee, type);\n}\n\nfunction parseDesignDocFunctionName(s) {\n if (!s) {\n return null;\n }\n var parts = s.split('/');\n if (parts.length === 2) {\n return parts;\n }\n if (parts.length === 1) {\n return [s, s];\n }\n return null;\n}\n\nfunction normalizeDesignDocFunctionName(s) {\n var normalized = parseDesignDocFunctionName(s);\n return normalized ? normalized.join('/') : null;\n}\n\n// originally parseUri 1.2.2, now patched by us\n// (c) Steven Levithan <stevenlevithan.com>\n// MIT License\nvar keys = [\"source\", \"protocol\", \"authority\", \"userInfo\", \"user\", \"password\",\n \"host\", \"port\", \"relative\", \"path\", \"directory\", \"file\", \"query\", \"anchor\"];\nvar qName =\"queryKey\";\nvar qParser = /(?:^|&)([^&=]*)=?([^&]*)/g;\n\n// use the \"loose\" parser\n/* eslint maxlen: 0, no-useless-escape: 0 */\nvar parser = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nfunction parseUri(str) {\n var m = parser.exec(str);\n var uri = {};\n var i = 14;\n\n while (i--) {\n var key = keys[i];\n var value = m[i] || \"\";\n var encoded = ['user', 'password'].indexOf(key) !== -1;\n uri[key] = encoded ? decodeURIComponent(value) : value;\n }\n\n uri[qName] = {};\n uri[keys[12]].replace(qParser, function ($0, $1, $2) {\n if ($1) {\n uri[qName][$1] = $2;\n }\n });\n\n return uri;\n}\n\n// Based on https://github.com/alexdavid/scope-eval v0.0.3\n// (source: https://unpkg.com/scope-eval@0.0.3/scope_eval.js)\n// This is basically just a wrapper around new Function()\n\nfunction scopeEval(source, scope) {\n var keys = [];\n var values = [];\n for (var key in scope) {\n if (scope.hasOwnProperty(key)) {\n keys.push(key);\n values.push(scope[key]);\n }\n }\n keys.push(source);\n return Function.apply(null, keys).apply(null, values);\n}\n\n// this is essentially the \"update sugar\" function from daleharvey/pouchdb#1388\n// the diffFun tells us what delta to apply to the doc. it either returns\n// the doc, or false if it doesn't need to do an update after all\nfunction upsert(db, docId, diffFun) {\n return new Promise(function (fulfill, reject) {\n db.get(docId, function (err, doc) {\n if (err) {\n /* istanbul ignore next */\n if (err.status !== 404) {\n return reject(err);\n }\n doc = {};\n }\n\n // the user might change the _rev, so save it for posterity\n var docRev = doc._rev;\n var newDoc = diffFun(doc);\n\n if (!newDoc) {\n // if the diffFun returns falsy, we short-circuit as\n // an optimization\n return fulfill({updated: false, rev: docRev});\n }\n\n // users aren't allowed to modify these values,\n // so reset them here\n newDoc._id = docId;\n newDoc._rev = docRev;\n fulfill(tryAndPut(db, newDoc, diffFun));\n });\n });\n}\n\nfunction tryAndPut(db, doc, diffFun) {\n return db.put(doc).then(function (res) {\n return {\n updated: true,\n rev: res.rev\n };\n }, function (err) {\n /* istanbul ignore next */\n if (err.status !== 409) {\n throw err;\n }\n return upsert(db, doc._id, diffFun);\n });\n}\n\nvar thisAtob = function (str) {\n return atob(str);\n};\n\nvar thisBtoa = function (str) {\n return btoa(str);\n};\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor (e.g.\n// old QtWebKit versions, Android < 4.4).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== \"TypeError\") {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\n typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\n typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :\n WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction binaryStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\nfunction binStringToBluffer(binString, type) {\n return createBlob([binaryStringToArrayBuffer(binString)], {type: type});\n}\n\nfunction b64ToBluffer(b64, type) {\n return binStringToBluffer(thisAtob(b64), type);\n}\n\n//Can't find original post, but this is close\n//http://stackoverflow.com/questions/6965107/ (continues on next line)\n//converting-between-strings-and-arraybuffers\nfunction arrayBufferToBinaryString(buffer) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var length = bytes.byteLength;\n for (var i = 0; i < length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return binary;\n}\n\n// shim for browsers that don't support it\nfunction readAsBinaryString(blob, callback) {\n var reader = new FileReader();\n var hasBinaryString = typeof reader.readAsBinaryString === 'function';\n reader.onloadend = function (e) {\n var result = e.target.result || '';\n if (hasBinaryString) {\n return callback(result);\n }\n callback(arrayBufferToBinaryString(result));\n };\n if (hasBinaryString) {\n reader.readAsBinaryString(blob);\n } else {\n reader.readAsArrayBuffer(blob);\n }\n}\n\nfunction blobToBinaryString(blobOrBuffer, callback) {\n readAsBinaryString(blobOrBuffer, function (bin) {\n callback(bin);\n });\n}\n\nfunction blobToBase64(blobOrBuffer, callback) {\n blobToBinaryString(blobOrBuffer, function (base64) {\n callback(thisBtoa(base64));\n });\n}\n\n// simplified API. universal browser support is assumed\nfunction readAsArrayBuffer(blob, callback) {\n var reader = new FileReader();\n reader.onloadend = function (e) {\n var result = e.target.result || new ArrayBuffer(0);\n callback(result);\n };\n reader.readAsArrayBuffer(blob);\n}\n\n// this is not used in the browser\n\nvar setImmediateShim = global.setImmediate || global.setTimeout;\nvar MD5_CHUNK_SIZE = 32768;\n\nfunction rawToBase64(raw) {\n return thisBtoa(raw);\n}\n\nfunction sliceBlob(blob, start, end) {\n if (blob.webkitSlice) {\n return blob.webkitSlice(start, end);\n }\n return blob.slice(start, end);\n}\n\nfunction appendBlob(buffer, blob, start, end, callback) {\n if (start > 0 || end < blob.size) {\n // only slice blob if we really need to\n blob = sliceBlob(blob, start, end);\n }\n readAsArrayBuffer(blob, function (arrayBuffer) {\n buffer.append(arrayBuffer);\n callback();\n });\n}\n\nfunction appendString(buffer, string, start, end, callback) {\n if (start > 0 || end < string.length) {\n // only create a substring if we really need to\n string = string.substring(start, end);\n }\n buffer.appendBinary(string);\n callback();\n}\n\nfunction binaryMd5(data, callback) {\n var inputIsString = typeof data === 'string';\n var len = inputIsString ? data.length : data.size;\n var chunkSize = Math.min(MD5_CHUNK_SIZE, len);\n var chunks = Math.ceil(len / chunkSize);\n var currentChunk = 0;\n var buffer = inputIsString ? new Md5() : new Md5.ArrayBuffer();\n\n var append = inputIsString ? appendString : appendBlob;\n\n function next() {\n setImmediateShim(loadNextChunk);\n }\n\n function done() {\n var raw = buffer.end(true);\n var base64 = rawToBase64(raw);\n callback(base64);\n buffer.destroy();\n }\n\n function loadNextChunk() {\n var start = currentChunk * chunkSize;\n var end = start + chunkSize;\n currentChunk++;\n if (currentChunk < chunks) {\n append(buffer, data, start, end, next);\n } else {\n append(buffer, data, start, end, done);\n }\n }\n loadNextChunk();\n}\n\nfunction stringMd5(string) {\n return Md5.hash(string);\n}\n\nfunction rev$$1(doc, deterministic_revs) {\n var clonedDoc = clone(doc);\n if (!deterministic_revs) {\n return uuidV4.v4().replace(/-/g, '').toLowerCase();\n }\n\n delete clonedDoc._rev_tree;\n return stringMd5(JSON.stringify(clonedDoc));\n}\n\nvar uuid = uuidV4.v4;\n\n// We fetch all leafs of the revision tree, and sort them based on tree length\n// and whether they were deleted, undeleted documents with the longest revision\n// tree (most edits) win\n// The final sort algorithm is slightly documented in a sidebar here:\n// http://guide.couchdb.org/draft/conflicts.html\nfunction winningRev(metadata) {\n var winningId;\n var winningPos;\n var winningDeleted;\n var toVisit = metadata.rev_tree.slice();\n var node;\n while ((node = toVisit.pop())) {\n var tree = node.ids;\n var branches = tree[2];\n var pos = node.pos;\n if (branches.length) { // non-leaf\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: pos + 1, ids: branches[i]});\n }\n continue;\n }\n var deleted = !!tree[1].deleted;\n var id = tree[0];\n // sort by deleted, then pos, then id\n if (!winningId || (winningDeleted !== deleted ? winningDeleted :\n winningPos !== pos ? winningPos < pos : winningId < id)) {\n winningId = id;\n winningPos = pos;\n winningDeleted = deleted;\n }\n }\n\n return winningPos + '-' + winningId;\n}\n\n// Pretty much all below can be combined into a higher order function to\n// traverse revisions\n// The return value from the callback will be passed as context to all\n// children of that node\nfunction traverseRevTree(revs, callback) {\n var toVisit = revs.slice();\n\n var node;\n while ((node = toVisit.pop())) {\n var pos = node.pos;\n var tree = node.ids;\n var branches = tree[2];\n var newCtx =\n callback(branches.length === 0, pos, tree[0], node.ctx, tree[1]);\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: pos + 1, ids: branches[i], ctx: newCtx});\n }\n }\n}\n\nfunction sortByPos(a, b) {\n return a.pos - b.pos;\n}\n\nfunction collectLeaves(revs) {\n var leaves = [];\n traverseRevTree(revs, function (isLeaf, pos, id, acc, opts) {\n if (isLeaf) {\n leaves.push({rev: pos + \"-\" + id, pos: pos, opts: opts});\n }\n });\n leaves.sort(sortByPos).reverse();\n for (var i = 0, len = leaves.length; i < len; i++) {\n delete leaves[i].pos;\n }\n return leaves;\n}\n\n// returns revs of all conflicts that is leaves such that\n// 1. are not deleted and\n// 2. are different than winning revision\nfunction collectConflicts(metadata) {\n var win = winningRev(metadata);\n var leaves = collectLeaves(metadata.rev_tree);\n var conflicts = [];\n for (var i = 0, len = leaves.length; i < len; i++) {\n var leaf = leaves[i];\n if (leaf.rev !== win && !leaf.opts.deleted) {\n conflicts.push(leaf.rev);\n }\n }\n return conflicts;\n}\n\n// compact a tree by marking its non-leafs as missing,\n// and return a list of revs to delete\nfunction compactTree(metadata) {\n var revs = [];\n traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n revHash, ctx, opts) {\n if (opts.status === 'available' && !isLeaf) {\n revs.push(pos + '-' + revHash);\n opts.status = 'missing';\n }\n });\n return revs;\n}\n\n// build up a list of all the paths to the leafs in this revision tree\nfunction rootToLeaf(revs) {\n var paths = [];\n var toVisit = revs.slice();\n var node;\n while ((node = toVisit.pop())) {\n var pos = node.pos;\n var tree = node.ids;\n var id = tree[0];\n var opts = tree[1];\n var branches = tree[2];\n var isLeaf = branches.length === 0;\n\n var history = node.history ? node.history.slice() : [];\n history.push({id: id, opts: opts});\n if (isLeaf) {\n paths.push({pos: (pos + 1 - history.length), ids: history});\n }\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: pos + 1, ids: branches[i], history: history});\n }\n }\n return paths.reverse();\n}\n\n// for a better overview of what this is doing, read:\n\nfunction sortByPos$1(a, b) {\n return a.pos - b.pos;\n}\n\n// classic binary search\nfunction binarySearch(arr, item, comparator) {\n var low = 0;\n var high = arr.length;\n var mid;\n while (low < high) {\n mid = (low + high) >>> 1;\n if (comparator(arr[mid], item) < 0) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return low;\n}\n\n// assuming the arr is sorted, insert the item in the proper place\nfunction insertSorted(arr, item, comparator) {\n var idx = binarySearch(arr, item, comparator);\n arr.splice(idx, 0, item);\n}\n\n// Turn a path as a flat array into a tree with a single branch.\n// If any should be stemmed from the beginning of the array, that's passed\n// in as the second argument\nfunction pathToTree(path, numStemmed) {\n var root;\n var leaf;\n for (var i = numStemmed, len = path.length; i < len; i++) {\n var node = path[i];\n var currentLeaf = [node.id, node.opts, []];\n if (leaf) {\n leaf[2].push(currentLeaf);\n leaf = currentLeaf;\n } else {\n root = leaf = currentLeaf;\n }\n }\n return root;\n}\n\n// compare the IDs of two trees\nfunction compareTree(a, b) {\n return a[0] < b[0] ? -1 : 1;\n}\n\n// Merge two trees together\n// The roots of tree1 and tree2 must be the same revision\nfunction mergeTree(in_tree1, in_tree2) {\n var queue = [{tree1: in_tree1, tree2: in_tree2}];\n var conflicts = false;\n while (queue.length > 0) {\n var item = queue.pop();\n var tree1 = item.tree1;\n var tree2 = item.tree2;\n\n if (tree1[1].status || tree2[1].status) {\n tree1[1].status =\n (tree1[1].status === 'available' ||\n tree2[1].status === 'available') ? 'available' : 'missing';\n }\n\n for (var i = 0; i < tree2[2].length; i++) {\n if (!tree1[2][0]) {\n conflicts = 'new_leaf';\n tree1[2][0] = tree2[2][i];\n continue;\n }\n\n var merged = false;\n for (var j = 0; j < tree1[2].length; j++) {\n if (tree1[2][j][0] === tree2[2][i][0]) {\n queue.push({tree1: tree1[2][j], tree2: tree2[2][i]});\n merged = true;\n }\n }\n if (!merged) {\n conflicts = 'new_branch';\n insertSorted(tree1[2], tree2[2][i], compareTree);\n }\n }\n }\n return {conflicts: conflicts, tree: in_tree1};\n}\n\nfunction doMerge(tree, path, dontExpand) {\n var restree = [];\n var conflicts = false;\n var merged = false;\n var res;\n\n if (!tree.length) {\n return {tree: [path], conflicts: 'new_leaf'};\n }\n\n for (var i = 0, len = tree.length; i < len; i++) {\n var branch = tree[i];\n if (branch.pos === path.pos && branch.ids[0] === path.ids[0]) {\n // Paths start at the same position and have the same root, so they need\n // merged\n res = mergeTree(branch.ids, path.ids);\n restree.push({pos: branch.pos, ids: res.tree});\n conflicts = conflicts || res.conflicts;\n merged = true;\n } else if (dontExpand !== true) {\n // The paths start at a different position, take the earliest path and\n // traverse up until it as at the same point from root as the path we\n // want to merge. If the keys match we return the longer path with the\n // other merged After stemming we dont want to expand the trees\n\n var t1 = branch.pos < path.pos ? branch : path;\n var t2 = branch.pos < path.pos ? path : branch;\n var diff = t2.pos - t1.pos;\n\n var candidateParents = [];\n\n var trees = [];\n trees.push({ids: t1.ids, diff: diff, parent: null, parentIdx: null});\n while (trees.length > 0) {\n var item = trees.pop();\n if (item.diff === 0) {\n if (item.ids[0] === t2.ids[0]) {\n candidateParents.push(item);\n }\n continue;\n }\n var elements = item.ids[2];\n for (var j = 0, elementsLen = elements.length; j < elementsLen; j++) {\n trees.push({\n ids: elements[j],\n diff: item.diff - 1,\n parent: item.ids,\n parentIdx: j\n });\n }\n }\n\n var el = candidateParents[0];\n\n if (!el) {\n restree.push(branch);\n } else {\n res = mergeTree(el.ids, t2.ids);\n el.parent[2][el.parentIdx] = res.tree;\n restree.push({pos: t1.pos, ids: t1.ids});\n conflicts = conflicts || res.conflicts;\n merged = true;\n }\n } else {\n restree.push(branch);\n }\n }\n\n // We didnt find\n if (!merged) {\n restree.push(path);\n }\n\n restree.sort(sortByPos$1);\n\n return {\n tree: restree,\n conflicts: conflicts || 'internal_node'\n };\n}\n\n// To ensure we dont grow the revision tree infinitely, we stem old revisions\nfunction stem(tree, depth) {\n // First we break out the tree into a complete list of root to leaf paths\n var paths = rootToLeaf(tree);\n var stemmedRevs;\n\n var result;\n for (var i = 0, len = paths.length; i < len; i++) {\n // Then for each path, we cut off the start of the path based on the\n // `depth` to stem to, and generate a new set of flat trees\n var path = paths[i];\n var stemmed = path.ids;\n var node;\n if (stemmed.length > depth) {\n // only do the stemming work if we actually need to stem\n if (!stemmedRevs) {\n stemmedRevs = {}; // avoid allocating this object unnecessarily\n }\n var numStemmed = stemmed.length - depth;\n node = {\n pos: path.pos + numStemmed,\n ids: pathToTree(stemmed, numStemmed)\n };\n\n for (var s = 0; s < numStemmed; s++) {\n var rev = (path.pos + s) + '-' + stemmed[s].id;\n stemmedRevs[rev] = true;\n }\n } else { // no need to actually stem\n node = {\n pos: path.pos,\n ids: pathToTree(stemmed, 0)\n };\n }\n\n // Then we remerge all those flat trees together, ensuring that we dont\n // connect trees that would go beyond the depth limit\n if (result) {\n result = doMerge(result, node, true).tree;\n } else {\n result = [node];\n }\n }\n\n // this is memory-heavy per Chrome profiler, avoid unless we actually stemmed\n if (stemmedRevs) {\n traverseRevTree(result, function (isLeaf, pos, revHash) {\n // some revisions may have been removed in a branch but not in another\n delete stemmedRevs[pos + '-' + revHash];\n });\n }\n\n return {\n tree: result,\n revs: stemmedRevs ? Object.keys(stemmedRevs) : []\n };\n}\n\nfunction merge(tree, path, depth) {\n var newTree = doMerge(tree, path);\n var stemmed = stem(newTree.tree, depth);\n return {\n tree: stemmed.tree,\n stemmedRevs: stemmed.revs,\n conflicts: newTree.conflicts\n };\n}\n\n// return true if a rev exists in the rev tree, false otherwise\nfunction revExists(revs, rev) {\n var toVisit = revs.slice();\n var splitRev = rev.split('-');\n var targetPos = parseInt(splitRev[0], 10);\n var targetId = splitRev[1];\n\n var node;\n while ((node = toVisit.pop())) {\n if (node.pos === targetPos && node.ids[0] === targetId) {\n return true;\n }\n var branches = node.ids[2];\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: node.pos + 1, ids: branches[i]});\n }\n }\n return false;\n}\n\nfunction getTrees(node) {\n return node.ids;\n}\n\n// check if a specific revision of a doc has been deleted\n// - metadata: the metadata object from the doc store\n// - rev: (optional) the revision to check. defaults to winning revision\nfunction isDeleted(metadata, rev) {\n if (!rev) {\n rev = winningRev(metadata);\n }\n var id = rev.substring(rev.indexOf('-') + 1);\n var toVisit = metadata.rev_tree.map(getTrees);\n\n var tree;\n while ((tree = toVisit.pop())) {\n if (tree[0] === id) {\n return !!tree[1].deleted;\n }\n toVisit = toVisit.concat(tree[2]);\n }\n}\n\nfunction isLocalId(id) {\n return (/^_local/).test(id);\n}\n\n// returns the current leaf node for a given revision\nfunction latest(rev, metadata) {\n var toVisit = metadata.rev_tree.slice();\n var node;\n while ((node = toVisit.pop())) {\n var pos = node.pos;\n var tree = node.ids;\n var id = tree[0];\n var opts = tree[1];\n var branches = tree[2];\n var isLeaf = branches.length === 0;\n\n var history = node.history ? node.history.slice() : [];\n history.push({id: id, pos: pos, opts: opts});\n\n if (isLeaf) {\n for (var i = 0, len = history.length; i < len; i++) {\n var historyNode = history[i];\n var historyRev = historyNode.pos + '-' + historyNode.id;\n\n if (historyRev === rev) {\n // return the rev of this leaf\n return pos + '-' + id;\n }\n }\n }\n\n for (var j = 0, l = branches.length; j < l; j++) {\n toVisit.push({pos: pos + 1, ids: branches[j], history: history});\n }\n }\n\n /* istanbul ignore next */\n throw new Error('Unable to resolve latest revision for id ' + metadata.id + ', rev ' + rev);\n}\n\ninherits(Changes$1, EventEmitter);\n\nfunction tryCatchInChangeListener(self, change, pending, lastSeq) {\n // isolate try/catches to avoid V8 deoptimizations\n try {\n self.emit('change', change, pending, lastSeq);\n } catch (e) {\n guardedConsole('error', 'Error in .on(\"change\", function):', e);\n }\n}\n\nfunction Changes$1(db, opts, callback) {\n EventEmitter.call(this);\n var self = this;\n this.db = db;\n opts = opts ? clone(opts) : {};\n var complete = opts.complete = once(function (err, resp) {\n if (err) {\n if (listenerCount(self, 'error') > 0) {\n self.emit('error', err);\n }\n } else {\n self.emit('complete', resp);\n }\n self.removeAllListeners();\n db.removeListener('destroyed', onDestroy);\n });\n if (callback) {\n self.on('complete', function (resp) {\n callback(null, resp);\n });\n self.on('error', callback);\n }\n function onDestroy() {\n self.cancel();\n }\n db.once('destroyed', onDestroy);\n\n opts.onChange = function (change, pending, lastSeq) {\n /* istanbul ignore if */\n if (self.isCancelled) {\n return;\n }\n tryCatchInChangeListener(self, change, pending, lastSeq);\n };\n\n var promise = new Promise(function (fulfill, reject) {\n opts.complete = function (err, res) {\n if (err) {\n reject(err);\n } else {\n fulfill(res);\n }\n };\n });\n self.once('cancel', function () {\n db.removeListener('destroyed', onDestroy);\n opts.complete(null, {status: 'cancelled'});\n });\n this.then = promise.then.bind(promise);\n this['catch'] = promise['catch'].bind(promise);\n this.then(function (result) {\n complete(null, result);\n }, complete);\n\n\n\n if (!db.taskqueue.isReady) {\n db.taskqueue.addTask(function (failed) {\n if (failed) {\n opts.complete(failed);\n } else if (self.isCancelled) {\n self.emit('cancel');\n } else {\n self.validateChanges(opts);\n }\n });\n } else {\n self.validateChanges(opts);\n }\n}\nChanges$1.prototype.cancel = function () {\n this.isCancelled = true;\n if (this.db.taskqueue.isReady) {\n this.emit('cancel');\n }\n};\nfunction processChange(doc, metadata, opts) {\n var changeList = [{rev: doc._rev}];\n if (opts.style === 'all_docs') {\n changeList = collectLeaves(metadata.rev_tree)\n .map(function (x) { return {rev: x.rev}; });\n }\n var change = {\n id: metadata.id,\n changes: changeList,\n doc: doc\n };\n\n if (isDeleted(metadata, doc._rev)) {\n change.deleted = true;\n }\n if (opts.conflicts) {\n change.doc._conflicts = collectConflicts(metadata);\n if (!change.doc._conflicts.length) {\n delete change.doc._conflicts;\n }\n }\n return change;\n}\n\nChanges$1.prototype.validateChanges = function (opts) {\n var callback = opts.complete;\n var self = this;\n\n /* istanbul ignore else */\n if (PouchDB._changesFilterPlugin) {\n PouchDB._changesFilterPlugin.validate(opts, function (err) {\n if (err) {\n return callback(err);\n }\n self.doChanges(opts);\n });\n } else {\n self.doChanges(opts);\n }\n};\n\nChanges$1.prototype.doChanges = function (opts) {\n var self = this;\n var callback = opts.complete;\n\n opts = clone(opts);\n if ('live' in opts && !('continuous' in opts)) {\n opts.continuous = opts.live;\n }\n opts.processChange = processChange;\n\n if (opts.since === 'latest') {\n opts.since = 'now';\n }\n if (!opts.since) {\n opts.since = 0;\n }\n if (opts.since === 'now') {\n this.db.info().then(function (info) {\n /* istanbul ignore if */\n if (self.isCancelled) {\n callback(null, {status: 'cancelled'});\n return;\n }\n opts.since = info.update_seq;\n self.doChanges(opts);\n }, callback);\n return;\n }\n\n /* istanbul ignore else */\n if (PouchDB._changesFilterPlugin) {\n PouchDB._changesFilterPlugin.normalize(opts);\n if (PouchDB._changesFilterPlugin.shouldFilter(this, opts)) {\n return PouchDB._changesFilterPlugin.filter(this, opts);\n }\n } else {\n ['doc_ids', 'filter', 'selector', 'view'].forEach(function (key) {\n if (key in opts) {\n guardedConsole('warn',\n 'The \"' + key + '\" option was passed in to changes/replicate, ' +\n 'but pouchdb-changes-filter plugin is not installed, so it ' +\n 'was ignored. Please install the plugin to enable filtering.'\n );\n }\n });\n }\n\n if (!('descending' in opts)) {\n opts.descending = false;\n }\n\n // 0 and 1 should return 1 document\n opts.limit = opts.limit === 0 ? 1 : opts.limit;\n opts.complete = callback;\n var newPromise = this.db._changes(opts);\n /* istanbul ignore else */\n if (newPromise && typeof newPromise.cancel === 'function') {\n var cancel = self.cancel;\n self.cancel = getArguments(function (args) {\n newPromise.cancel();\n cancel.apply(this, args);\n });\n }\n};\n\n/*\n * A generic pouch adapter\n */\n\nfunction compare(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\n// Wrapper for functions that call the bulkdocs api with a single doc,\n// if the first result is an error, return an error\nfunction yankError(callback, docId) {\n return function (err, results) {\n if (err || (results[0] && results[0].error)) {\n err = err || results[0];\n err.docId = docId;\n callback(err);\n } else {\n callback(null, results.length ? results[0] : results);\n }\n };\n}\n\n// clean docs given to us by the user\nfunction cleanDocs(docs) {\n for (var i = 0; i < docs.length; i++) {\n var doc = docs[i];\n if (doc._deleted) {\n delete doc._attachments; // ignore atts for deleted docs\n } else if (doc._attachments) {\n // filter out extraneous keys from _attachments\n var atts = Object.keys(doc._attachments);\n for (var j = 0; j < atts.length; j++) {\n var att = atts[j];\n doc._attachments[att] = pick(doc._attachments[att],\n ['data', 'digest', 'content_type', 'length', 'revpos', 'stub']);\n }\n }\n }\n}\n\n// compare two docs, first by _id then by _rev\nfunction compareByIdThenRev(a, b) {\n var idCompare = compare(a._id, b._id);\n if (idCompare !== 0) {\n return idCompare;\n }\n var aStart = a._revisions ? a._revisions.start : 0;\n var bStart = b._revisions ? b._revisions.start : 0;\n return compare(aStart, bStart);\n}\n\n// for every node in a revision tree computes its distance from the closest\n// leaf\nfunction computeHeight(revs) {\n var height = {};\n var edges = [];\n traverseRevTree(revs, function (isLeaf, pos, id, prnt) {\n var rev = pos + \"-\" + id;\n if (isLeaf) {\n height[rev] = 0;\n }\n if (prnt !== undefined) {\n edges.push({from: prnt, to: rev});\n }\n return rev;\n });\n\n edges.reverse();\n edges.forEach(function (edge) {\n if (height[edge.from] === undefined) {\n height[edge.from] = 1 + height[edge.to];\n } else {\n height[edge.from] = Math.min(height[edge.from], 1 + height[edge.to]);\n }\n });\n return height;\n}\n\nfunction allDocsKeysParse(opts) {\n var keys = ('limit' in opts) ?\n opts.keys.slice(opts.skip, opts.limit + opts.skip) :\n (opts.skip > 0) ? opts.keys.slice(opts.skip) : opts.keys;\n opts.keys = keys;\n opts.skip = 0;\n delete opts.limit;\n if (opts.descending) {\n keys.reverse();\n opts.descending = false;\n }\n}\n\n// all compaction is done in a queue, to avoid attaching\n// too many listeners at once\nfunction doNextCompaction(self) {\n var task = self._compactionQueue[0];\n var opts = task.opts;\n var callback = task.callback;\n self.get('_local/compaction').catch(function () {\n return false;\n }).then(function (doc) {\n if (doc && doc.last_seq) {\n opts.last_seq = doc.last_seq;\n }\n self._compact(opts, function (err, res) {\n /* istanbul ignore if */\n if (err) {\n callback(err);\n } else {\n callback(null, res);\n }\n nextTick(function () {\n self._compactionQueue.shift();\n if (self._compactionQueue.length) {\n doNextCompaction(self);\n }\n });\n });\n });\n}\n\nfunction attachmentNameError(name) {\n if (name.charAt(0) === '_') {\n return name + ' is not a valid attachment name, attachment ' +\n 'names cannot start with \\'_\\'';\n }\n return false;\n}\n\ninherits(AbstractPouchDB, EventEmitter);\n\nfunction AbstractPouchDB() {\n EventEmitter.call(this);\n\n // re-bind prototyped methods\n for (var p in AbstractPouchDB.prototype) {\n if (typeof this[p] === 'function') {\n this[p] = this[p].bind(this);\n }\n }\n}\n\nAbstractPouchDB.prototype.post =\n adapterFun('post', function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n if (typeof doc !== 'object' || Array.isArray(doc)) {\n return callback(createError(NOT_AN_OBJECT));\n }\n this.bulkDocs({docs: [doc]}, opts, yankError(callback, doc._id));\n});\n\nAbstractPouchDB.prototype.put = adapterFun('put', function (doc, opts, cb) {\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n if (typeof doc !== 'object' || Array.isArray(doc)) {\n return cb(createError(NOT_AN_OBJECT));\n }\n invalidIdError(doc._id);\n if (isLocalId(doc._id) && typeof this._putLocal === 'function') {\n if (doc._deleted) {\n return this._removeLocal(doc, cb);\n } else {\n return this._putLocal(doc, cb);\n }\n }\n var self = this;\n if (opts.force && doc._rev) {\n transformForceOptionToNewEditsOption();\n putDoc(function (err) {\n var result = err ? null : {ok: true, id: doc._id, rev: doc._rev};\n cb(err, result);\n });\n } else {\n putDoc(cb);\n }\n\n function transformForceOptionToNewEditsOption() {\n var parts = doc._rev.split('-');\n var oldRevId = parts[1];\n var oldRevNum = parseInt(parts[0], 10);\n\n var newRevNum = oldRevNum + 1;\n var newRevId = rev$$1();\n\n doc._revisions = {\n start: newRevNum,\n ids: [newRevId, oldRevId]\n };\n doc._rev = newRevNum + '-' + newRevId;\n opts.new_edits = false;\n }\n function putDoc(next) {\n if (typeof self._put === 'function' && opts.new_edits !== false) {\n self._put(doc, opts, next);\n } else {\n self.bulkDocs({docs: [doc]}, opts, yankError(next, doc._id));\n }\n }\n});\n\nAbstractPouchDB.prototype.putAttachment =\n adapterFun('putAttachment', function (docId, attachmentId, rev,\n blob, type) {\n var api = this;\n if (typeof type === 'function') {\n type = blob;\n blob = rev;\n rev = null;\n }\n // Lets fix in https://github.com/pouchdb/pouchdb/issues/3267\n /* istanbul ignore if */\n if (typeof type === 'undefined') {\n type = blob;\n blob = rev;\n rev = null;\n }\n if (!type) {\n guardedConsole('warn', 'Attachment', attachmentId, 'on document', docId, 'is missing content_type');\n }\n\n function createAttachment(doc) {\n var prevrevpos = '_rev' in doc ? parseInt(doc._rev, 10) : 0;\n doc._attachments = doc._attachments || {};\n doc._attachments[attachmentId] = {\n content_type: type,\n data: blob,\n revpos: ++prevrevpos\n };\n return api.put(doc);\n }\n\n return api.get(docId).then(function (doc) {\n if (doc._rev !== rev) {\n throw createError(REV_CONFLICT);\n }\n\n return createAttachment(doc);\n }, function (err) {\n // create new doc\n /* istanbul ignore else */\n if (err.reason === MISSING_DOC.message) {\n return createAttachment({_id: docId});\n } else {\n throw err;\n }\n });\n});\n\nAbstractPouchDB.prototype.removeAttachment =\n adapterFun('removeAttachment', function (docId, attachmentId, rev,\n callback) {\n var self = this;\n self.get(docId, function (err, obj) {\n /* istanbul ignore if */\n if (err) {\n callback(err);\n return;\n }\n if (obj._rev !== rev) {\n callback(createError(REV_CONFLICT));\n return;\n }\n /* istanbul ignore if */\n if (!obj._attachments) {\n return callback();\n }\n delete obj._attachments[attachmentId];\n if (Object.keys(obj._attachments).length === 0) {\n delete obj._attachments;\n }\n self.put(obj, callback);\n });\n});\n\nAbstractPouchDB.prototype.remove =\n adapterFun('remove', function (docOrId, optsOrRev, opts, callback) {\n var doc;\n if (typeof optsOrRev === 'string') {\n // id, rev, opts, callback style\n doc = {\n _id: docOrId,\n _rev: optsOrRev\n };\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n } else {\n // doc, opts, callback style\n doc = docOrId;\n if (typeof optsOrRev === 'function') {\n callback = optsOrRev;\n opts = {};\n } else {\n callback = opts;\n opts = optsOrRev;\n }\n }\n opts = opts || {};\n opts.was_delete = true;\n var newDoc = {_id: doc._id, _rev: (doc._rev || opts.rev)};\n newDoc._deleted = true;\n if (isLocalId(newDoc._id) && typeof this._removeLocal === 'function') {\n return this._removeLocal(doc, callback);\n }\n this.bulkDocs({docs: [newDoc]}, opts, yankError(callback, newDoc._id));\n});\n\nAbstractPouchDB.prototype.revsDiff =\n adapterFun('revsDiff', function (req, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var ids = Object.keys(req);\n\n if (!ids.length) {\n return callback(null, {});\n }\n\n var count = 0;\n var missing = new ExportedMap();\n\n function addToMissing(id, revId) {\n if (!missing.has(id)) {\n missing.set(id, {missing: []});\n }\n missing.get(id).missing.push(revId);\n }\n\n function processDoc(id, rev_tree) {\n // Is this fast enough? Maybe we should switch to a set simulated by a map\n var missingForId = req[id].slice(0);\n traverseRevTree(rev_tree, function (isLeaf, pos, revHash, ctx,\n opts) {\n var rev = pos + '-' + revHash;\n var idx = missingForId.indexOf(rev);\n if (idx === -1) {\n return;\n }\n\n missingForId.splice(idx, 1);\n /* istanbul ignore if */\n if (opts.status !== 'available') {\n addToMissing(id, rev);\n }\n });\n\n // Traversing the tree is synchronous, so now `missingForId` contains\n // revisions that were not found in the tree\n missingForId.forEach(function (rev) {\n addToMissing(id, rev);\n });\n }\n\n ids.map(function (id) {\n this._getRevisionTree(id, function (err, rev_tree) {\n if (err && err.status === 404 && err.message === 'missing') {\n missing.set(id, {missing: req[id]});\n } else if (err) {\n /* istanbul ignore next */\n return callback(err);\n } else {\n processDoc(id, rev_tree);\n }\n\n if (++count === ids.length) {\n // convert LazyMap to object\n var missingObj = {};\n missing.forEach(function (value, key) {\n missingObj[key] = value;\n });\n return callback(null, missingObj);\n }\n });\n }, this);\n});\n\n// _bulk_get API for faster replication, as described in\n// https://github.com/apache/couchdb-chttpd/pull/33\n// At the \"abstract\" level, it will just run multiple get()s in\n// parallel, because this isn't much of a performance cost\n// for local databases (except the cost of multiple transactions, which is\n// small). The http adapter overrides this in order\n// to do a more efficient single HTTP request.\nAbstractPouchDB.prototype.bulkGet =\n adapterFun('bulkGet', function (opts, callback) {\n bulkGet(this, opts, callback);\n});\n\n// compact one document and fire callback\n// by compacting we mean removing all revisions which\n// are further from the leaf in revision tree than max_height\nAbstractPouchDB.prototype.compactDocument =\n adapterFun('compactDocument', function (docId, maxHeight, callback) {\n var self = this;\n this._getRevisionTree(docId, function (err, revTree) {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n var height = computeHeight(revTree);\n var candidates = [];\n var revs = [];\n Object.keys(height).forEach(function (rev) {\n if (height[rev] > maxHeight) {\n candidates.push(rev);\n }\n });\n\n traverseRevTree(revTree, function (isLeaf, pos, revHash, ctx, opts) {\n var rev = pos + '-' + revHash;\n if (opts.status === 'available' && candidates.indexOf(rev) !== -1) {\n revs.push(rev);\n }\n });\n self._doCompaction(docId, revs, callback);\n });\n});\n\n// compact the whole database using single document\n// compaction\nAbstractPouchDB.prototype.compact =\n adapterFun('compact', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n var self = this;\n opts = opts || {};\n\n self._compactionQueue = self._compactionQueue || [];\n self._compactionQueue.push({opts: opts, callback: callback});\n if (self._compactionQueue.length === 1) {\n doNextCompaction(self);\n }\n});\nAbstractPouchDB.prototype._compact = function (opts, callback) {\n var self = this;\n var changesOpts = {\n return_docs: false,\n last_seq: opts.last_seq || 0\n };\n var promises = [];\n\n function onChange(row) {\n promises.push(self.compactDocument(row.id, 0));\n }\n function onComplete(resp) {\n var lastSeq = resp.last_seq;\n Promise.all(promises).then(function () {\n return upsert(self, '_local/compaction', function deltaFunc(doc) {\n if (!doc.last_seq || doc.last_seq < lastSeq) {\n doc.last_seq = lastSeq;\n return doc;\n }\n return false; // somebody else got here first, don't update\n });\n }).then(function () {\n callback(null, {ok: true});\n }).catch(callback);\n }\n self.changes(changesOpts)\n .on('change', onChange)\n .on('complete', onComplete)\n .on('error', callback);\n};\n\n/* Begin api wrappers. Specific functionality to storage belongs in the\n _[method] */\nAbstractPouchDB.prototype.get = adapterFun('get', function (id, opts, cb) {\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n if (typeof id !== 'string') {\n return cb(createError(INVALID_ID));\n }\n if (isLocalId(id) && typeof this._getLocal === 'function') {\n return this._getLocal(id, cb);\n }\n var leaves = [], self = this;\n\n function finishOpenRevs() {\n var result = [];\n var count = leaves.length;\n /* istanbul ignore if */\n if (!count) {\n return cb(null, result);\n }\n\n // order with open_revs is unspecified\n leaves.forEach(function (leaf) {\n self.get(id, {\n rev: leaf,\n revs: opts.revs,\n latest: opts.latest,\n attachments: opts.attachments,\n binary: opts.binary\n }, function (err, doc) {\n if (!err) {\n // using latest=true can produce duplicates\n var existing;\n for (var i = 0, l = result.length; i < l; i++) {\n if (result[i].ok && result[i].ok._rev === doc._rev) {\n existing = true;\n break;\n }\n }\n if (!existing) {\n result.push({ok: doc});\n }\n } else {\n result.push({missing: leaf});\n }\n count--;\n if (!count) {\n cb(null, result);\n }\n });\n });\n }\n\n if (opts.open_revs) {\n if (opts.open_revs === \"all\") {\n this._getRevisionTree(id, function (err, rev_tree) {\n /* istanbul ignore if */\n if (err) {\n return cb(err);\n }\n leaves = collectLeaves(rev_tree).map(function (leaf) {\n return leaf.rev;\n });\n finishOpenRevs();\n });\n } else {\n if (Array.isArray(opts.open_revs)) {\n leaves = opts.open_revs;\n for (var i = 0; i < leaves.length; i++) {\n var l = leaves[i];\n // looks like it's the only thing couchdb checks\n if (!(typeof (l) === \"string\" && /^\\d+-/.test(l))) {\n return cb(createError(INVALID_REV));\n }\n }\n finishOpenRevs();\n } else {\n return cb(createError(UNKNOWN_ERROR, 'function_clause'));\n }\n }\n return; // open_revs does not like other options\n }\n\n return this._get(id, opts, function (err, result) {\n if (err) {\n err.docId = id;\n return cb(err);\n }\n\n var doc = result.doc;\n var metadata = result.metadata;\n var ctx = result.ctx;\n\n if (opts.conflicts) {\n var conflicts = collectConflicts(metadata);\n if (conflicts.length) {\n doc._conflicts = conflicts;\n }\n }\n\n if (isDeleted(metadata, doc._rev)) {\n doc._deleted = true;\n }\n\n if (opts.revs || opts.revs_info) {\n var splittedRev = doc._rev.split('-');\n var revNo = parseInt(splittedRev[0], 10);\n var revHash = splittedRev[1];\n\n var paths = rootToLeaf(metadata.rev_tree);\n var path = null;\n\n for (var i = 0; i < paths.length; i++) {\n var currentPath = paths[i];\n var hashIndex = currentPath.ids.map(function (x) { return x.id; })\n .indexOf(revHash);\n var hashFoundAtRevPos = hashIndex === (revNo - 1);\n\n if (hashFoundAtRevPos || (!path && hashIndex !== -1)) {\n path = currentPath;\n }\n }\n\n var indexOfRev = path.ids.map(function (x) { return x.id; })\n .indexOf(doc._rev.split('-')[1]) + 1;\n var howMany = path.ids.length - indexOfRev;\n path.ids.splice(indexOfRev, howMany);\n path.ids.reverse();\n\n if (opts.revs) {\n doc._revisions = {\n start: (path.pos + path.ids.length) - 1,\n ids: path.ids.map(function (rev) {\n return rev.id;\n })\n };\n }\n if (opts.revs_info) {\n var pos = path.pos + path.ids.length;\n doc._revs_info = path.ids.map(function (rev) {\n pos--;\n return {\n rev: pos + '-' + rev.id,\n status: rev.opts.status\n };\n });\n }\n }\n\n if (opts.attachments && doc._attachments) {\n var attachments = doc._attachments;\n var count = Object.keys(attachments).length;\n if (count === 0) {\n return cb(null, doc);\n }\n Object.keys(attachments).forEach(function (key) {\n this._getAttachment(doc._id, key, attachments[key], {\n // Previously the revision handling was done in adapter.js\n // getAttachment, however since idb-next doesnt we need to\n // pass the rev through\n rev: doc._rev,\n binary: opts.binary,\n ctx: ctx\n }, function (err, data) {\n var att = doc._attachments[key];\n att.data = data;\n delete att.stub;\n delete att.length;\n if (!--count) {\n cb(null, doc);\n }\n });\n }, self);\n } else {\n if (doc._attachments) {\n for (var key in doc._attachments) {\n /* istanbul ignore else */\n if (doc._attachments.hasOwnProperty(key)) {\n doc._attachments[key].stub = true;\n }\n }\n }\n cb(null, doc);\n }\n });\n});\n\n// TODO: I dont like this, it forces an extra read for every\n// attachment read and enforces a confusing api between\n// adapter.js and the adapter implementation\nAbstractPouchDB.prototype.getAttachment =\n adapterFun('getAttachment', function (docId, attachmentId, opts, callback) {\n var self = this;\n if (opts instanceof Function) {\n callback = opts;\n opts = {};\n }\n this._get(docId, opts, function (err, res) {\n if (err) {\n return callback(err);\n }\n if (res.doc._attachments && res.doc._attachments[attachmentId]) {\n opts.ctx = res.ctx;\n opts.binary = true;\n self._getAttachment(docId, attachmentId,\n res.doc._attachments[attachmentId], opts, callback);\n } else {\n return callback(createError(MISSING_DOC));\n }\n });\n});\n\nAbstractPouchDB.prototype.allDocs =\n adapterFun('allDocs', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts.skip = typeof opts.skip !== 'undefined' ? opts.skip : 0;\n if (opts.start_key) {\n opts.startkey = opts.start_key;\n }\n if (opts.end_key) {\n opts.endkey = opts.end_key;\n }\n if ('keys' in opts) {\n if (!Array.isArray(opts.keys)) {\n return callback(new TypeError('options.keys must be an array'));\n }\n var incompatibleOpt =\n ['startkey', 'endkey', 'key'].filter(function (incompatibleOpt) {\n return incompatibleOpt in opts;\n })[0];\n if (incompatibleOpt) {\n callback(createError(QUERY_PARSE_ERROR,\n 'Query parameter `' + incompatibleOpt +\n '` is not compatible with multi-get'\n ));\n return;\n }\n if (!isRemote(this)) {\n allDocsKeysParse(opts);\n if (opts.keys.length === 0) {\n return this._allDocs({limit: 0}, callback);\n }\n }\n }\n\n return this._allDocs(opts, callback);\n});\n\nAbstractPouchDB.prototype.changes = function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n opts = opts || {};\n\n // By default set return_docs to false if the caller has opts.live = true,\n // this will prevent us from collecting the set of changes indefinitely\n // resulting in growing memory\n opts.return_docs = ('return_docs' in opts) ? opts.return_docs : !opts.live;\n\n return new Changes$1(this, opts, callback);\n};\n\nAbstractPouchDB.prototype.close = adapterFun('close', function (callback) {\n this._closed = true;\n this.emit('closed');\n return this._close(callback);\n});\n\nAbstractPouchDB.prototype.info = adapterFun('info', function (callback) {\n var self = this;\n this._info(function (err, info) {\n if (err) {\n return callback(err);\n }\n // assume we know better than the adapter, unless it informs us\n info.db_name = info.db_name || self.name;\n info.auto_compaction = !!(self.auto_compaction && !isRemote(self));\n info.adapter = self.adapter;\n callback(null, info);\n });\n});\n\nAbstractPouchDB.prototype.id = adapterFun('id', function (callback) {\n return this._id(callback);\n});\n\n/* istanbul ignore next */\nAbstractPouchDB.prototype.type = function () {\n return (typeof this._type === 'function') ? this._type() : this.adapter;\n};\n\nAbstractPouchDB.prototype.bulkDocs =\n adapterFun('bulkDocs', function (req, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n opts = opts || {};\n\n if (Array.isArray(req)) {\n req = {\n docs: req\n };\n }\n\n if (!req || !req.docs || !Array.isArray(req.docs)) {\n return callback(createError(MISSING_BULK_DOCS));\n }\n\n for (var i = 0; i < req.docs.length; ++i) {\n if (typeof req.docs[i] !== 'object' || Array.isArray(req.docs[i])) {\n return callback(createError(NOT_AN_OBJECT));\n }\n }\n\n var attachmentError;\n req.docs.forEach(function (doc) {\n if (doc._attachments) {\n Object.keys(doc._attachments).forEach(function (name) {\n attachmentError = attachmentError || attachmentNameError(name);\n if (!doc._attachments[name].content_type) {\n guardedConsole('warn', 'Attachment', name, 'on document', doc._id, 'is missing content_type');\n }\n });\n }\n });\n\n if (attachmentError) {\n return callback(createError(BAD_REQUEST, attachmentError));\n }\n\n if (!('new_edits' in opts)) {\n if ('new_edits' in req) {\n opts.new_edits = req.new_edits;\n } else {\n opts.new_edits = true;\n }\n }\n\n var adapter = this;\n if (!opts.new_edits && !isRemote(adapter)) {\n // ensure revisions of the same doc are sorted, so that\n // the local adapter processes them correctly (#2935)\n req.docs.sort(compareByIdThenRev);\n }\n\n cleanDocs(req.docs);\n\n // in the case of conflicts, we want to return the _ids to the user\n // however, the underlying adapter may destroy the docs array, so\n // create a copy here\n var ids = req.docs.map(function (doc) {\n return doc._id;\n });\n\n return this._bulkDocs(req, opts, function (err, res) {\n if (err) {\n return callback(err);\n }\n if (!opts.new_edits) {\n // this is what couch does when new_edits is false\n res = res.filter(function (x) {\n return x.error;\n });\n }\n // add ids for error/conflict responses (not required for CouchDB)\n if (!isRemote(adapter)) {\n for (var i = 0, l = res.length; i < l; i++) {\n res[i].id = res[i].id || ids[i];\n }\n }\n\n callback(null, res);\n });\n});\n\nAbstractPouchDB.prototype.registerDependentDatabase =\n adapterFun('registerDependentDatabase', function (dependentDb,\n callback) {\n var depDB = new this.constructor(dependentDb, this.__opts);\n\n function diffFun(doc) {\n doc.dependentDbs = doc.dependentDbs || {};\n if (doc.dependentDbs[dependentDb]) {\n return false; // no update required\n }\n doc.dependentDbs[dependentDb] = true;\n return doc;\n }\n upsert(this, '_local/_pouch_dependentDbs', diffFun)\n .then(function () {\n callback(null, {db: depDB});\n }).catch(callback);\n});\n\nAbstractPouchDB.prototype.destroy =\n adapterFun('destroy', function (opts, callback) {\n\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n var self = this;\n var usePrefix = 'use_prefix' in self ? self.use_prefix : true;\n\n function destroyDb() {\n // call destroy method of the particular adaptor\n self._destroy(opts, function (err, resp) {\n if (err) {\n return callback(err);\n }\n self._destroyed = true;\n self.emit('destroyed');\n callback(null, resp || { 'ok': true });\n });\n }\n\n if (isRemote(self)) {\n // no need to check for dependent DBs if it's a remote DB\n return destroyDb();\n }\n\n self.get('_local/_pouch_dependentDbs', function (err, localDoc) {\n if (err) {\n /* istanbul ignore if */\n if (err.status !== 404) {\n return callback(err);\n } else { // no dependencies\n return destroyDb();\n }\n }\n var dependentDbs = localDoc.dependentDbs;\n var PouchDB = self.constructor;\n var deletedMap = Object.keys(dependentDbs).map(function (name) {\n // use_prefix is only false in the browser\n /* istanbul ignore next */\n var trueName = usePrefix ?\n name.replace(new RegExp('^' + PouchDB.prefix), '') : name;\n return new PouchDB(trueName, self.__opts).destroy();\n });\n Promise.all(deletedMap).then(destroyDb, callback);\n });\n});\n\nfunction TaskQueue() {\n this.isReady = false;\n this.failed = false;\n this.queue = [];\n}\n\nTaskQueue.prototype.execute = function () {\n var fun;\n if (this.failed) {\n while ((fun = this.queue.shift())) {\n fun(this.failed);\n }\n } else {\n while ((fun = this.queue.shift())) {\n fun();\n }\n }\n};\n\nTaskQueue.prototype.fail = function (err) {\n this.failed = err;\n this.execute();\n};\n\nTaskQueue.prototype.ready = function (db) {\n this.isReady = true;\n this.db = db;\n this.execute();\n};\n\nTaskQueue.prototype.addTask = function (fun) {\n this.queue.push(fun);\n if (this.failed) {\n this.execute();\n }\n};\n\nfunction parseAdapter(name, opts) {\n var match = name.match(/([a-z-]*):\\/\\/(.*)/);\n if (match) {\n // the http adapter expects the fully qualified name\n return {\n name: /https?/.test(match[1]) ? match[1] + '://' + match[2] : match[2],\n adapter: match[1]\n };\n }\n\n var adapters = PouchDB.adapters;\n var preferredAdapters = PouchDB.preferredAdapters;\n var prefix = PouchDB.prefix;\n var adapterName = opts.adapter;\n\n if (!adapterName) { // automatically determine adapter\n for (var i = 0; i < preferredAdapters.length; ++i) {\n adapterName = preferredAdapters[i];\n // check for browsers that have been upgraded from websql-only to websql+idb\n /* istanbul ignore if */\n if (adapterName === 'idb' && 'websql' in adapters &&\n hasLocalStorage() && localStorage['_pouch__websqldb_' + prefix + name]) {\n // log it, because this can be confusing during development\n guardedConsole('log', 'PouchDB is downgrading \"' + name + '\" to WebSQL to' +\n ' avoid data loss, because it was already opened with WebSQL.');\n continue; // keep using websql to avoid user data loss\n }\n break;\n }\n }\n\n var adapter = adapters[adapterName];\n\n // if adapter is invalid, then an error will be thrown later\n var usePrefix = (adapter && 'use_prefix' in adapter) ?\n adapter.use_prefix : true;\n\n return {\n name: usePrefix ? (prefix + name) : name,\n adapter: adapterName\n };\n}\n\n// OK, so here's the deal. Consider this code:\n// var db1 = new PouchDB('foo');\n// var db2 = new PouchDB('foo');\n// db1.destroy();\n// ^ these two both need to emit 'destroyed' events,\n// as well as the PouchDB constructor itself.\n// So we have one db object (whichever one got destroy() called on it)\n// responsible for emitting the initial event, which then gets emitted\n// by the constructor, which then broadcasts it to any other dbs\n// that may have been created with the same name.\nfunction prepareForDestruction(self) {\n\n function onDestroyed(from_constructor) {\n self.removeListener('closed', onClosed);\n if (!from_constructor) {\n self.constructor.emit('destroyed', self.name);\n }\n }\n\n function onClosed() {\n self.removeListener('destroyed', onDestroyed);\n self.constructor.emit('unref', self);\n }\n\n self.once('destroyed', onDestroyed);\n self.once('closed', onClosed);\n self.constructor.emit('ref', self);\n}\n\ninherits(PouchDB, AbstractPouchDB);\nfunction PouchDB(name, opts) {\n // In Node our test suite only tests this for PouchAlt unfortunately\n /* istanbul ignore if */\n if (!(this instanceof PouchDB)) {\n return new PouchDB(name, opts);\n }\n\n var self = this;\n opts = opts || {};\n\n if (name && typeof name === 'object') {\n opts = name;\n name = opts.name;\n delete opts.name;\n }\n\n if (opts.deterministic_revs === undefined) {\n opts.deterministic_revs = true;\n }\n\n this.__opts = opts = clone(opts);\n\n self.auto_compaction = opts.auto_compaction;\n self.prefix = PouchDB.prefix;\n\n if (typeof name !== 'string') {\n throw new Error('Missing/invalid DB name');\n }\n\n var prefixedName = (opts.prefix || '') + name;\n var backend = parseAdapter(prefixedName, opts);\n\n opts.name = backend.name;\n opts.adapter = opts.adapter || backend.adapter;\n\n self.name = name;\n self._adapter = opts.adapter;\n PouchDB.emit('debug', ['adapter', 'Picked adapter: ', opts.adapter]);\n\n if (!PouchDB.adapters[opts.adapter] ||\n !PouchDB.adapters[opts.adapter].valid()) {\n throw new Error('Invalid Adapter: ' + opts.adapter);\n }\n\n AbstractPouchDB.call(self);\n self.taskqueue = new TaskQueue();\n\n self.adapter = opts.adapter;\n\n PouchDB.adapters[opts.adapter].call(self, opts, function (err) {\n if (err) {\n return self.taskqueue.fail(err);\n }\n prepareForDestruction(self);\n\n self.emit('created', self);\n PouchDB.emit('created', self.name);\n self.taskqueue.ready(self);\n });\n\n}\n\n// AbortController was introduced quite a while after fetch and\n// isnt required for PouchDB to function so polyfill if needed\nvar a = (typeof AbortController !== 'undefined')\n ? AbortController\n : function () { return {abort: function () {}}; };\n\nvar f$1 = fetch;\nvar h = Headers;\n\nPouchDB.adapters = {};\nPouchDB.preferredAdapters = [];\n\nPouchDB.prefix = '_pouch_';\n\nvar eventEmitter = new EventEmitter();\n\nfunction setUpEventEmitter(Pouch) {\n Object.keys(EventEmitter.prototype).forEach(function (key) {\n if (typeof EventEmitter.prototype[key] === 'function') {\n Pouch[key] = eventEmitter[key].bind(eventEmitter);\n }\n });\n\n // these are created in constructor.js, and allow us to notify each DB with\n // the same name that it was destroyed, via the constructor object\n var destructListeners = Pouch._destructionListeners = new ExportedMap();\n\n Pouch.on('ref', function onConstructorRef(db) {\n if (!destructListeners.has(db.name)) {\n destructListeners.set(db.name, []);\n }\n destructListeners.get(db.name).push(db);\n });\n\n Pouch.on('unref', function onConstructorUnref(db) {\n if (!destructListeners.has(db.name)) {\n return;\n }\n var dbList = destructListeners.get(db.name);\n var pos = dbList.indexOf(db);\n if (pos < 0) {\n /* istanbul ignore next */\n return;\n }\n dbList.splice(pos, 1);\n if (dbList.length > 1) {\n /* istanbul ignore next */\n destructListeners.set(db.name, dbList);\n } else {\n destructListeners.delete(db.name);\n }\n });\n\n Pouch.on('destroyed', function onConstructorDestroyed(name) {\n if (!destructListeners.has(name)) {\n return;\n }\n var dbList = destructListeners.get(name);\n destructListeners.delete(name);\n dbList.forEach(function (db) {\n db.emit('destroyed',true);\n });\n });\n}\n\nsetUpEventEmitter(PouchDB);\n\nPouchDB.adapter = function (id, obj, addToPreferredAdapters) {\n /* istanbul ignore else */\n if (obj.valid()) {\n PouchDB.adapters[id] = obj;\n if (addToPreferredAdapters) {\n PouchDB.preferredAdapters.push(id);\n }\n }\n};\n\nPouchDB.plugin = function (obj) {\n if (typeof obj === 'function') { // function style for plugins\n obj(PouchDB);\n } else if (typeof obj !== 'object' || Object.keys(obj).length === 0) {\n throw new Error('Invalid plugin: got \"' + obj + '\", expected an object or a function');\n } else {\n Object.keys(obj).forEach(function (id) { // object style for plugins\n PouchDB.prototype[id] = obj[id];\n });\n }\n if (this.__defaults) {\n PouchDB.__defaults = $inject_Object_assign({}, this.__defaults);\n }\n return PouchDB;\n};\n\nPouchDB.defaults = function (defaultOpts) {\n function PouchAlt(name, opts) {\n if (!(this instanceof PouchAlt)) {\n return new PouchAlt(name, opts);\n }\n\n opts = opts || {};\n\n if (name && typeof name === 'object') {\n opts = name;\n name = opts.name;\n delete opts.name;\n }\n\n opts = $inject_Object_assign({}, PouchAlt.__defaults, opts);\n PouchDB.call(this, name, opts);\n }\n\n inherits(PouchAlt, PouchDB);\n\n PouchAlt.preferredAdapters = PouchDB.preferredAdapters.slice();\n Object.keys(PouchDB).forEach(function (key) {\n if (!(key in PouchAlt)) {\n PouchAlt[key] = PouchDB[key];\n }\n });\n\n // make default options transitive\n // https://github.com/pouchdb/pouchdb/issues/5922\n PouchAlt.__defaults = $inject_Object_assign({}, this.__defaults, defaultOpts);\n\n return PouchAlt;\n};\n\nPouchDB.fetch = function (url, opts) {\n return f$1(url, opts);\n};\n\n// managed automatically by set-version.js\nvar version = \"7.0.0\";\n\n// this would just be \"return doc[field]\", but fields\n// can be \"deep\" due to dot notation\nfunction getFieldFromDoc(doc, parsedField) {\n var value = doc;\n for (var i = 0, len = parsedField.length; i < len; i++) {\n var key = parsedField[i];\n value = value[key];\n if (!value) {\n break;\n }\n }\n return value;\n}\n\nfunction compare$1(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\n// Converts a string in dot notation to an array of its components, with backslash escaping\nfunction parseField(fieldName) {\n // fields may be deep (e.g. \"foo.bar.baz\"), so parse\n var fields = [];\n var current = '';\n for (var i = 0, len = fieldName.length; i < len; i++) {\n var ch = fieldName[i];\n if (ch === '.') {\n if (i > 0 && fieldName[i - 1] === '\\\\') { // escaped delimiter\n current = current.substring(0, current.length - 1) + '.';\n } else { // not escaped, so delimiter\n fields.push(current);\n current = '';\n }\n } else { // normal character\n current += ch;\n }\n }\n fields.push(current);\n return fields;\n}\n\nvar combinationFields = ['$or', '$nor', '$not'];\nfunction isCombinationalField(field) {\n return combinationFields.indexOf(field) > -1;\n}\n\nfunction getKey(obj) {\n return Object.keys(obj)[0];\n}\n\nfunction getValue(obj) {\n return obj[getKey(obj)];\n}\n\n\n// flatten an array of selectors joined by an $and operator\nfunction mergeAndedSelectors(selectors) {\n\n // sort to ensure that e.g. if the user specified\n // $and: [{$gt: 'a'}, {$gt: 'b'}], then it's collapsed into\n // just {$gt: 'b'}\n var res = {};\n\n selectors.forEach(function (selector) {\n Object.keys(selector).forEach(function (field) {\n var matcher = selector[field];\n if (typeof matcher !== 'object') {\n matcher = {$eq: matcher};\n }\n\n if (isCombinationalField(field)) {\n if (matcher instanceof Array) {\n res[field] = matcher.map(function (m) {\n return mergeAndedSelectors([m]);\n });\n } else {\n res[field] = mergeAndedSelectors([matcher]);\n }\n } else {\n var fieldMatchers = res[field] = res[field] || {};\n Object.keys(matcher).forEach(function (operator) {\n var value = matcher[operator];\n\n if (operator === '$gt' || operator === '$gte') {\n return mergeGtGte(operator, value, fieldMatchers);\n } else if (operator === '$lt' || operator === '$lte') {\n return mergeLtLte(operator, value, fieldMatchers);\n } else if (operator === '$ne') {\n return mergeNe(value, fieldMatchers);\n } else if (operator === '$eq') {\n return mergeEq(value, fieldMatchers);\n }\n fieldMatchers[operator] = value;\n });\n }\n });\n });\n\n return res;\n}\n\n\n\n// collapse logically equivalent gt/gte values\nfunction mergeGtGte(operator, value, fieldMatchers) {\n if (typeof fieldMatchers.$eq !== 'undefined') {\n return; // do nothing\n }\n if (typeof fieldMatchers.$gte !== 'undefined') {\n if (operator === '$gte') {\n if (value > fieldMatchers.$gte) { // more specificity\n fieldMatchers.$gte = value;\n }\n } else { // operator === '$gt'\n if (value >= fieldMatchers.$gte) { // more specificity\n delete fieldMatchers.$gte;\n fieldMatchers.$gt = value;\n }\n }\n } else if (typeof fieldMatchers.$gt !== 'undefined') {\n if (operator === '$gte') {\n if (value > fieldMatchers.$gt) { // more specificity\n delete fieldMatchers.$gt;\n fieldMatchers.$gte = value;\n }\n } else { // operator === '$gt'\n if (value > fieldMatchers.$gt) { // more specificity\n fieldMatchers.$gt = value;\n }\n }\n } else {\n fieldMatchers[operator] = value;\n }\n}\n\n// collapse logically equivalent lt/lte values\nfunction mergeLtLte(operator, value, fieldMatchers) {\n if (typeof fieldMatchers.$eq !== 'undefined') {\n return; // do nothing\n }\n if (typeof fieldMatchers.$lte !== 'undefined') {\n if (operator === '$lte') {\n if (value < fieldMatchers.$lte) { // more specificity\n fieldMatchers.$lte = value;\n }\n } else { // operator === '$gt'\n if (value <= fieldMatchers.$lte) { // more specificity\n delete fieldMatchers.$lte;\n fieldMatchers.$lt = value;\n }\n }\n } else if (typeof fieldMatchers.$lt !== 'undefined') {\n if (operator === '$lte') {\n if (value < fieldMatchers.$lt) { // more specificity\n delete fieldMatchers.$lt;\n fieldMatchers.$lte = value;\n }\n } else { // operator === '$gt'\n if (value < fieldMatchers.$lt) { // more specificity\n fieldMatchers.$lt = value;\n }\n }\n } else {\n fieldMatchers[operator] = value;\n }\n}\n\n// combine $ne values into one array\nfunction mergeNe(value, fieldMatchers) {\n if ('$ne' in fieldMatchers) {\n // there are many things this could \"not\" be\n fieldMatchers.$ne.push(value);\n } else { // doesn't exist yet\n fieldMatchers.$ne = [value];\n }\n}\n\n// add $eq into the mix\nfunction mergeEq(value, fieldMatchers) {\n // these all have less specificity than the $eq\n // TODO: check for user errors here\n delete fieldMatchers.$gt;\n delete fieldMatchers.$gte;\n delete fieldMatchers.$lt;\n delete fieldMatchers.$lte;\n delete fieldMatchers.$ne;\n fieldMatchers.$eq = value;\n}\n\n\n//\n// normalize the selector\n//\nfunction massageSelector(input) {\n var result = clone(input);\n var wasAnded = false;\n if ('$and' in result) {\n result = mergeAndedSelectors(result['$and']);\n wasAnded = true;\n }\n\n ['$or', '$nor'].forEach(function (orOrNor) {\n if (orOrNor in result) {\n // message each individual selector\n // e.g. {foo: 'bar'} becomes {foo: {$eq: 'bar'}}\n result[orOrNor].forEach(function (subSelector) {\n var fields = Object.keys(subSelector);\n for (var i = 0; i < fields.length; i++) {\n var field = fields[i];\n var matcher = subSelector[field];\n if (typeof matcher !== 'object' || matcher === null) {\n subSelector[field] = {$eq: matcher};\n }\n }\n });\n }\n });\n\n if ('$not' in result) {\n //This feels a little like forcing, but it will work for now,\n //I would like to come back to this and make the merging of selectors a little more generic\n result['$not'] = mergeAndedSelectors([result['$not']]);\n }\n\n var fields = Object.keys(result);\n\n for (var i = 0; i < fields.length; i++) {\n var field = fields[i];\n var matcher = result[field];\n\n if (typeof matcher !== 'object' || matcher === null) {\n matcher = {$eq: matcher};\n } else if ('$ne' in matcher && !wasAnded) {\n // I put these in an array, since there may be more than one\n // but in the \"mergeAnded\" operation, I already take care of that\n matcher.$ne = [matcher.$ne];\n }\n result[field] = matcher;\n }\n\n return result;\n}\n\nfunction pad(str, padWith, upToLength) {\n var padding = '';\n var targetLength = upToLength - str.length;\n /* istanbul ignore next */\n while (padding.length < targetLength) {\n padding += padWith;\n }\n return padding;\n}\n\nfunction padLeft(str, padWith, upToLength) {\n var padding = pad(str, padWith, upToLength);\n return padding + str;\n}\n\nvar MIN_MAGNITUDE = -324; // verified by -Number.MIN_VALUE\nvar MAGNITUDE_DIGITS = 3; // ditto\nvar SEP = ''; // set to '_' for easier debugging \n\nfunction collate(a, b) {\n\n if (a === b) {\n return 0;\n }\n\n a = normalizeKey(a);\n b = normalizeKey(b);\n\n var ai = collationIndex(a);\n var bi = collationIndex(b);\n if ((ai - bi) !== 0) {\n return ai - bi;\n }\n switch (typeof a) {\n case 'number':\n return a - b;\n case 'boolean':\n return a < b ? -1 : 1;\n case 'string':\n return stringCollate(a, b);\n }\n return Array.isArray(a) ? arrayCollate(a, b) : objectCollate(a, b);\n}\n\n// couch considers null/NaN/Infinity/-Infinity === undefined,\n// for the purposes of mapreduce indexes. also, dates get stringified.\nfunction normalizeKey(key) {\n switch (typeof key) {\n case 'undefined':\n return null;\n case 'number':\n if (key === Infinity || key === -Infinity || isNaN(key)) {\n return null;\n }\n return key;\n case 'object':\n var origKey = key;\n if (Array.isArray(key)) {\n var len = key.length;\n key = new Array(len);\n for (var i = 0; i < len; i++) {\n key[i] = normalizeKey(origKey[i]);\n }\n /* istanbul ignore next */\n } else if (key instanceof Date) {\n return key.toJSON();\n } else if (key !== null) { // generic object\n key = {};\n for (var k in origKey) {\n if (origKey.hasOwnProperty(k)) {\n var val = origKey[k];\n if (typeof val !== 'undefined') {\n key[k] = normalizeKey(val);\n }\n }\n }\n }\n }\n return key;\n}\n\nfunction indexify(key) {\n if (key !== null) {\n switch (typeof key) {\n case 'boolean':\n return key ? 1 : 0;\n case 'number':\n return numToIndexableString(key);\n case 'string':\n // We've to be sure that key does not contain \\u0000\n // Do order-preserving replacements:\n // 0 -> 1, 1\n // 1 -> 1, 2\n // 2 -> 2, 2\n /* eslint-disable no-control-regex */\n return key\n .replace(/\\u0002/g, '\\u0002\\u0002')\n .replace(/\\u0001/g, '\\u0001\\u0002')\n .replace(/\\u0000/g, '\\u0001\\u0001');\n /* eslint-enable no-control-regex */\n case 'object':\n var isArray = Array.isArray(key);\n var arr = isArray ? key : Object.keys(key);\n var i = -1;\n var len = arr.length;\n var result = '';\n if (isArray) {\n while (++i < len) {\n result += toIndexableString(arr[i]);\n }\n } else {\n while (++i < len) {\n var objKey = arr[i];\n result += toIndexableString(objKey) +\n toIndexableString(key[objKey]);\n }\n }\n return result;\n }\n }\n return '';\n}\n\n// convert the given key to a string that would be appropriate\n// for lexical sorting, e.g. within a database, where the\n// sorting is the same given by the collate() function.\nfunction toIndexableString(key) {\n var zero = '\\u0000';\n key = normalizeKey(key);\n return collationIndex(key) + SEP + indexify(key) + zero;\n}\n\nfunction parseNumber(str, i) {\n var originalIdx = i;\n var num;\n var zero = str[i] === '1';\n if (zero) {\n num = 0;\n i++;\n } else {\n var neg = str[i] === '0';\n i++;\n var numAsString = '';\n var magAsString = str.substring(i, i + MAGNITUDE_DIGITS);\n var magnitude = parseInt(magAsString, 10) + MIN_MAGNITUDE;\n /* istanbul ignore next */\n if (neg) {\n magnitude = -magnitude;\n }\n i += MAGNITUDE_DIGITS;\n while (true) {\n var ch = str[i];\n if (ch === '\\u0000') {\n break;\n } else {\n numAsString += ch;\n }\n i++;\n }\n numAsString = numAsString.split('.');\n if (numAsString.length === 1) {\n num = parseInt(numAsString, 10);\n } else {\n /* istanbul ignore next */\n num = parseFloat(numAsString[0] + '.' + numAsString[1]);\n }\n /* istanbul ignore next */\n if (neg) {\n num = num - 10;\n }\n /* istanbul ignore next */\n if (magnitude !== 0) {\n // parseFloat is more reliable than pow due to rounding errors\n // e.g. Number.MAX_VALUE would return Infinity if we did\n // num * Math.pow(10, magnitude);\n num = parseFloat(num + 'e' + magnitude);\n }\n }\n return {num: num, length : i - originalIdx};\n}\n\n// move up the stack while parsing\n// this function moved outside of parseIndexableString for performance\nfunction pop(stack, metaStack) {\n var obj = stack.pop();\n\n if (metaStack.length) {\n var lastMetaElement = metaStack[metaStack.length - 1];\n if (obj === lastMetaElement.element) {\n // popping a meta-element, e.g. an object whose value is another object\n metaStack.pop();\n lastMetaElement = metaStack[metaStack.length - 1];\n }\n var element = lastMetaElement.element;\n var lastElementIndex = lastMetaElement.index;\n if (Array.isArray(element)) {\n element.push(obj);\n } else if (lastElementIndex === stack.length - 2) { // obj with key+value\n var key = stack.pop();\n element[key] = obj;\n } else {\n stack.push(obj); // obj with key only\n }\n }\n}\n\nfunction parseIndexableString(str) {\n var stack = [];\n var metaStack = []; // stack for arrays and objects\n var i = 0;\n\n /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n while (true) {\n var collationIndex = str[i++];\n if (collationIndex === '\\u0000') {\n if (stack.length === 1) {\n return stack.pop();\n } else {\n pop(stack, metaStack);\n continue;\n }\n }\n switch (collationIndex) {\n case '1':\n stack.push(null);\n break;\n case '2':\n stack.push(str[i] === '1');\n i++;\n break;\n case '3':\n var parsedNum = parseNumber(str, i);\n stack.push(parsedNum.num);\n i += parsedNum.length;\n break;\n case '4':\n var parsedStr = '';\n /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n while (true) {\n var ch = str[i];\n if (ch === '\\u0000') {\n break;\n }\n parsedStr += ch;\n i++;\n }\n // perform the reverse of the order-preserving replacement\n // algorithm (see above)\n /* eslint-disable no-control-regex */\n parsedStr = parsedStr.replace(/\\u0001\\u0001/g, '\\u0000')\n .replace(/\\u0001\\u0002/g, '\\u0001')\n .replace(/\\u0002\\u0002/g, '\\u0002');\n /* eslint-enable no-control-regex */\n stack.push(parsedStr);\n break;\n case '5':\n var arrayElement = { element: [], index: stack.length };\n stack.push(arrayElement.element);\n metaStack.push(arrayElement);\n break;\n case '6':\n var objElement = { element: {}, index: stack.length };\n stack.push(objElement.element);\n metaStack.push(objElement);\n break;\n /* istanbul ignore next */\n default:\n throw new Error(\n 'bad collationIndex or unexpectedly reached end of input: ' +\n collationIndex);\n }\n }\n}\n\nfunction arrayCollate(a, b) {\n var len = Math.min(a.length, b.length);\n for (var i = 0; i < len; i++) {\n var sort = collate(a[i], b[i]);\n if (sort !== 0) {\n return sort;\n }\n }\n return (a.length === b.length) ? 0 :\n (a.length > b.length) ? 1 : -1;\n}\nfunction stringCollate(a, b) {\n // See: https://github.com/daleharvey/pouchdb/issues/40\n // This is incompatible with the CouchDB implementation, but its the\n // best we can do for now\n return (a === b) ? 0 : ((a > b) ? 1 : -1);\n}\nfunction objectCollate(a, b) {\n var ak = Object.keys(a), bk = Object.keys(b);\n var len = Math.min(ak.length, bk.length);\n for (var i = 0; i < len; i++) {\n // First sort the keys\n var sort = collate(ak[i], bk[i]);\n if (sort !== 0) {\n return sort;\n }\n // if the keys are equal sort the values\n sort = collate(a[ak[i]], b[bk[i]]);\n if (sort !== 0) {\n return sort;\n }\n\n }\n return (ak.length === bk.length) ? 0 :\n (ak.length > bk.length) ? 1 : -1;\n}\n// The collation is defined by erlangs ordered terms\n// the atoms null, true, false come first, then numbers, strings,\n// arrays, then objects\n// null/undefined/NaN/Infinity/-Infinity are all considered null\nfunction collationIndex(x) {\n var id = ['boolean', 'number', 'string', 'object'];\n var idx = id.indexOf(typeof x);\n //false if -1 otherwise true, but fast!!!!1\n if (~idx) {\n if (x === null) {\n return 1;\n }\n if (Array.isArray(x)) {\n return 5;\n }\n return idx < 3 ? (idx + 2) : (idx + 3);\n }\n /* istanbul ignore next */\n if (Array.isArray(x)) {\n return 5;\n }\n}\n\n// conversion:\n// x yyy zz...zz\n// x = 0 for negative, 1 for 0, 2 for positive\n// y = exponent (for negative numbers negated) moved so that it's >= 0\n// z = mantisse\nfunction numToIndexableString(num) {\n\n if (num === 0) {\n return '1';\n }\n\n // convert number to exponential format for easier and\n // more succinct string sorting\n var expFormat = num.toExponential().split(/e\\+?/);\n var magnitude = parseInt(expFormat[1], 10);\n\n var neg = num < 0;\n\n var result = neg ? '0' : '2';\n\n // first sort by magnitude\n // it's easier if all magnitudes are positive\n var magForComparison = ((neg ? -magnitude : magnitude) - MIN_MAGNITUDE);\n var magString = padLeft((magForComparison).toString(), '0', MAGNITUDE_DIGITS);\n\n result += SEP + magString;\n\n // then sort by the factor\n var factor = Math.abs(parseFloat(expFormat[0])); // [1..10)\n /* istanbul ignore next */\n if (neg) { // for negative reverse ordering\n factor = 10 - factor;\n }\n\n var factorStr = factor.toFixed(20);\n\n // strip zeros from the end\n factorStr = factorStr.replace(/\\.?0+$/, '');\n\n result += SEP + factorStr;\n\n return result;\n}\n\n// create a comparator based on the sort object\nfunction createFieldSorter(sort) {\n\n function getFieldValuesAsArray(doc) {\n return sort.map(function (sorting) {\n var fieldName = getKey(sorting);\n var parsedField = parseField(fieldName);\n var docFieldValue = getFieldFromDoc(doc, parsedField);\n return docFieldValue;\n });\n }\n\n return function (aRow, bRow) {\n var aFieldValues = getFieldValuesAsArray(aRow.doc);\n var bFieldValues = getFieldValuesAsArray(bRow.doc);\n var collation = collate(aFieldValues, bFieldValues);\n if (collation !== 0) {\n return collation;\n }\n // this is what mango seems to do\n return compare$1(aRow.doc._id, bRow.doc._id);\n };\n}\n\nfunction filterInMemoryFields(rows, requestDef, inMemoryFields) {\n rows = rows.filter(function (row) {\n return rowFilter(row.doc, requestDef.selector, inMemoryFields);\n });\n\n if (requestDef.sort) {\n // in-memory sort\n var fieldSorter = createFieldSorter(requestDef.sort);\n rows = rows.sort(fieldSorter);\n if (typeof requestDef.sort[0] !== 'string' &&\n getValue(requestDef.sort[0]) === 'desc') {\n rows = rows.reverse();\n }\n }\n\n if ('limit' in requestDef || 'skip' in requestDef) {\n // have to do the limit in-memory\n var skip = requestDef.skip || 0;\n var limit = ('limit' in requestDef ? requestDef.limit : rows.length) + skip;\n rows = rows.slice(skip, limit);\n }\n return rows;\n}\n\nfunction rowFilter(doc, selector, inMemoryFields) {\n return inMemoryFields.every(function (field) {\n var matcher = selector[field];\n var parsedField = parseField(field);\n var docFieldValue = getFieldFromDoc(doc, parsedField);\n if (isCombinationalField(field)) {\n return matchCominationalSelector(field, matcher, doc);\n }\n\n return matchSelector(matcher, doc, parsedField, docFieldValue);\n });\n}\n\nfunction matchSelector(matcher, doc, parsedField, docFieldValue) {\n if (!matcher) {\n // no filtering necessary; this field is just needed for sorting\n return true;\n }\n\n return Object.keys(matcher).every(function (userOperator) {\n var userValue = matcher[userOperator];\n return match(userOperator, doc, userValue, parsedField, docFieldValue);\n });\n}\n\nfunction matchCominationalSelector(field, matcher, doc) {\n\n if (field === '$or') {\n return matcher.some(function (orMatchers) {\n return rowFilter(doc, orMatchers, Object.keys(orMatchers));\n });\n }\n\n if (field === '$not') {\n return !rowFilter(doc, matcher, Object.keys(matcher));\n }\n\n //`$nor`\n return !matcher.find(function (orMatchers) {\n return rowFilter(doc, orMatchers, Object.keys(orMatchers));\n });\n\n}\n\nfunction match(userOperator, doc, userValue, parsedField, docFieldValue) {\n if (!matchers[userOperator]) {\n throw new Error('unknown operator \"' + userOperator +\n '\" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, ' +\n '$nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all');\n }\n return matchers[userOperator](doc, userValue, parsedField, docFieldValue);\n}\n\nfunction fieldExists(docFieldValue) {\n return typeof docFieldValue !== 'undefined' && docFieldValue !== null;\n}\n\nfunction fieldIsNotUndefined(docFieldValue) {\n return typeof docFieldValue !== 'undefined';\n}\n\nfunction modField(docFieldValue, userValue) {\n var divisor = userValue[0];\n var mod = userValue[1];\n if (divisor === 0) {\n throw new Error('Bad divisor, cannot divide by zero');\n }\n\n if (parseInt(divisor, 10) !== divisor ) {\n throw new Error('Divisor is not an integer');\n }\n\n if (parseInt(mod, 10) !== mod ) {\n throw new Error('Modulus is not an integer');\n }\n\n if (parseInt(docFieldValue, 10) !== docFieldValue) {\n return false;\n }\n\n return docFieldValue % divisor === mod;\n}\n\nfunction arrayContainsValue(docFieldValue, userValue) {\n return userValue.some(function (val) {\n if (docFieldValue instanceof Array) {\n return docFieldValue.indexOf(val) > -1;\n }\n\n return docFieldValue === val;\n });\n}\n\nfunction arrayContainsAllValues(docFieldValue, userValue) {\n return userValue.every(function (val) {\n return docFieldValue.indexOf(val) > -1;\n });\n}\n\nfunction arraySize(docFieldValue, userValue) {\n return docFieldValue.length === userValue;\n}\n\nfunction regexMatch(docFieldValue, userValue) {\n var re = new RegExp(userValue);\n\n return re.test(docFieldValue);\n}\n\nfunction typeMatch(docFieldValue, userValue) {\n\n switch (userValue) {\n case 'null':\n return docFieldValue === null;\n case 'boolean':\n return typeof (docFieldValue) === 'boolean';\n case 'number':\n return typeof (docFieldValue) === 'number';\n case 'string':\n return typeof (docFieldValue) === 'string';\n case 'array':\n return docFieldValue instanceof Array;\n case 'object':\n return ({}).toString.call(docFieldValue) === '[object Object]';\n }\n\n throw new Error(userValue + ' not supported as a type.' +\n 'Please use one of object, string, array, number, boolean or null.');\n\n}\n\nvar matchers = {\n\n '$elemMatch': function (doc, userValue, parsedField, docFieldValue) {\n if (!Array.isArray(docFieldValue)) {\n return false;\n }\n\n if (docFieldValue.length === 0) {\n return false;\n }\n\n if (typeof docFieldValue[0] === 'object') {\n return docFieldValue.some(function (val) {\n return rowFilter(val, userValue, Object.keys(userValue));\n });\n }\n\n return docFieldValue.some(function (val) {\n return matchSelector(userValue, doc, parsedField, val);\n });\n },\n\n '$allMatch': function (doc, userValue, parsedField, docFieldValue) {\n if (!Array.isArray(docFieldValue)) {\n return false;\n }\n\n /* istanbul ignore next */\n if (docFieldValue.length === 0) {\n return false;\n }\n\n if (typeof docFieldValue[0] === 'object') {\n return docFieldValue.every(function (val) {\n return rowFilter(val, userValue, Object.keys(userValue));\n });\n }\n\n return docFieldValue.every(function (val) {\n return matchSelector(userValue, doc, parsedField, val);\n });\n },\n\n '$eq': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) === 0;\n },\n\n '$gte': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) >= 0;\n },\n\n '$gt': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) > 0;\n },\n\n '$lte': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) <= 0;\n },\n\n '$lt': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) < 0;\n },\n\n '$exists': function (doc, userValue, parsedField, docFieldValue) {\n //a field that is null is still considered to exist\n if (userValue) {\n return fieldIsNotUndefined(docFieldValue);\n }\n\n return !fieldIsNotUndefined(docFieldValue);\n },\n\n '$mod': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && modField(docFieldValue, userValue);\n },\n\n '$ne': function (doc, userValue, parsedField, docFieldValue) {\n return userValue.every(function (neValue) {\n return collate(docFieldValue, neValue) !== 0;\n });\n },\n '$in': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && arrayContainsValue(docFieldValue, userValue);\n },\n\n '$nin': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && !arrayContainsValue(docFieldValue, userValue);\n },\n\n '$size': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && arraySize(docFieldValue, userValue);\n },\n\n '$all': function (doc, userValue, parsedField, docFieldValue) {\n return Array.isArray(docFieldValue) && arrayContainsAllValues(docFieldValue, userValue);\n },\n\n '$regex': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && regexMatch(docFieldValue, userValue);\n },\n\n '$type': function (doc, userValue, parsedField, docFieldValue) {\n return typeMatch(docFieldValue, userValue);\n }\n};\n\n// return true if the given doc matches the supplied selector\nfunction matchesSelector(doc, selector) {\n /* istanbul ignore if */\n if (typeof selector !== 'object') {\n // match the CouchDB error message\n throw new Error('Selector error: expected a JSON object');\n }\n\n selector = massageSelector(selector);\n var row = {\n 'doc': doc\n };\n\n var rowsMatched = filterInMemoryFields([row], { 'selector': selector }, Object.keys(selector));\n return rowsMatched && rowsMatched.length === 1;\n}\n\nfunction evalFilter(input) {\n return scopeEval('\"use strict\";\\nreturn ' + input + ';', {});\n}\n\nfunction evalView(input) {\n var code = [\n 'return function(doc) {',\n ' \"use strict\";',\n ' var emitted = false;',\n ' var emit = function (a, b) {',\n ' emitted = true;',\n ' };',\n ' var view = ' + input + ';',\n ' view(doc);',\n ' if (emitted) {',\n ' return true;',\n ' }',\n '};'\n ].join('\\n');\n\n return scopeEval(code, {});\n}\n\nfunction validate(opts, callback) {\n if (opts.selector) {\n if (opts.filter && opts.filter !== '_selector') {\n var filterName = typeof opts.filter === 'string' ?\n opts.filter : 'function';\n return callback(new Error('selector invalid for filter \"' + filterName + '\"'));\n }\n }\n callback();\n}\n\nfunction normalize(opts) {\n if (opts.view && !opts.filter) {\n opts.filter = '_view';\n }\n\n if (opts.selector && !opts.filter) {\n opts.filter = '_selector';\n }\n\n if (opts.filter && typeof opts.filter === 'string') {\n if (opts.filter === '_view') {\n opts.view = normalizeDesignDocFunctionName(opts.view);\n } else {\n opts.filter = normalizeDesignDocFunctionName(opts.filter);\n }\n }\n}\n\nfunction shouldFilter(changesHandler, opts) {\n return opts.filter && typeof opts.filter === 'string' &&\n !opts.doc_ids && !isRemote(changesHandler.db);\n}\n\nfunction filter(changesHandler, opts) {\n var callback = opts.complete;\n if (opts.filter === '_view') {\n if (!opts.view || typeof opts.view !== 'string') {\n var err = createError(BAD_REQUEST,\n '`view` filter parameter not found or invalid.');\n return callback(err);\n }\n // fetch a view from a design doc, make it behave like a filter\n var viewName = parseDesignDocFunctionName(opts.view);\n changesHandler.db.get('_design/' + viewName[0], function (err, ddoc) {\n /* istanbul ignore if */\n if (changesHandler.isCancelled) {\n return callback(null, {status: 'cancelled'});\n }\n /* istanbul ignore next */\n if (err) {\n return callback(generateErrorFromResponse(err));\n }\n var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] &&\n ddoc.views[viewName[1]].map;\n if (!mapFun) {\n return callback(createError(MISSING_DOC,\n (ddoc.views ? 'missing json key: ' + viewName[1] :\n 'missing json key: views')));\n }\n opts.filter = evalView(mapFun);\n changesHandler.doChanges(opts);\n });\n } else if (opts.selector) {\n opts.filter = function (doc) {\n return matchesSelector(doc, opts.selector);\n };\n changesHandler.doChanges(opts);\n } else {\n // fetch a filter from a design doc\n var filterName = parseDesignDocFunctionName(opts.filter);\n changesHandler.db.get('_design/' + filterName[0], function (err, ddoc) {\n /* istanbul ignore if */\n if (changesHandler.isCancelled) {\n return callback(null, {status: 'cancelled'});\n }\n /* istanbul ignore next */\n if (err) {\n return callback(generateErrorFromResponse(err));\n }\n var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]];\n if (!filterFun) {\n return callback(createError(MISSING_DOC,\n ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1]\n : 'missing json key: filters')));\n }\n opts.filter = evalFilter(filterFun);\n changesHandler.doChanges(opts);\n });\n }\n}\n\nfunction applyChangesFilterPlugin(PouchDB) {\n PouchDB._changesFilterPlugin = {\n validate: validate,\n normalize: normalize,\n shouldFilter: shouldFilter,\n filter: filter\n };\n}\n\n// TODO: remove from pouchdb-core (breaking)\nPouchDB.plugin(applyChangesFilterPlugin);\n\nPouchDB.version = version;\n\nfunction toObject(array) {\n return array.reduce(function (obj, item) {\n obj[item] = true;\n return obj;\n }, {});\n}\n// List of top level reserved words for doc\nvar reservedWords = toObject([\n '_id',\n '_rev',\n '_attachments',\n '_deleted',\n '_revisions',\n '_revs_info',\n '_conflicts',\n '_deleted_conflicts',\n '_local_seq',\n '_rev_tree',\n //replication documents\n '_replication_id',\n '_replication_state',\n '_replication_state_time',\n '_replication_state_reason',\n '_replication_stats',\n // Specific to Couchbase Sync Gateway\n '_removed'\n]);\n\n// List of reserved words that should end up the document\nvar dataWords = toObject([\n '_attachments',\n //replication documents\n '_replication_id',\n '_replication_state',\n '_replication_state_time',\n '_replication_state_reason',\n '_replication_stats'\n]);\n\nfunction parseRevisionInfo(rev) {\n if (!/^\\d+-./.test(rev)) {\n return createError(INVALID_REV);\n }\n var idx = rev.indexOf('-');\n var left = rev.substring(0, idx);\n var right = rev.substring(idx + 1);\n return {\n prefix: parseInt(left, 10),\n id: right\n };\n}\n\nfunction makeRevTreeFromRevisions(revisions, opts) {\n var pos = revisions.start - revisions.ids.length + 1;\n\n var revisionIds = revisions.ids;\n var ids = [revisionIds[0], opts, []];\n\n for (var i = 1, len = revisionIds.length; i < len; i++) {\n ids = [revisionIds[i], {status: 'missing'}, [ids]];\n }\n\n return [{\n pos: pos,\n ids: ids\n }];\n}\n\n// Preprocess documents, parse their revisions, assign an id and a\n// revision for new writes that are missing them, etc\nfunction parseDoc(doc, newEdits, dbOpts) {\n if (!dbOpts) {\n dbOpts = {\n deterministic_revs: true\n };\n }\n\n var nRevNum;\n var newRevId;\n var revInfo;\n var opts = {status: 'available'};\n if (doc._deleted) {\n opts.deleted = true;\n }\n\n if (newEdits) {\n if (!doc._id) {\n doc._id = uuid();\n }\n newRevId = rev$$1(doc, dbOpts.deterministic_revs);\n if (doc._rev) {\n revInfo = parseRevisionInfo(doc._rev);\n if (revInfo.error) {\n return revInfo;\n }\n doc._rev_tree = [{\n pos: revInfo.prefix,\n ids: [revInfo.id, {status: 'missing'}, [[newRevId, opts, []]]]\n }];\n nRevNum = revInfo.prefix + 1;\n } else {\n doc._rev_tree = [{\n pos: 1,\n ids : [newRevId, opts, []]\n }];\n nRevNum = 1;\n }\n } else {\n if (doc._revisions) {\n doc._rev_tree = makeRevTreeFromRevisions(doc._revisions, opts);\n nRevNum = doc._revisions.start;\n newRevId = doc._revisions.ids[0];\n }\n if (!doc._rev_tree) {\n revInfo = parseRevisionInfo(doc._rev);\n if (revInfo.error) {\n return revInfo;\n }\n nRevNum = revInfo.prefix;\n newRevId = revInfo.id;\n doc._rev_tree = [{\n pos: nRevNum,\n ids: [newRevId, opts, []]\n }];\n }\n }\n\n invalidIdError(doc._id);\n\n doc._rev = nRevNum + '-' + newRevId;\n\n var result = {metadata : {}, data : {}};\n for (var key in doc) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(doc, key)) {\n var specialKey = key[0] === '_';\n if (specialKey && !reservedWords[key]) {\n var error = createError(DOC_VALIDATION, key);\n error.message = DOC_VALIDATION.message + ': ' + key;\n throw error;\n } else if (specialKey && !dataWords[key]) {\n result.metadata[key.slice(1)] = doc[key];\n } else {\n result.data[key] = doc[key];\n }\n }\n }\n return result;\n}\n\nfunction parseBase64(data) {\n try {\n return thisAtob(data);\n } catch (e) {\n var err = createError(BAD_ARG,\n 'Attachment is not a valid base64 string');\n return {error: err};\n }\n}\n\nfunction preprocessString(att, blobType, callback) {\n var asBinary = parseBase64(att.data);\n if (asBinary.error) {\n return callback(asBinary.error);\n }\n\n att.length = asBinary.length;\n if (blobType === 'blob') {\n att.data = binStringToBluffer(asBinary, att.content_type);\n } else if (blobType === 'base64') {\n att.data = thisBtoa(asBinary);\n } else { // binary\n att.data = asBinary;\n }\n binaryMd5(asBinary, function (result) {\n att.digest = 'md5-' + result;\n callback();\n });\n}\n\nfunction preprocessBlob(att, blobType, callback) {\n binaryMd5(att.data, function (md5) {\n att.digest = 'md5-' + md5;\n // size is for blobs (browser), length is for buffers (node)\n att.length = att.data.size || att.data.length || 0;\n if (blobType === 'binary') {\n blobToBinaryString(att.data, function (binString) {\n att.data = binString;\n callback();\n });\n } else if (blobType === 'base64') {\n blobToBase64(att.data, function (b64) {\n att.data = b64;\n callback();\n });\n } else {\n callback();\n }\n });\n}\n\nfunction preprocessAttachment(att, blobType, callback) {\n if (att.stub) {\n return callback();\n }\n if (typeof att.data === 'string') { // input is a base64 string\n preprocessString(att, blobType, callback);\n } else { // input is a blob\n preprocessBlob(att, blobType, callback);\n }\n}\n\nfunction preprocessAttachments(docInfos, blobType, callback) {\n\n if (!docInfos.length) {\n return callback();\n }\n\n var docv = 0;\n var overallErr;\n\n docInfos.forEach(function (docInfo) {\n var attachments = docInfo.data && docInfo.data._attachments ?\n Object.keys(docInfo.data._attachments) : [];\n var recv = 0;\n\n if (!attachments.length) {\n return done();\n }\n\n function processedAttachment(err) {\n overallErr = err;\n recv++;\n if (recv === attachments.length) {\n done();\n }\n }\n\n for (var key in docInfo.data._attachments) {\n if (docInfo.data._attachments.hasOwnProperty(key)) {\n preprocessAttachment(docInfo.data._attachments[key],\n blobType, processedAttachment);\n }\n }\n });\n\n function done() {\n docv++;\n if (docInfos.length === docv) {\n if (overallErr) {\n callback(overallErr);\n } else {\n callback();\n }\n }\n }\n}\n\nfunction updateDoc(revLimit, prev, docInfo, results,\n i, cb, writeDoc, newEdits) {\n\n if (revExists(prev.rev_tree, docInfo.metadata.rev) && !newEdits) {\n results[i] = docInfo;\n return cb();\n }\n\n // sometimes this is pre-calculated. historically not always\n var previousWinningRev = prev.winningRev || winningRev(prev);\n var previouslyDeleted = 'deleted' in prev ? prev.deleted :\n isDeleted(prev, previousWinningRev);\n var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :\n isDeleted(docInfo.metadata);\n var isRoot = /^1-/.test(docInfo.metadata.rev);\n\n if (previouslyDeleted && !deleted && newEdits && isRoot) {\n var newDoc = docInfo.data;\n newDoc._rev = previousWinningRev;\n newDoc._id = docInfo.metadata.id;\n docInfo = parseDoc(newDoc, newEdits);\n }\n\n var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);\n\n var inConflict = newEdits && ((\n (previouslyDeleted && deleted && merged.conflicts !== 'new_leaf') ||\n (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||\n (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));\n\n if (inConflict) {\n var err = createError(REV_CONFLICT);\n results[i] = err;\n return cb();\n }\n\n var newRev = docInfo.metadata.rev;\n docInfo.metadata.rev_tree = merged.tree;\n docInfo.stemmedRevs = merged.stemmedRevs || [];\n /* istanbul ignore else */\n if (prev.rev_map) {\n docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb\n }\n\n // recalculate\n var winningRev$$1 = winningRev(docInfo.metadata);\n var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$$1);\n\n // calculate the total number of documents that were added/removed,\n // from the perspective of total_rows/doc_count\n var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :\n previouslyDeleted < winningRevIsDeleted ? -1 : 1;\n\n var newRevIsDeleted;\n if (newRev === winningRev$$1) {\n // if the new rev is the same as the winning rev, we can reuse that value\n newRevIsDeleted = winningRevIsDeleted;\n } else {\n // if they're not the same, then we need to recalculate\n newRevIsDeleted = isDeleted(docInfo.metadata, newRev);\n }\n\n writeDoc(docInfo, winningRev$$1, winningRevIsDeleted, newRevIsDeleted,\n true, delta, i, cb);\n}\n\nfunction rootIsMissing(docInfo) {\n return docInfo.metadata.rev_tree[0].ids[1].status === 'missing';\n}\n\nfunction processDocs(revLimit, docInfos, api, fetchedDocs, tx, results,\n writeDoc, opts, overallCallback) {\n\n // Default to 1000 locally\n revLimit = revLimit || 1000;\n\n function insertDoc(docInfo, resultsIdx, callback) {\n // Cant insert new deleted documents\n var winningRev$$1 = winningRev(docInfo.metadata);\n var deleted = isDeleted(docInfo.metadata, winningRev$$1);\n if ('was_delete' in opts && deleted) {\n results[resultsIdx] = createError(MISSING_DOC, 'deleted');\n return callback();\n }\n\n // 4712 - detect whether a new document was inserted with a _rev\n var inConflict = newEdits && rootIsMissing(docInfo);\n\n if (inConflict) {\n var err = createError(REV_CONFLICT);\n results[resultsIdx] = err;\n return callback();\n }\n\n var delta = deleted ? 0 : 1;\n\n writeDoc(docInfo, winningRev$$1, deleted, deleted, false,\n delta, resultsIdx, callback);\n }\n\n var newEdits = opts.new_edits;\n var idsToDocs = new ExportedMap();\n\n var docsDone = 0;\n var docsToDo = docInfos.length;\n\n function checkAllDocsDone() {\n if (++docsDone === docsToDo && overallCallback) {\n overallCallback();\n }\n }\n\n docInfos.forEach(function (currentDoc, resultsIdx) {\n\n if (currentDoc._id && isLocalId(currentDoc._id)) {\n var fun = currentDoc._deleted ? '_removeLocal' : '_putLocal';\n api[fun](currentDoc, {ctx: tx}, function (err, res) {\n results[resultsIdx] = err || res;\n checkAllDocsDone();\n });\n return;\n }\n\n var id = currentDoc.metadata.id;\n if (idsToDocs.has(id)) {\n docsToDo--; // duplicate\n idsToDocs.get(id).push([currentDoc, resultsIdx]);\n } else {\n idsToDocs.set(id, [[currentDoc, resultsIdx]]);\n }\n });\n\n // in the case of new_edits, the user can provide multiple docs\n // with the same id. these need to be processed sequentially\n idsToDocs.forEach(function (docs, id) {\n var numDone = 0;\n\n function docWritten() {\n if (++numDone < docs.length) {\n nextDoc();\n } else {\n checkAllDocsDone();\n }\n }\n function nextDoc() {\n var value = docs[numDone];\n var currentDoc = value[0];\n var resultsIdx = value[1];\n\n if (fetchedDocs.has(id)) {\n updateDoc(revLimit, fetchedDocs.get(id), currentDoc, results,\n resultsIdx, docWritten, writeDoc, newEdits);\n } else {\n // Ensure stemming applies to new writes as well\n var merged = merge([], currentDoc.metadata.rev_tree[0], revLimit);\n currentDoc.metadata.rev_tree = merged.tree;\n currentDoc.stemmedRevs = merged.stemmedRevs || [];\n insertDoc(currentDoc, resultsIdx, docWritten);\n }\n }\n nextDoc();\n });\n}\n\n// IndexedDB requires a versioned database structure, so we use the\n// version here to manage migrations.\nvar ADAPTER_VERSION = 5;\n\n// The object stores created for each database\n// DOC_STORE stores the document meta data, its revision history and state\n// Keyed by document id\nvar DOC_STORE = 'document-store';\n// BY_SEQ_STORE stores a particular version of a document, keyed by its\n// sequence id\nvar BY_SEQ_STORE = 'by-sequence';\n// Where we store attachments\nvar ATTACH_STORE = 'attach-store';\n// Where we store many-to-many relations\n// between attachment digests and seqs\nvar ATTACH_AND_SEQ_STORE = 'attach-seq-store';\n\n// Where we store database-wide meta data in a single record\n// keyed by id: META_STORE\nvar META_STORE = 'meta-store';\n// Where we store local documents\nvar LOCAL_STORE = 'local-store';\n// Where we detect blob support\nvar DETECT_BLOB_SUPPORT_STORE = 'detect-blob-support';\n\nfunction safeJsonParse(str) {\n // This try/catch guards against stack overflow errors.\n // JSON.parse() is faster than vuvuzela.parse() but vuvuzela\n // cannot overflow.\n try {\n return JSON.parse(str);\n } catch (e) {\n /* istanbul ignore next */\n return vuvuzela.parse(str);\n }\n}\n\nfunction safeJsonStringify(json) {\n try {\n return JSON.stringify(json);\n } catch (e) {\n /* istanbul ignore next */\n return vuvuzela.stringify(json);\n }\n}\n\nfunction idbError(callback) {\n return function (evt) {\n var message = 'unknown_error';\n if (evt.target && evt.target.error) {\n message = evt.target.error.name || evt.target.error.message;\n }\n callback(createError(IDB_ERROR, message, evt.type));\n };\n}\n\n// Unfortunately, the metadata has to be stringified\n// when it is put into the database, because otherwise\n// IndexedDB can throw errors for deeply-nested objects.\n// Originally we just used JSON.parse/JSON.stringify; now\n// we use this custom vuvuzela library that avoids recursion.\n// If we could do it all over again, we'd probably use a\n// format for the revision trees other than JSON.\nfunction encodeMetadata(metadata, winningRev, deleted) {\n return {\n data: safeJsonStringify(metadata),\n winningRev: winningRev,\n deletedOrLocal: deleted ? '1' : '0',\n seq: metadata.seq, // highest seq for this doc\n id: metadata.id\n };\n}\n\nfunction decodeMetadata(storedObject) {\n if (!storedObject) {\n return null;\n }\n var metadata = safeJsonParse(storedObject.data);\n metadata.winningRev = storedObject.winningRev;\n metadata.deleted = storedObject.deletedOrLocal === '1';\n metadata.seq = storedObject.seq;\n return metadata;\n}\n\n// read the doc back out from the database. we don't store the\n// _id or _rev because we already have _doc_id_rev.\nfunction decodeDoc(doc) {\n if (!doc) {\n return doc;\n }\n var idx = doc._doc_id_rev.lastIndexOf(':');\n doc._id = doc._doc_id_rev.substring(0, idx - 1);\n doc._rev = doc._doc_id_rev.substring(idx + 1);\n delete doc._doc_id_rev;\n return doc;\n}\n\n// Read a blob from the database, encoding as necessary\n// and translating from base64 if the IDB doesn't support\n// native Blobs\nfunction readBlobData(body, type, asBlob, callback) {\n if (asBlob) {\n if (!body) {\n callback(createBlob([''], {type: type}));\n } else if (typeof body !== 'string') { // we have blob support\n callback(body);\n } else { // no blob support\n callback(b64ToBluffer(body, type));\n }\n } else { // as base64 string\n if (!body) {\n callback('');\n } else if (typeof body !== 'string') { // we have blob support\n readAsBinaryString(body, function (binary) {\n callback(thisBtoa(binary));\n });\n } else { // no blob support\n callback(body);\n }\n }\n}\n\nfunction fetchAttachmentsIfNecessary(doc, opts, txn, cb) {\n var attachments = Object.keys(doc._attachments || {});\n if (!attachments.length) {\n return cb && cb();\n }\n var numDone = 0;\n\n function checkDone() {\n if (++numDone === attachments.length && cb) {\n cb();\n }\n }\n\n function fetchAttachment(doc, att) {\n var attObj = doc._attachments[att];\n var digest = attObj.digest;\n var req = txn.objectStore(ATTACH_STORE).get(digest);\n req.onsuccess = function (e) {\n attObj.body = e.target.result.body;\n checkDone();\n };\n }\n\n attachments.forEach(function (att) {\n if (opts.attachments && opts.include_docs) {\n fetchAttachment(doc, att);\n } else {\n doc._attachments[att].stub = true;\n checkDone();\n }\n });\n}\n\n// IDB-specific postprocessing necessary because\n// we don't know whether we stored a true Blob or\n// a base64-encoded string, and if it's a Blob it\n// needs to be read outside of the transaction context\nfunction postProcessAttachments(results, asBlob) {\n return Promise.all(results.map(function (row) {\n if (row.doc && row.doc._attachments) {\n var attNames = Object.keys(row.doc._attachments);\n return Promise.all(attNames.map(function (att) {\n var attObj = row.doc._attachments[att];\n if (!('body' in attObj)) { // already processed\n return;\n }\n var body = attObj.body;\n var type = attObj.content_type;\n return new Promise(function (resolve) {\n readBlobData(body, type, asBlob, function (data) {\n row.doc._attachments[att] = $inject_Object_assign(\n pick(attObj, ['digest', 'content_type']),\n {data: data}\n );\n resolve();\n });\n });\n }));\n }\n }));\n}\n\nfunction compactRevs(revs, docId, txn) {\n\n var possiblyOrphanedDigests = [];\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n var attStore = txn.objectStore(ATTACH_STORE);\n var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n var count = revs.length;\n\n function checkDone() {\n count--;\n if (!count) { // done processing all revs\n deleteOrphanedAttachments();\n }\n }\n\n function deleteOrphanedAttachments() {\n if (!possiblyOrphanedDigests.length) {\n return;\n }\n possiblyOrphanedDigests.forEach(function (digest) {\n var countReq = attAndSeqStore.index('digestSeq').count(\n IDBKeyRange.bound(\n digest + '::', digest + '::\\uffff', false, false));\n countReq.onsuccess = function (e) {\n var count = e.target.result;\n if (!count) {\n // orphaned\n attStore.delete(digest);\n }\n };\n });\n }\n\n revs.forEach(function (rev) {\n var index = seqStore.index('_doc_id_rev');\n var key = docId + \"::\" + rev;\n index.getKey(key).onsuccess = function (e) {\n var seq = e.target.result;\n if (typeof seq !== 'number') {\n return checkDone();\n }\n seqStore.delete(seq);\n\n var cursor = attAndSeqStore.index('seq')\n .openCursor(IDBKeyRange.only(seq));\n\n cursor.onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n var digest = cursor.value.digestSeq.split('::')[0];\n possiblyOrphanedDigests.push(digest);\n attAndSeqStore.delete(cursor.primaryKey);\n cursor.continue();\n } else { // done\n checkDone();\n }\n };\n };\n });\n}\n\nfunction openTransactionSafely(idb, stores, mode) {\n try {\n return {\n txn: idb.transaction(stores, mode)\n };\n } catch (err) {\n return {\n error: err\n };\n }\n}\n\nvar changesHandler = new Changes();\n\nfunction idbBulkDocs(dbOpts, req, opts, api, idb, callback) {\n var docInfos = req.docs;\n var txn;\n var docStore;\n var bySeqStore;\n var attachStore;\n var attachAndSeqStore;\n var metaStore;\n var docInfoError;\n var metaDoc;\n\n for (var i = 0, len = docInfos.length; i < len; i++) {\n var doc = docInfos[i];\n if (doc._id && isLocalId(doc._id)) {\n continue;\n }\n doc = docInfos[i] = parseDoc(doc, opts.new_edits, dbOpts);\n if (doc.error && !docInfoError) {\n docInfoError = doc;\n }\n }\n\n if (docInfoError) {\n return callback(docInfoError);\n }\n\n var allDocsProcessed = false;\n var docCountDelta = 0;\n var results = new Array(docInfos.length);\n var fetchedDocs = new ExportedMap();\n var preconditionErrored = false;\n var blobType = api._meta.blobSupport ? 'blob' : 'base64';\n\n preprocessAttachments(docInfos, blobType, function (err) {\n if (err) {\n return callback(err);\n }\n startTransaction();\n });\n\n function startTransaction() {\n\n var stores = [\n DOC_STORE, BY_SEQ_STORE,\n ATTACH_STORE,\n LOCAL_STORE, ATTACH_AND_SEQ_STORE,\n META_STORE\n ];\n var txnResult = openTransactionSafely(idb, stores, 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n txn = txnResult.txn;\n txn.onabort = idbError(callback);\n txn.ontimeout = idbError(callback);\n txn.oncomplete = complete;\n docStore = txn.objectStore(DOC_STORE);\n bySeqStore = txn.objectStore(BY_SEQ_STORE);\n attachStore = txn.objectStore(ATTACH_STORE);\n attachAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n metaStore = txn.objectStore(META_STORE);\n\n metaStore.get(META_STORE).onsuccess = function (e) {\n metaDoc = e.target.result;\n updateDocCountIfReady();\n };\n\n verifyAttachments(function (err) {\n if (err) {\n preconditionErrored = true;\n return callback(err);\n }\n fetchExistingDocs();\n });\n }\n\n function onAllDocsProcessed() {\n allDocsProcessed = true;\n updateDocCountIfReady();\n }\n\n function idbProcessDocs() {\n processDocs(dbOpts.revs_limit, docInfos, api, fetchedDocs,\n txn, results, writeDoc, opts, onAllDocsProcessed);\n }\n\n function updateDocCountIfReady() {\n if (!metaDoc || !allDocsProcessed) {\n return;\n }\n // caching the docCount saves a lot of time in allDocs() and\n // info(), which is why we go to all the trouble of doing this\n metaDoc.docCount += docCountDelta;\n metaStore.put(metaDoc);\n }\n\n function fetchExistingDocs() {\n\n if (!docInfos.length) {\n return;\n }\n\n var numFetched = 0;\n\n function checkDone() {\n if (++numFetched === docInfos.length) {\n idbProcessDocs();\n }\n }\n\n function readMetadata(event) {\n var metadata = decodeMetadata(event.target.result);\n\n if (metadata) {\n fetchedDocs.set(metadata.id, metadata);\n }\n checkDone();\n }\n\n for (var i = 0, len = docInfos.length; i < len; i++) {\n var docInfo = docInfos[i];\n if (docInfo._id && isLocalId(docInfo._id)) {\n checkDone(); // skip local docs\n continue;\n }\n var req = docStore.get(docInfo.metadata.id);\n req.onsuccess = readMetadata;\n }\n }\n\n function complete() {\n if (preconditionErrored) {\n return;\n }\n\n changesHandler.notify(api._meta.name);\n callback(null, results);\n }\n\n function verifyAttachment(digest, callback) {\n\n var req = attachStore.get(digest);\n req.onsuccess = function (e) {\n if (!e.target.result) {\n var err = createError(MISSING_STUB,\n 'unknown stub attachment with digest ' +\n digest);\n err.status = 412;\n callback(err);\n } else {\n callback();\n }\n };\n }\n\n function verifyAttachments(finish) {\n\n\n var digests = [];\n docInfos.forEach(function (docInfo) {\n if (docInfo.data && docInfo.data._attachments) {\n Object.keys(docInfo.data._attachments).forEach(function (filename) {\n var att = docInfo.data._attachments[filename];\n if (att.stub) {\n digests.push(att.digest);\n }\n });\n }\n });\n if (!digests.length) {\n return finish();\n }\n var numDone = 0;\n var err;\n\n function checkDone() {\n if (++numDone === digests.length) {\n finish(err);\n }\n }\n digests.forEach(function (digest) {\n verifyAttachment(digest, function (attErr) {\n if (attErr && !err) {\n err = attErr;\n }\n checkDone();\n });\n });\n }\n\n function writeDoc(docInfo, winningRev$$1, winningRevIsDeleted, newRevIsDeleted,\n isUpdate, delta, resultsIdx, callback) {\n\n docInfo.metadata.winningRev = winningRev$$1;\n docInfo.metadata.deleted = winningRevIsDeleted;\n\n var doc = docInfo.data;\n doc._id = docInfo.metadata.id;\n doc._rev = docInfo.metadata.rev;\n\n if (newRevIsDeleted) {\n doc._deleted = true;\n }\n\n var hasAttachments = doc._attachments &&\n Object.keys(doc._attachments).length;\n if (hasAttachments) {\n return writeAttachments(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback);\n }\n\n docCountDelta += delta;\n updateDocCountIfReady();\n\n finishDoc(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback);\n }\n\n function finishDoc(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback) {\n\n var doc = docInfo.data;\n var metadata = docInfo.metadata;\n\n doc._doc_id_rev = metadata.id + '::' + metadata.rev;\n delete doc._id;\n delete doc._rev;\n\n function afterPutDoc(e) {\n var revsToDelete = docInfo.stemmedRevs || [];\n\n if (isUpdate && api.auto_compaction) {\n revsToDelete = revsToDelete.concat(compactTree(docInfo.metadata));\n }\n\n if (revsToDelete && revsToDelete.length) {\n compactRevs(revsToDelete, docInfo.metadata.id, txn);\n }\n\n metadata.seq = e.target.result;\n // Current _rev is calculated from _rev_tree on read\n // delete metadata.rev;\n var metadataToStore = encodeMetadata(metadata, winningRev$$1,\n winningRevIsDeleted);\n var metaDataReq = docStore.put(metadataToStore);\n metaDataReq.onsuccess = afterPutMetadata;\n }\n\n function afterPutDocError(e) {\n // ConstraintError, need to update, not put (see #1638 for details)\n e.preventDefault(); // avoid transaction abort\n e.stopPropagation(); // avoid transaction onerror\n var index = bySeqStore.index('_doc_id_rev');\n var getKeyReq = index.getKey(doc._doc_id_rev);\n getKeyReq.onsuccess = function (e) {\n var putReq = bySeqStore.put(doc, e.target.result);\n putReq.onsuccess = afterPutDoc;\n };\n }\n\n function afterPutMetadata() {\n results[resultsIdx] = {\n ok: true,\n id: metadata.id,\n rev: metadata.rev\n };\n fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);\n insertAttachmentMappings(docInfo, metadata.seq, callback);\n }\n\n var putReq = bySeqStore.put(doc);\n\n putReq.onsuccess = afterPutDoc;\n putReq.onerror = afterPutDocError;\n }\n\n function writeAttachments(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback) {\n\n\n var doc = docInfo.data;\n\n var numDone = 0;\n var attachments = Object.keys(doc._attachments);\n\n function collectResults() {\n if (numDone === attachments.length) {\n finishDoc(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback);\n }\n }\n\n function attachmentSaved() {\n numDone++;\n collectResults();\n }\n\n attachments.forEach(function (key) {\n var att = docInfo.data._attachments[key];\n if (!att.stub) {\n var data = att.data;\n delete att.data;\n att.revpos = parseInt(winningRev$$1, 10);\n var digest = att.digest;\n saveAttachment(digest, data, attachmentSaved);\n } else {\n numDone++;\n collectResults();\n }\n });\n }\n\n // map seqs to attachment digests, which\n // we will need later during compaction\n function insertAttachmentMappings(docInfo, seq, callback) {\n\n var attsAdded = 0;\n var attsToAdd = Object.keys(docInfo.data._attachments || {});\n\n if (!attsToAdd.length) {\n return callback();\n }\n\n function checkDone() {\n if (++attsAdded === attsToAdd.length) {\n callback();\n }\n }\n\n function add(att) {\n var digest = docInfo.data._attachments[att].digest;\n var req = attachAndSeqStore.put({\n seq: seq,\n digestSeq: digest + '::' + seq\n });\n\n req.onsuccess = checkDone;\n req.onerror = function (e) {\n // this callback is for a constaint error, which we ignore\n // because this docid/rev has already been associated with\n // the digest (e.g. when new_edits == false)\n e.preventDefault(); // avoid transaction abort\n e.stopPropagation(); // avoid transaction onerror\n checkDone();\n };\n }\n for (var i = 0; i < attsToAdd.length; i++) {\n add(attsToAdd[i]); // do in parallel\n }\n }\n\n function saveAttachment(digest, data, callback) {\n\n\n var getKeyReq = attachStore.count(digest);\n getKeyReq.onsuccess = function (e) {\n var count = e.target.result;\n if (count) {\n return callback(); // already exists\n }\n var newAtt = {\n digest: digest,\n body: data\n };\n var putReq = attachStore.put(newAtt);\n putReq.onsuccess = callback;\n };\n }\n}\n\n// Abstraction over IDBCursor and getAll()/getAllKeys() that allows us to batch our operations\n// while falling back to a normal IDBCursor operation on browsers that don't support getAll() or\n// getAllKeys(). This allows for a much faster implementation than just straight-up cursors, because\n// we're not processing each document one-at-a-time.\nfunction runBatchedCursor(objectStore, keyRange, descending, batchSize, onBatch) {\n\n if (batchSize === -1) {\n batchSize = 1000;\n }\n\n // Bail out of getAll()/getAllKeys() in the following cases:\n // 1) either method is unsupported - we need both\n // 2) batchSize is 1 (might as well use IDBCursor)\n // 3) descending no real way to do this via getAll()/getAllKeys()\n\n var useGetAll = typeof objectStore.getAll === 'function' &&\n typeof objectStore.getAllKeys === 'function' &&\n batchSize > 1 && !descending;\n\n var keysBatch;\n var valuesBatch;\n var pseudoCursor;\n\n function onGetAll(e) {\n valuesBatch = e.target.result;\n if (keysBatch) {\n onBatch(keysBatch, valuesBatch, pseudoCursor);\n }\n }\n\n function onGetAllKeys(e) {\n keysBatch = e.target.result;\n if (valuesBatch) {\n onBatch(keysBatch, valuesBatch, pseudoCursor);\n }\n }\n\n function continuePseudoCursor() {\n if (!keysBatch.length) { // no more results\n return onBatch();\n }\n // fetch next batch, exclusive start\n var lastKey = keysBatch[keysBatch.length - 1];\n var newKeyRange;\n if (keyRange && keyRange.upper) {\n try {\n newKeyRange = IDBKeyRange.bound(lastKey, keyRange.upper,\n true, keyRange.upperOpen);\n } catch (e) {\n if (e.name === \"DataError\" && e.code === 0) {\n return onBatch(); // we're done, startkey and endkey are equal\n }\n }\n } else {\n newKeyRange = IDBKeyRange.lowerBound(lastKey, true);\n }\n keyRange = newKeyRange;\n keysBatch = null;\n valuesBatch = null;\n objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;\n objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;\n }\n\n function onCursor(e) {\n var cursor = e.target.result;\n if (!cursor) { // done\n return onBatch();\n }\n // regular IDBCursor acts like a batch where batch size is always 1\n onBatch([cursor.key], [cursor.value], cursor);\n }\n\n if (useGetAll) {\n pseudoCursor = {\"continue\": continuePseudoCursor};\n objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;\n objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;\n } else if (descending) {\n objectStore.openCursor(keyRange, 'prev').onsuccess = onCursor;\n } else {\n objectStore.openCursor(keyRange).onsuccess = onCursor;\n }\n}\n\n// simple shim for objectStore.getAll(), falling back to IDBCursor\nfunction getAll(objectStore, keyRange, onSuccess) {\n if (typeof objectStore.getAll === 'function') {\n // use native getAll\n objectStore.getAll(keyRange).onsuccess = onSuccess;\n return;\n }\n // fall back to cursors\n var values = [];\n\n function onCursor(e) {\n var cursor = e.target.result;\n if (cursor) {\n values.push(cursor.value);\n cursor.continue();\n } else {\n onSuccess({\n target: {\n result: values\n }\n });\n }\n }\n\n objectStore.openCursor(keyRange).onsuccess = onCursor;\n}\n\nfunction allDocsKeys(keys, docStore, onBatch) {\n // It's not guaranted to be returned in right order \n var valuesBatch = new Array(keys.length);\n var count = 0;\n keys.forEach(function (key, index) {\n docStore.get(key).onsuccess = function (event) {\n if (event.target.result) {\n valuesBatch[index] = event.target.result;\n } else {\n valuesBatch[index] = {key: key, error: 'not_found'};\n }\n count++;\n if (count === keys.length) {\n onBatch(keys, valuesBatch, {});\n }\n };\n });\n}\n\nfunction createKeyRange(start, end, inclusiveEnd, key, descending) {\n try {\n if (start && end) {\n if (descending) {\n return IDBKeyRange.bound(end, start, !inclusiveEnd, false);\n } else {\n return IDBKeyRange.bound(start, end, false, !inclusiveEnd);\n }\n } else if (start) {\n if (descending) {\n return IDBKeyRange.upperBound(start);\n } else {\n return IDBKeyRange.lowerBound(start);\n }\n } else if (end) {\n if (descending) {\n return IDBKeyRange.lowerBound(end, !inclusiveEnd);\n } else {\n return IDBKeyRange.upperBound(end, !inclusiveEnd);\n }\n } else if (key) {\n return IDBKeyRange.only(key);\n }\n } catch (e) {\n return {error: e};\n }\n return null;\n}\n\nfunction idbAllDocs(opts, idb, callback) {\n var start = 'startkey' in opts ? opts.startkey : false;\n var end = 'endkey' in opts ? opts.endkey : false;\n var key = 'key' in opts ? opts.key : false;\n var keys = 'keys' in opts ? opts.keys : false; \n var skip = opts.skip || 0;\n var limit = typeof opts.limit === 'number' ? opts.limit : -1;\n var inclusiveEnd = opts.inclusive_end !== false;\n\n var keyRange ; \n var keyRangeError;\n if (!keys) {\n keyRange = createKeyRange(start, end, inclusiveEnd, key, opts.descending);\n keyRangeError = keyRange && keyRange.error;\n if (keyRangeError && \n !(keyRangeError.name === \"DataError\" && keyRangeError.code === 0)) {\n // DataError with error code 0 indicates start is less than end, so\n // can just do an empty query. Else need to throw\n return callback(createError(IDB_ERROR,\n keyRangeError.name, keyRangeError.message));\n }\n }\n\n var stores = [DOC_STORE, BY_SEQ_STORE, META_STORE];\n\n if (opts.attachments) {\n stores.push(ATTACH_STORE);\n }\n var txnResult = openTransactionSafely(idb, stores, 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n txn.oncomplete = onTxnComplete;\n txn.onabort = idbError(callback);\n var docStore = txn.objectStore(DOC_STORE);\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n var metaStore = txn.objectStore(META_STORE);\n var docIdRevIndex = seqStore.index('_doc_id_rev');\n var results = [];\n var docCount;\n var updateSeq;\n\n metaStore.get(META_STORE).onsuccess = function (e) {\n docCount = e.target.result.docCount;\n };\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n getMaxUpdateSeq(seqStore, function (e) { \n if (e.target.result && e.target.result.length > 0) {\n updateSeq = e.target.result[0];\n }\n });\n }\n\n function getMaxUpdateSeq(objectStore, onSuccess) {\n function onCursor(e) {\n var cursor = e.target.result;\n var maxKey = undefined;\n if (cursor && cursor.key) {\n maxKey = cursor.key;\n } \n return onSuccess({\n target: {\n result: [maxKey]\n }\n });\n }\n objectStore.openCursor(null, 'prev').onsuccess = onCursor;\n }\n\n // if the user specifies include_docs=true, then we don't\n // want to block the main cursor while we're fetching the doc\n function fetchDocAsynchronously(metadata, row, winningRev$$1) {\n var key = metadata.id + \"::\" + winningRev$$1;\n docIdRevIndex.get(key).onsuccess = function onGetDoc(e) {\n row.doc = decodeDoc(e.target.result) || {};\n if (opts.conflicts) {\n var conflicts = collectConflicts(metadata);\n if (conflicts.length) {\n row.doc._conflicts = conflicts;\n }\n }\n fetchAttachmentsIfNecessary(row.doc, opts, txn);\n };\n }\n\n function allDocsInner(winningRev$$1, metadata) {\n var row = {\n id: metadata.id,\n key: metadata.id,\n value: {\n rev: winningRev$$1\n }\n };\n var deleted = metadata.deleted;\n if (deleted) {\n if (keys) {\n results.push(row);\n // deleted docs are okay with \"keys\" requests\n row.value.deleted = true;\n row.doc = null;\n }\n } else if (skip-- <= 0) {\n results.push(row);\n if (opts.include_docs) {\n fetchDocAsynchronously(metadata, row, winningRev$$1);\n }\n }\n }\n\n function processBatch(batchValues) {\n for (var i = 0, len = batchValues.length; i < len; i++) {\n if (results.length === limit) {\n break;\n }\n var batchValue = batchValues[i];\n if (batchValue.error && keys) {\n // key was not found with \"keys\" requests\n results.push(batchValue);\n continue;\n }\n var metadata = decodeMetadata(batchValue);\n var winningRev$$1 = metadata.winningRev;\n allDocsInner(winningRev$$1, metadata);\n }\n }\n\n function onBatch(batchKeys, batchValues, cursor) {\n if (!cursor) {\n return;\n }\n processBatch(batchValues);\n if (results.length < limit) {\n cursor.continue();\n }\n }\n\n function onGetAll(e) {\n var values = e.target.result;\n if (opts.descending) {\n values = values.reverse();\n }\n processBatch(values);\n }\n\n function onResultsReady() {\n var returnVal = {\n total_rows: docCount,\n offset: opts.skip,\n rows: results\n };\n \n /* istanbul ignore if */\n if (opts.update_seq && updateSeq !== undefined) {\n returnVal.update_seq = updateSeq;\n }\n callback(null, returnVal);\n }\n\n function onTxnComplete() {\n if (opts.attachments) {\n postProcessAttachments(results, opts.binary).then(onResultsReady);\n } else {\n onResultsReady();\n }\n }\n\n // don't bother doing any requests if start > end or limit === 0\n if (keyRangeError || limit === 0) {\n return;\n }\n if (keys) {\n return allDocsKeys(opts.keys, docStore, onBatch);\n }\n if (limit === -1) { // just fetch everything\n return getAll(docStore, keyRange, onGetAll);\n }\n // else do a cursor\n // choose a batch size based on the skip, since we'll need to skip that many\n runBatchedCursor(docStore, keyRange, opts.descending, limit + skip, onBatch);\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\nfunction checkBlobSupport(txn) {\n return new Promise(function (resolve) {\n var blob$$1 = createBlob(['']);\n var req = txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob$$1, 'key');\n\n req.onsuccess = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome ||\n parseInt(matchedChrome[1], 10) >= 43);\n };\n\n req.onerror = txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n }).catch(function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction countDocs(txn, cb) {\n var index = txn.objectStore(DOC_STORE).index('deletedOrLocal');\n index.count(IDBKeyRange.only('0')).onsuccess = function (e) {\n cb(e.target.result);\n };\n}\n\n// This task queue ensures that IDB open calls are done in their own tick\n\nvar running = false;\nvar queue = [];\n\nfunction tryCode(fun, err, res, PouchDB) {\n try {\n fun(err, res);\n } catch (err) {\n // Shouldn't happen, but in some odd cases\n // IndexedDB implementations might throw a sync\n // error, in which case this will at least log it.\n PouchDB.emit('error', err);\n }\n}\n\nfunction applyNext() {\n if (running || !queue.length) {\n return;\n }\n running = true;\n queue.shift()();\n}\n\nfunction enqueueTask(action, callback, PouchDB) {\n queue.push(function runAction() {\n action(function runCallback(err, res) {\n tryCode(callback, err, res, PouchDB);\n running = false;\n nextTick(function runNext() {\n applyNext(PouchDB);\n });\n });\n });\n applyNext();\n}\n\nfunction changes(opts, api, dbName, idb) {\n opts = clone(opts);\n\n if (opts.continuous) {\n var id = dbName + ':' + uuid();\n changesHandler.addListener(dbName, id, api, opts);\n changesHandler.notify(dbName);\n return {\n cancel: function () {\n changesHandler.removeListener(dbName, id);\n }\n };\n }\n\n var docIds = opts.doc_ids && new ExportedSet(opts.doc_ids);\n\n opts.since = opts.since || 0;\n var lastSeq = opts.since;\n\n var limit = 'limit' in opts ? opts.limit : -1;\n if (limit === 0) {\n limit = 1; // per CouchDB _changes spec\n }\n\n var results = [];\n var numResults = 0;\n var filter = filterChange(opts);\n var docIdsToMetadata = new ExportedMap();\n\n var txn;\n var bySeqStore;\n var docStore;\n var docIdRevIndex;\n\n function onBatch(batchKeys, batchValues, cursor) {\n if (!cursor || !batchKeys.length) { // done\n return;\n }\n\n var winningDocs = new Array(batchKeys.length);\n var metadatas = new Array(batchKeys.length);\n\n function processMetadataAndWinningDoc(metadata, winningDoc) {\n var change = opts.processChange(winningDoc, metadata, opts);\n lastSeq = change.seq = metadata.seq;\n\n var filtered = filter(change);\n if (typeof filtered === 'object') { // anything but true/false indicates error\n return Promise.reject(filtered);\n }\n\n if (!filtered) {\n return Promise.resolve();\n }\n numResults++;\n if (opts.return_docs) {\n results.push(change);\n }\n // process the attachment immediately\n // for the benefit of live listeners\n if (opts.attachments && opts.include_docs) {\n return new Promise(function (resolve) {\n fetchAttachmentsIfNecessary(winningDoc, opts, txn, function () {\n postProcessAttachments([change], opts.binary).then(function () {\n resolve(change);\n });\n });\n });\n } else {\n return Promise.resolve(change);\n }\n }\n\n function onBatchDone() {\n var promises = [];\n for (var i = 0, len = winningDocs.length; i < len; i++) {\n if (numResults === limit) {\n break;\n }\n var winningDoc = winningDocs[i];\n if (!winningDoc) {\n continue;\n }\n var metadata = metadatas[i];\n promises.push(processMetadataAndWinningDoc(metadata, winningDoc));\n }\n\n Promise.all(promises).then(function (changes) {\n for (var i = 0, len = changes.length; i < len; i++) {\n if (changes[i]) {\n opts.onChange(changes[i]);\n }\n }\n }).catch(opts.complete);\n\n if (numResults !== limit) {\n cursor.continue();\n }\n }\n\n // Fetch all metadatas/winningdocs from this batch in parallel, then process\n // them all only once all data has been collected. This is done in parallel\n // because it's faster than doing it one-at-a-time.\n var numDone = 0;\n batchValues.forEach(function (value, i) {\n var doc = decodeDoc(value);\n var seq = batchKeys[i];\n fetchWinningDocAndMetadata(doc, seq, function (metadata, winningDoc) {\n metadatas[i] = metadata;\n winningDocs[i] = winningDoc;\n if (++numDone === batchKeys.length) {\n onBatchDone();\n }\n });\n });\n }\n\n function onGetMetadata(doc, seq, metadata, cb) {\n if (metadata.seq !== seq) {\n // some other seq is later\n return cb();\n }\n\n if (metadata.winningRev === doc._rev) {\n // this is the winning doc\n return cb(metadata, doc);\n }\n\n // fetch winning doc in separate request\n var docIdRev = doc._id + '::' + metadata.winningRev;\n var req = docIdRevIndex.get(docIdRev);\n req.onsuccess = function (e) {\n cb(metadata, decodeDoc(e.target.result));\n };\n }\n\n function fetchWinningDocAndMetadata(doc, seq, cb) {\n if (docIds && !docIds.has(doc._id)) {\n return cb();\n }\n\n var metadata = docIdsToMetadata.get(doc._id);\n if (metadata) { // cached\n return onGetMetadata(doc, seq, metadata, cb);\n }\n // metadata not cached, have to go fetch it\n docStore.get(doc._id).onsuccess = function (e) {\n metadata = decodeMetadata(e.target.result);\n docIdsToMetadata.set(doc._id, metadata);\n onGetMetadata(doc, seq, metadata, cb);\n };\n }\n\n function finish() {\n opts.complete(null, {\n results: results,\n last_seq: lastSeq\n });\n }\n\n function onTxnComplete() {\n if (!opts.continuous && opts.attachments) {\n // cannot guarantee that postProcessing was already done,\n // so do it again\n postProcessAttachments(results).then(finish);\n } else {\n finish();\n }\n }\n\n var objectStores = [DOC_STORE, BY_SEQ_STORE];\n if (opts.attachments) {\n objectStores.push(ATTACH_STORE);\n }\n var txnResult = openTransactionSafely(idb, objectStores, 'readonly');\n if (txnResult.error) {\n return opts.complete(txnResult.error);\n }\n txn = txnResult.txn;\n txn.onabort = idbError(opts.complete);\n txn.oncomplete = onTxnComplete;\n\n bySeqStore = txn.objectStore(BY_SEQ_STORE);\n docStore = txn.objectStore(DOC_STORE);\n docIdRevIndex = bySeqStore.index('_doc_id_rev');\n\n var keyRange = (opts.since && !opts.descending) ?\n IDBKeyRange.lowerBound(opts.since, true) : null;\n\n runBatchedCursor(bySeqStore, keyRange, opts.descending, limit, onBatch);\n}\n\nvar cachedDBs = new ExportedMap();\nvar blobSupportPromise;\nvar openReqList = new ExportedMap();\n\nfunction IdbPouch(opts, callback) {\n var api = this;\n\n enqueueTask(function (thisCallback) {\n init(api, opts, thisCallback);\n }, callback, api.constructor);\n}\n\nfunction init(api, opts, callback) {\n\n var dbName = opts.name;\n\n var idb = null;\n api._meta = null;\n\n // called when creating a fresh new database\n function createSchema(db) {\n var docStore = db.createObjectStore(DOC_STORE, {keyPath : 'id'});\n db.createObjectStore(BY_SEQ_STORE, {autoIncrement: true})\n .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});\n db.createObjectStore(ATTACH_STORE, {keyPath: 'digest'});\n db.createObjectStore(META_STORE, {keyPath: 'id', autoIncrement: false});\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n\n // added in v2\n docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});\n\n // added in v3\n db.createObjectStore(LOCAL_STORE, {keyPath: '_id'});\n\n // added in v4\n var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,\n {autoIncrement: true});\n attAndSeqStore.createIndex('seq', 'seq');\n attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});\n }\n\n // migration to version 2\n // unfortunately \"deletedOrLocal\" is a misnomer now that we no longer\n // store local docs in the main doc-store, but whaddyagonnado\n function addDeletedOrLocalIndex(txn, callback) {\n var docStore = txn.objectStore(DOC_STORE);\n docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});\n\n docStore.openCursor().onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n var metadata = cursor.value;\n var deleted = isDeleted(metadata);\n metadata.deletedOrLocal = deleted ? \"1\" : \"0\";\n docStore.put(metadata);\n cursor.continue();\n } else {\n callback();\n }\n };\n }\n\n // migration to version 3 (part 1)\n function createLocalStoreSchema(db) {\n db.createObjectStore(LOCAL_STORE, {keyPath: '_id'})\n .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});\n }\n\n // migration to version 3 (part 2)\n function migrateLocalStore(txn, cb) {\n var localStore = txn.objectStore(LOCAL_STORE);\n var docStore = txn.objectStore(DOC_STORE);\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n\n var cursor = docStore.openCursor();\n cursor.onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n var metadata = cursor.value;\n var docId = metadata.id;\n var local = isLocalId(docId);\n var rev = winningRev(metadata);\n if (local) {\n var docIdRev = docId + \"::\" + rev;\n // remove all seq entries\n // associated with this docId\n var start = docId + \"::\";\n var end = docId + \"::~\";\n var index = seqStore.index('_doc_id_rev');\n var range = IDBKeyRange.bound(start, end, false, false);\n var seqCursor = index.openCursor(range);\n seqCursor.onsuccess = function (e) {\n seqCursor = e.target.result;\n if (!seqCursor) {\n // done\n docStore.delete(cursor.primaryKey);\n cursor.continue();\n } else {\n var data = seqCursor.value;\n if (data._doc_id_rev === docIdRev) {\n localStore.put(data);\n }\n seqStore.delete(seqCursor.primaryKey);\n seqCursor.continue();\n }\n };\n } else {\n cursor.continue();\n }\n } else if (cb) {\n cb();\n }\n };\n }\n\n // migration to version 4 (part 1)\n function addAttachAndSeqStore(db) {\n var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,\n {autoIncrement: true});\n attAndSeqStore.createIndex('seq', 'seq');\n attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});\n }\n\n // migration to version 4 (part 2)\n function migrateAttsAndSeqs(txn, callback) {\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n var attStore = txn.objectStore(ATTACH_STORE);\n var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n\n // need to actually populate the table. this is the expensive part,\n // so as an optimization, check first that this database even\n // contains attachments\n var req = attStore.count();\n req.onsuccess = function (e) {\n var count = e.target.result;\n if (!count) {\n return callback(); // done\n }\n\n seqStore.openCursor().onsuccess = function (e) {\n var cursor = e.target.result;\n if (!cursor) {\n return callback(); // done\n }\n var doc = cursor.value;\n var seq = cursor.primaryKey;\n var atts = Object.keys(doc._attachments || {});\n var digestMap = {};\n for (var j = 0; j < atts.length; j++) {\n var att = doc._attachments[atts[j]];\n digestMap[att.digest] = true; // uniq digests, just in case\n }\n var digests = Object.keys(digestMap);\n for (j = 0; j < digests.length; j++) {\n var digest = digests[j];\n attAndSeqStore.put({\n seq: seq,\n digestSeq: digest + '::' + seq\n });\n }\n cursor.continue();\n };\n };\n }\n\n // migration to version 5\n // Instead of relying on on-the-fly migration of metadata,\n // this brings the doc-store to its modern form:\n // - metadata.winningrev\n // - metadata.seq\n // - stringify the metadata when storing it\n function migrateMetadata(txn) {\n\n function decodeMetadataCompat(storedObject) {\n if (!storedObject.data) {\n // old format, when we didn't store it stringified\n storedObject.deleted = storedObject.deletedOrLocal === '1';\n return storedObject;\n }\n return decodeMetadata(storedObject);\n }\n\n // ensure that every metadata has a winningRev and seq,\n // which was previously created on-the-fly but better to migrate\n var bySeqStore = txn.objectStore(BY_SEQ_STORE);\n var docStore = txn.objectStore(DOC_STORE);\n var cursor = docStore.openCursor();\n cursor.onsuccess = function (e) {\n var cursor = e.target.result;\n if (!cursor) {\n return; // done\n }\n var metadata = decodeMetadataCompat(cursor.value);\n\n metadata.winningRev = metadata.winningRev ||\n winningRev(metadata);\n\n function fetchMetadataSeq() {\n // metadata.seq was added post-3.2.0, so if it's missing,\n // we need to fetch it manually\n var start = metadata.id + '::';\n var end = metadata.id + '::\\uffff';\n var req = bySeqStore.index('_doc_id_rev').openCursor(\n IDBKeyRange.bound(start, end));\n\n var metadataSeq = 0;\n req.onsuccess = function (e) {\n var cursor = e.target.result;\n if (!cursor) {\n metadata.seq = metadataSeq;\n return onGetMetadataSeq();\n }\n var seq = cursor.primaryKey;\n if (seq > metadataSeq) {\n metadataSeq = seq;\n }\n cursor.continue();\n };\n }\n\n function onGetMetadataSeq() {\n var metadataToStore = encodeMetadata(metadata,\n metadata.winningRev, metadata.deleted);\n\n var req = docStore.put(metadataToStore);\n req.onsuccess = function () {\n cursor.continue();\n };\n }\n\n if (metadata.seq) {\n return onGetMetadataSeq();\n }\n\n fetchMetadataSeq();\n };\n\n }\n\n api._remote = false;\n api.type = function () {\n return 'idb';\n };\n\n api._id = toPromise(function (callback) {\n callback(null, api._meta.instanceId);\n });\n\n api._bulkDocs = function idb_bulkDocs(req, reqOpts, callback) {\n idbBulkDocs(opts, req, reqOpts, api, idb, callback);\n };\n\n // First we look up the metadata in the ids database, then we fetch the\n // current revision(s) from the by sequence store\n api._get = function idb_get(id, opts, callback) {\n var doc;\n var metadata;\n var err;\n var txn = opts.ctx;\n if (!txn) {\n var txnResult = openTransactionSafely(idb,\n [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n txn = txnResult.txn;\n }\n\n function finish() {\n callback(err, {doc: doc, metadata: metadata, ctx: txn});\n }\n\n txn.objectStore(DOC_STORE).get(id).onsuccess = function (e) {\n metadata = decodeMetadata(e.target.result);\n // we can determine the result here if:\n // 1. there is no such document\n // 2. the document is deleted and we don't ask about specific rev\n // When we ask with opts.rev we expect the answer to be either\n // doc (possibly with _deleted=true) or missing error\n if (!metadata) {\n err = createError(MISSING_DOC, 'missing');\n return finish();\n }\n\n var rev;\n if (!opts.rev) {\n rev = metadata.winningRev;\n var deleted = isDeleted(metadata);\n if (deleted) {\n err = createError(MISSING_DOC, \"deleted\");\n return finish();\n }\n } else {\n rev = opts.latest ? latest(opts.rev, metadata) : opts.rev;\n }\n\n var objectStore = txn.objectStore(BY_SEQ_STORE);\n var key = metadata.id + '::' + rev;\n\n objectStore.index('_doc_id_rev').get(key).onsuccess = function (e) {\n doc = e.target.result;\n if (doc) {\n doc = decodeDoc(doc);\n }\n if (!doc) {\n err = createError(MISSING_DOC, 'missing');\n return finish();\n }\n finish();\n };\n };\n };\n\n api._getAttachment = function (docId, attachId, attachment, opts, callback) {\n var txn;\n if (opts.ctx) {\n txn = opts.ctx;\n } else {\n var txnResult = openTransactionSafely(idb,\n [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n txn = txnResult.txn;\n }\n var digest = attachment.digest;\n var type = attachment.content_type;\n\n txn.objectStore(ATTACH_STORE).get(digest).onsuccess = function (e) {\n var body = e.target.result.body;\n readBlobData(body, type, opts.binary, function (blobData) {\n callback(null, blobData);\n });\n };\n };\n\n api._info = function idb_info(callback) {\n var updateSeq;\n var docCount;\n\n var txnResult = openTransactionSafely(idb, [META_STORE, BY_SEQ_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n txn.objectStore(META_STORE).get(META_STORE).onsuccess = function (e) {\n docCount = e.target.result.docCount;\n };\n txn.objectStore(BY_SEQ_STORE).openCursor(null, 'prev').onsuccess = function (e) {\n var cursor = e.target.result;\n updateSeq = cursor ? cursor.key : 0;\n };\n\n txn.oncomplete = function () {\n callback(null, {\n doc_count: docCount,\n update_seq: updateSeq,\n // for debugging\n idb_attachment_format: (api._meta.blobSupport ? 'binary' : 'base64')\n });\n };\n };\n\n api._allDocs = function idb_allDocs(opts, callback) {\n idbAllDocs(opts, idb, callback);\n };\n\n api._changes = function idbChanges(opts) {\n return changes(opts, api, dbName, idb);\n };\n\n api._close = function (callback) {\n // https://developer.mozilla.org/en-US/docs/IndexedDB/IDBDatabase#close\n // \"Returns immediately and closes the connection in a separate thread...\"\n idb.close();\n cachedDBs.delete(dbName);\n callback();\n };\n\n api._getRevisionTree = function (docId, callback) {\n var txnResult = openTransactionSafely(idb, [DOC_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n var req = txn.objectStore(DOC_STORE).get(docId);\n req.onsuccess = function (event) {\n var doc = decodeMetadata(event.target.result);\n if (!doc) {\n callback(createError(MISSING_DOC));\n } else {\n callback(null, doc.rev_tree);\n }\n };\n };\n\n // This function removes revisions of document docId\n // which are listed in revs and sets this document\n // revision to to rev_tree\n api._doCompaction = function (docId, revs, callback) {\n var stores = [\n DOC_STORE,\n BY_SEQ_STORE,\n ATTACH_STORE,\n ATTACH_AND_SEQ_STORE\n ];\n var txnResult = openTransactionSafely(idb, stores, 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n\n var docStore = txn.objectStore(DOC_STORE);\n\n docStore.get(docId).onsuccess = function (event) {\n var metadata = decodeMetadata(event.target.result);\n traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n revHash, ctx, opts) {\n var rev = pos + '-' + revHash;\n if (revs.indexOf(rev) !== -1) {\n opts.status = 'missing';\n }\n });\n compactRevs(revs, docId, txn);\n var winningRev$$1 = metadata.winningRev;\n var deleted = metadata.deleted;\n txn.objectStore(DOC_STORE).put(\n encodeMetadata(metadata, winningRev$$1, deleted));\n };\n txn.onabort = idbError(callback);\n txn.oncomplete = function () {\n callback();\n };\n };\n\n\n api._getLocal = function (id, callback) {\n var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var tx = txnResult.txn;\n var req = tx.objectStore(LOCAL_STORE).get(id);\n\n req.onerror = idbError(callback);\n req.onsuccess = function (e) {\n var doc = e.target.result;\n if (!doc) {\n callback(createError(MISSING_DOC));\n } else {\n delete doc['_doc_id_rev']; // for backwards compat\n callback(null, doc);\n }\n };\n };\n\n api._putLocal = function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n delete doc._revisions; // ignore this, trust the rev\n var oldRev = doc._rev;\n var id = doc._id;\n if (!oldRev) {\n doc._rev = '0-1';\n } else {\n doc._rev = '0-' + (parseInt(oldRev.split('-')[1], 10) + 1);\n }\n\n var tx = opts.ctx;\n var ret;\n if (!tx) {\n var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n tx = txnResult.txn;\n tx.onerror = idbError(callback);\n tx.oncomplete = function () {\n if (ret) {\n callback(null, ret);\n }\n };\n }\n\n var oStore = tx.objectStore(LOCAL_STORE);\n var req;\n if (oldRev) {\n req = oStore.get(id);\n req.onsuccess = function (e) {\n var oldDoc = e.target.result;\n if (!oldDoc || oldDoc._rev !== oldRev) {\n callback(createError(REV_CONFLICT));\n } else { // update\n var req = oStore.put(doc);\n req.onsuccess = function () {\n ret = {ok: true, id: doc._id, rev: doc._rev};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n };\n }\n };\n } else { // new doc\n req = oStore.add(doc);\n req.onerror = function (e) {\n // constraint error, already exists\n callback(createError(REV_CONFLICT));\n e.preventDefault(); // avoid transaction abort\n e.stopPropagation(); // avoid transaction onerror\n };\n req.onsuccess = function () {\n ret = {ok: true, id: doc._id, rev: doc._rev};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n };\n }\n };\n\n api._removeLocal = function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var tx = opts.ctx;\n if (!tx) {\n var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n tx = txnResult.txn;\n tx.oncomplete = function () {\n if (ret) {\n callback(null, ret);\n }\n };\n }\n var ret;\n var id = doc._id;\n var oStore = tx.objectStore(LOCAL_STORE);\n var req = oStore.get(id);\n\n req.onerror = idbError(callback);\n req.onsuccess = function (e) {\n var oldDoc = e.target.result;\n if (!oldDoc || oldDoc._rev !== doc._rev) {\n callback(createError(MISSING_DOC));\n } else {\n oStore.delete(id);\n ret = {ok: true, id: id, rev: '0-0'};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n }\n };\n };\n\n api._destroy = function (opts, callback) {\n changesHandler.removeAllListeners(dbName);\n\n //Close open request for \"dbName\" database to fix ie delay.\n var openReq = openReqList.get(dbName);\n if (openReq && openReq.result) {\n openReq.result.close();\n cachedDBs.delete(dbName);\n }\n var req = indexedDB.deleteDatabase(dbName);\n\n req.onsuccess = function () {\n //Remove open request from the list.\n openReqList.delete(dbName);\n if (hasLocalStorage() && (dbName in localStorage)) {\n delete localStorage[dbName];\n }\n callback(null, { 'ok': true });\n };\n\n req.onerror = idbError(callback);\n };\n\n var cached = cachedDBs.get(dbName);\n\n if (cached) {\n idb = cached.idb;\n api._meta = cached.global;\n return nextTick(function () {\n callback(null, api);\n });\n }\n\n var req = indexedDB.open(dbName, ADAPTER_VERSION);\n openReqList.set(dbName, req);\n\n req.onupgradeneeded = function (e) {\n var db = e.target.result;\n if (e.oldVersion < 1) {\n return createSchema(db); // new db, initial schema\n }\n // do migrations\n\n var txn = e.currentTarget.transaction;\n // these migrations have to be done in this function, before\n // control is returned to the event loop, because IndexedDB\n\n if (e.oldVersion < 3) {\n createLocalStoreSchema(db); // v2 -> v3\n }\n if (e.oldVersion < 4) {\n addAttachAndSeqStore(db); // v3 -> v4\n }\n\n var migrations = [\n addDeletedOrLocalIndex, // v1 -> v2\n migrateLocalStore, // v2 -> v3\n migrateAttsAndSeqs, // v3 -> v4\n migrateMetadata // v4 -> v5\n ];\n\n var i = e.oldVersion;\n\n function next() {\n var migration = migrations[i - 1];\n i++;\n if (migration) {\n migration(txn, next);\n }\n }\n\n next();\n };\n\n req.onsuccess = function (e) {\n\n idb = e.target.result;\n\n idb.onversionchange = function () {\n idb.close();\n cachedDBs.delete(dbName);\n };\n\n idb.onabort = function (e) {\n guardedConsole('error', 'Database has a global failure', e.target.error);\n idb.close();\n cachedDBs.delete(dbName);\n };\n\n // Do a few setup operations (in parallel as much as possible):\n // 1. Fetch meta doc\n // 2. Check blob support\n // 3. Calculate docCount\n // 4. Generate an instanceId if necessary\n // 5. Store docCount and instanceId on meta doc\n\n var txn = idb.transaction([\n META_STORE,\n DETECT_BLOB_SUPPORT_STORE,\n DOC_STORE\n ], 'readwrite');\n\n var storedMetaDoc = false;\n var metaDoc;\n var docCount;\n var blobSupport;\n var instanceId;\n\n function completeSetup() {\n if (typeof blobSupport === 'undefined' || !storedMetaDoc) {\n return;\n }\n api._meta = {\n name: dbName,\n instanceId: instanceId,\n blobSupport: blobSupport\n };\n\n cachedDBs.set(dbName, {\n idb: idb,\n global: api._meta\n });\n callback(null, api);\n }\n\n function storeMetaDocIfReady() {\n if (typeof docCount === 'undefined' || typeof metaDoc === 'undefined') {\n return;\n }\n var instanceKey = dbName + '_id';\n if (instanceKey in metaDoc) {\n instanceId = metaDoc[instanceKey];\n } else {\n metaDoc[instanceKey] = instanceId = uuid();\n }\n metaDoc.docCount = docCount;\n txn.objectStore(META_STORE).put(metaDoc);\n }\n\n //\n // fetch or generate the instanceId\n //\n txn.objectStore(META_STORE).get(META_STORE).onsuccess = function (e) {\n metaDoc = e.target.result || { id: META_STORE };\n storeMetaDocIfReady();\n };\n\n //\n // countDocs\n //\n countDocs(txn, function (count) {\n docCount = count;\n storeMetaDocIfReady();\n });\n\n //\n // check blob support\n //\n if (!blobSupportPromise) {\n // make sure blob support is only checked once\n blobSupportPromise = checkBlobSupport(txn);\n }\n\n blobSupportPromise.then(function (val) {\n blobSupport = val;\n completeSetup();\n });\n\n // only when the metadata put transaction has completed,\n // consider the setup done\n txn.oncomplete = function () {\n storedMetaDoc = true;\n completeSetup();\n };\n txn.onabort = idbError(callback);\n };\n\n req.onerror = function () {\n var msg = 'Failed to open indexedDB, are you in private browsing mode?';\n guardedConsole('error', msg);\n callback(createError(IDB_ERROR, msg));\n };\n}\n\nIdbPouch.valid = function () {\n // Following #7085 buggy idb versions (typically Safari < 10.1) are\n // considered valid.\n\n // On Firefox SecurityError is thrown while referencing indexedDB if cookies\n // are not allowed. `typeof indexedDB` also triggers the error.\n try {\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n return typeof indexedDB !== 'undefined' && typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n};\n\nfunction IDBPouch (PouchDB) {\n PouchDB.adapter('idb', IdbPouch, true);\n}\n\n// dead simple promise pool, inspired by https://github.com/timdp/es6-promise-pool\n// but much smaller in code size. limits the number of concurrent promises that are executed\n\n\nfunction pool(promiseFactories, limit) {\n return new Promise(function (resolve, reject) {\n var running = 0;\n var current = 0;\n var done = 0;\n var len = promiseFactories.length;\n var err;\n\n function runNext() {\n running++;\n promiseFactories[current++]().then(onSuccess, onError);\n }\n\n function doNext() {\n if (++done === len) {\n /* istanbul ignore if */\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n } else {\n runNextBatch();\n }\n }\n\n function onSuccess() {\n running--;\n doNext();\n }\n\n /* istanbul ignore next */\n function onError(thisErr) {\n running--;\n err = err || thisErr;\n doNext();\n }\n\n function runNextBatch() {\n while (running < limit && current < len) {\n runNext();\n }\n }\n\n runNextBatch();\n });\n}\n\nvar CHANGES_BATCH_SIZE = 25;\nvar MAX_SIMULTANEOUS_REVS = 50;\nvar CHANGES_TIMEOUT_BUFFER = 5000;\nvar DEFAULT_HEARTBEAT = 10000;\n\nvar supportsBulkGetMap = {};\n\nfunction readAttachmentsAsBlobOrBuffer(row) {\n var doc = row.doc || row.ok;\n var atts = doc._attachments;\n if (!atts) {\n return;\n }\n Object.keys(atts).forEach(function (filename) {\n var att = atts[filename];\n att.data = b64ToBluffer(att.data, att.content_type);\n });\n}\n\nfunction encodeDocId(id) {\n if (/^_design/.test(id)) {\n return '_design/' + encodeURIComponent(id.slice(8));\n }\n if (/^_local/.test(id)) {\n return '_local/' + encodeURIComponent(id.slice(7));\n }\n return encodeURIComponent(id);\n}\n\nfunction preprocessAttachments$1(doc) {\n if (!doc._attachments || !Object.keys(doc._attachments)) {\n return Promise.resolve();\n }\n\n return Promise.all(Object.keys(doc._attachments).map(function (key) {\n var attachment = doc._attachments[key];\n if (attachment.data && typeof attachment.data !== 'string') {\n return new Promise(function (resolve) {\n blobToBase64(attachment.data, resolve);\n }).then(function (b64) {\n attachment.data = b64;\n });\n }\n }));\n}\n\nfunction hasUrlPrefix(opts) {\n if (!opts.prefix) {\n return false;\n }\n var protocol = parseUri(opts.prefix).protocol;\n return protocol === 'http' || protocol === 'https';\n}\n\n// Get all the information you possibly can about the URI given by name and\n// return it as a suitable object.\nfunction getHost(name, opts) {\n // encode db name if opts.prefix is a url (#5574)\n if (hasUrlPrefix(opts)) {\n var dbName = opts.name.substr(opts.prefix.length);\n // Ensure prefix has a trailing slash\n var prefix = opts.prefix.replace(/\\/?$/, '/');\n name = prefix + encodeURIComponent(dbName);\n }\n\n var uri = parseUri(name);\n if (uri.user || uri.password) {\n uri.auth = {username: uri.user, password: uri.password};\n }\n\n // Split the path part of the URI into parts using '/' as the delimiter\n // after removing any leading '/' and any trailing '/'\n var parts = uri.path.replace(/(^\\/|\\/$)/g, '').split('/');\n\n uri.db = parts.pop();\n // Prevent double encoding of URI component\n if (uri.db.indexOf('%') === -1) {\n uri.db = encodeURIComponent(uri.db);\n }\n\n uri.path = parts.join('/');\n\n return uri;\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genDBUrl(opts, path) {\n return genUrl(opts, opts.db + '/' + path);\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genUrl(opts, path) {\n // If the host already has a path, then we need to have a path delimiter\n // Otherwise, the path delimiter is the empty string\n var pathDel = !opts.path ? '' : '/';\n\n // If the host already has a path, then we need to have a path delimiter\n // Otherwise, the path delimiter is the empty string\n return opts.protocol + '://' + opts.host +\n (opts.port ? (':' + opts.port) : '') +\n '/' + opts.path + pathDel + path;\n}\n\nfunction paramsToStr(params) {\n return '?' + Object.keys(params).map(function (k) {\n return k + '=' + encodeURIComponent(params[k]);\n }).join('&');\n}\n\nfunction shouldCacheBust(opts) {\n var ua = (typeof navigator !== 'undefined' && navigator.userAgent) ?\n navigator.userAgent.toLowerCase() : '';\n var isIE = ua.indexOf('msie') !== -1;\n var isTrident = ua.indexOf('trident') !== -1;\n var isEdge = ua.indexOf('edge') !== -1;\n var isGET = !('method' in opts) || opts.method === 'GET';\n return (isIE || isTrident || isEdge) && isGET;\n}\n\n// Implements the PouchDB API for dealing with CouchDB instances over HTTP\nfunction HttpPouch(opts, callback) {\n\n // The functions that will be publicly available for HttpPouch\n var api = this;\n\n var host = getHost(opts.name, opts);\n var dbUrl = genDBUrl(host, '');\n\n opts = clone(opts);\n\n var ourFetch = function (url, options) {\n\n options = options || {};\n options.headers = options.headers || new h();\n\n if (opts.auth || host.auth) {\n var nAuth = opts.auth || host.auth;\n var str = nAuth.username + ':' + nAuth.password;\n var token = thisBtoa(unescape(encodeURIComponent(str)));\n options.headers.set('Authorization', 'Basic ' + token);\n }\n\n var headers = opts.headers || {};\n Object.keys(headers).forEach(function (key) {\n options.headers.append(key, headers[key]);\n });\n\n /* istanbul ignore if */\n if (shouldCacheBust(options)) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + '_nonce=' + Date.now();\n }\n\n var fetchFun = opts.fetch || f$1;\n return fetchFun(url, options);\n };\n\n function adapterFun$$1(name, fun) {\n return adapterFun(name, getArguments(function (args) {\n setup().then(function () {\n return fun.apply(this, args);\n }).catch(function (e) {\n var callback = args.pop();\n callback(e);\n });\n })).bind(api);\n }\n\n function fetchJSON(url, options, callback) {\n\n var result = {};\n\n options = options || {};\n options.headers = options.headers || new h();\n\n if (!options.headers.get('Content-Type')) {\n options.headers.set('Content-Type', 'application/json');\n }\n if (!options.headers.get('Accept')) {\n options.headers.set('Accept', 'application/json');\n }\n\n return ourFetch(url, options).then(function (response) {\n result.ok = response.ok;\n result.status = response.status;\n return response.json();\n }).then(function (json) {\n result.data = json;\n if (!result.ok) {\n result.data.status = result.status;\n var err = generateErrorFromResponse(result.data);\n if (callback) {\n return callback(err);\n } else {\n throw err;\n }\n }\n\n if (Array.isArray(result.data)) {\n result.data = result.data.map(function (v) {\n if (v.error || v.missing) {\n return generateErrorFromResponse(v);\n } else {\n return v;\n }\n });\n }\n\n if (callback) {\n callback(null, result.data);\n } else {\n return result;\n }\n });\n }\n\n var setupPromise;\n\n function setup() {\n if (opts.skip_setup) {\n return Promise.resolve();\n }\n\n // If there is a setup in process or previous successful setup\n // done then we will use that\n // If previous setups have been rejected we will try again\n if (setupPromise) {\n return setupPromise;\n }\n\n setupPromise = fetchJSON(dbUrl).catch(function (err) {\n if (err && err.status && err.status === 404) {\n // Doesnt exist, create it\n explainError(404, 'PouchDB is just detecting if the remote exists.');\n return fetchJSON(dbUrl, {method: 'PUT'});\n } else {\n return Promise.reject(err);\n }\n }).catch(function (err) {\n // If we try to create a database that already exists, skipped in\n // istanbul since its catching a race condition.\n /* istanbul ignore if */\n if (err && err.status && err.status === 412) {\n return true;\n }\n return Promise.reject(err);\n });\n\n setupPromise.catch(function () {\n setupPromise = null;\n });\n\n return setupPromise;\n }\n\n nextTick(function () {\n callback(null, api);\n });\n\n api._remote = true;\n\n /* istanbul ignore next */\n api.type = function () {\n return 'http';\n };\n\n api.id = adapterFun$$1('id', function (callback) {\n ourFetch(genUrl(host, '')).then(function (response) {\n return response.json();\n }).then(function (result) {\n var uuid$$1 = (result && result.uuid) ?\n (result.uuid + host.db) : genDBUrl(host, '');\n callback(null, uuid$$1);\n }).catch(function (err) {\n callback(err);\n });\n });\n\n // Sends a POST request to the host calling the couchdb _compact function\n // version: The version of CouchDB it is running\n api.compact = adapterFun$$1('compact', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = clone(opts);\n\n fetchJSON(genDBUrl(host, '_compact'), {method: 'POST'}).then(function () {\n function ping() {\n api.info(function (err, res) {\n // CouchDB may send a \"compact_running:true\" if it's\n // already compacting. PouchDB Server doesn't.\n /* istanbul ignore else */\n if (res && !res.compact_running) {\n callback(null, {ok: true});\n } else {\n setTimeout(ping, opts.interval || 200);\n }\n });\n }\n // Ping the http if it's finished compaction\n ping();\n });\n });\n\n api.bulkGet = adapterFun('bulkGet', function (opts, callback) {\n var self = this;\n\n function doBulkGet(cb) {\n var params = {};\n if (opts.revs) {\n params.revs = true;\n }\n if (opts.attachments) {\n /* istanbul ignore next */\n params.attachments = true;\n }\n if (opts.latest) {\n params.latest = true;\n }\n fetchJSON(genDBUrl(host, '_bulk_get' + paramsToStr(params)), {\n method: 'POST',\n body: JSON.stringify({ docs: opts.docs})\n }).then(function (result) {\n if (opts.attachments && opts.binary) {\n result.data.results.forEach(function (res) {\n res.docs.forEach(readAttachmentsAsBlobOrBuffer);\n });\n }\n cb(null, result.data);\n }).catch(cb);\n }\n\n /* istanbul ignore next */\n function doBulkGetShim() {\n // avoid \"url too long error\" by splitting up into multiple requests\n var batchSize = MAX_SIMULTANEOUS_REVS;\n var numBatches = Math.ceil(opts.docs.length / batchSize);\n var numDone = 0;\n var results = new Array(numBatches);\n\n function onResult(batchNum) {\n return function (err, res) {\n // err is impossible because shim returns a list of errs in that case\n results[batchNum] = res.results;\n if (++numDone === numBatches) {\n callback(null, {results: flatten(results)});\n }\n };\n }\n\n for (var i = 0; i < numBatches; i++) {\n var subOpts = pick(opts, ['revs', 'attachments', 'binary', 'latest']);\n subOpts.docs = opts.docs.slice(i * batchSize,\n Math.min(opts.docs.length, (i + 1) * batchSize));\n bulkGet(self, subOpts, onResult(i));\n }\n }\n\n // mark the whole database as either supporting or not supporting _bulk_get\n var dbUrl = genUrl(host, '');\n var supportsBulkGet = supportsBulkGetMap[dbUrl];\n\n /* istanbul ignore next */\n if (typeof supportsBulkGet !== 'boolean') {\n // check if this database supports _bulk_get\n doBulkGet(function (err, res) {\n if (err) {\n supportsBulkGetMap[dbUrl] = false;\n explainError(\n err.status,\n 'PouchDB is just detecting if the remote ' +\n 'supports the _bulk_get API.'\n );\n doBulkGetShim();\n } else {\n supportsBulkGetMap[dbUrl] = true;\n callback(null, res);\n }\n });\n } else if (supportsBulkGet) {\n doBulkGet(callback);\n } else {\n doBulkGetShim();\n }\n });\n\n // Calls GET on the host, which gets back a JSON string containing\n // couchdb: A welcome string\n // version: The version of CouchDB it is running\n api._info = function (callback) {\n setup().then(function () {\n return ourFetch(genDBUrl(host, ''));\n }).then(function (response) {\n return response.json();\n }).then(function (info) {\n info.host = genDBUrl(host, '');\n callback(null, info);\n }).catch(callback);\n };\n\n api.fetch = function (path, options) {\n return setup().then(function () {\n return ourFetch(genDBUrl(host, path), options);\n });\n };\n\n // Get the document with the given id from the database given by host.\n // The id could be solely the _id in the database, or it may be a\n // _design/ID or _local/ID path\n api.get = adapterFun$$1('get', function (id, opts, callback) {\n // If no options were given, set the callback to the second parameter\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = clone(opts);\n\n // List of parameters to add to the GET request\n var params = {};\n\n if (opts.revs) {\n params.revs = true;\n }\n\n if (opts.revs_info) {\n params.revs_info = true;\n }\n\n if (opts.latest) {\n params.latest = true;\n }\n\n if (opts.open_revs) {\n if (opts.open_revs !== \"all\") {\n opts.open_revs = JSON.stringify(opts.open_revs);\n }\n params.open_revs = opts.open_revs;\n }\n\n if (opts.rev) {\n params.rev = opts.rev;\n }\n\n if (opts.conflicts) {\n params.conflicts = opts.conflicts;\n }\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n params.update_seq = opts.update_seq;\n }\n\n id = encodeDocId(id);\n\n function fetchAttachments(doc) {\n var atts = doc._attachments;\n var filenames = atts && Object.keys(atts);\n if (!atts || !filenames.length) {\n return;\n }\n // we fetch these manually in separate XHRs, because\n // Sync Gateway would normally send it back as multipart/mixed,\n // which we cannot parse. Also, this is more efficient than\n // receiving attachments as base64-encoded strings.\n function fetchData(filename) {\n var att = atts[filename];\n var path = encodeDocId(doc._id) + '/' + encodeAttachmentId(filename) +\n '?rev=' + doc._rev;\n return ourFetch(genDBUrl(host, path)).then(function (response) {\n if (typeof process !== 'undefined' && !process.browser) {\n return response.buffer();\n } else {\n /* istanbul ignore next */\n return response.blob();\n }\n }).then(function (blob) {\n if (opts.binary) {\n // TODO: Can we remove this?\n if (typeof process !== 'undefined' && !process.browser) {\n blob.type = att.content_type;\n }\n return blob;\n }\n return new Promise(function (resolve) {\n blobToBase64(blob, resolve);\n });\n }).then(function (data) {\n delete att.stub;\n delete att.length;\n att.data = data;\n });\n }\n\n var promiseFactories = filenames.map(function (filename) {\n return function () {\n return fetchData(filename);\n };\n });\n\n // This limits the number of parallel xhr requests to 5 any time\n // to avoid issues with maximum browser request limits\n return pool(promiseFactories, 5);\n }\n\n function fetchAllAttachments(docOrDocs) {\n if (Array.isArray(docOrDocs)) {\n return Promise.all(docOrDocs.map(function (doc) {\n if (doc.ok) {\n return fetchAttachments(doc.ok);\n }\n }));\n }\n return fetchAttachments(docOrDocs);\n }\n\n var url = genDBUrl(host, id + paramsToStr(params));\n fetchJSON(url).then(function (res) {\n return Promise.resolve().then(function () {\n if (opts.attachments) {\n return fetchAllAttachments(res.data);\n }\n }).then(function () {\n callback(null, res.data);\n });\n }).catch(function (e) {\n e.docId = id;\n callback(e);\n });\n });\n\n\n // Delete the document given by doc from the database given by host.\n api.remove = adapterFun$$1('remove', function (docOrId, optsOrRev, opts, cb) {\n var doc;\n if (typeof optsOrRev === 'string') {\n // id, rev, opts, callback style\n doc = {\n _id: docOrId,\n _rev: optsOrRev\n };\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n } else {\n // doc, opts, callback style\n doc = docOrId;\n if (typeof optsOrRev === 'function') {\n cb = optsOrRev;\n opts = {};\n } else {\n cb = opts;\n opts = optsOrRev;\n }\n }\n\n var rev = (doc._rev || opts.rev);\n var url = genDBUrl(host, encodeDocId(doc._id)) + '?rev=' + rev;\n\n fetchJSON(url, {method: 'DELETE'}, cb).catch(cb);\n });\n\n function encodeAttachmentId(attachmentId) {\n return attachmentId.split(\"/\").map(encodeURIComponent).join(\"/\");\n }\n\n // Get the attachment\n api.getAttachment = adapterFun$$1('getAttachment', function (docId, attachmentId,\n opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var params = opts.rev ? ('?rev=' + opts.rev) : '';\n var url = genDBUrl(host, encodeDocId(docId)) + '/' +\n encodeAttachmentId(attachmentId) + params;\n var contentType;\n ourFetch(url, {method: 'GET'}).then(function (response) {\n contentType = response.headers.get('content-type');\n if (!response.ok) {\n throw response;\n } else {\n if (typeof process !== 'undefined' && !process.browser) {\n return response.buffer();\n } else {\n /* istanbul ignore next */\n return response.blob();\n }\n }\n }).then(function (blob) {\n // TODO: also remove\n if (typeof process !== 'undefined' && !process.browser) {\n blob.type = contentType;\n }\n callback(null, blob);\n }).catch(function (err) {\n callback(err);\n });\n });\n\n // Remove the attachment given by the id and rev\n api.removeAttachment = adapterFun$$1('removeAttachment', function (docId,\n attachmentId,\n rev,\n callback) {\n var url = genDBUrl(host, encodeDocId(docId) + '/' +\n encodeAttachmentId(attachmentId)) + '?rev=' + rev;\n fetchJSON(url, {method: 'DELETE'}, callback).catch(callback);\n });\n\n // Add the attachment given by blob and its contentType property\n // to the document with the given id, the revision given by rev, and\n // add it to the database given by host.\n api.putAttachment = adapterFun$$1('putAttachment', function (docId, attachmentId,\n rev, blob,\n type, callback) {\n if (typeof type === 'function') {\n callback = type;\n type = blob;\n blob = rev;\n rev = null;\n }\n var id = encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId);\n var url = genDBUrl(host, id);\n if (rev) {\n url += '?rev=' + rev;\n }\n\n if (typeof blob === 'string') {\n // input is assumed to be a base64 string\n var binary;\n try {\n binary = thisAtob(blob);\n } catch (err) {\n return callback(createError(BAD_ARG,\n 'Attachment is not a valid base64 string'));\n }\n blob = binary ? binStringToBluffer(binary, type) : '';\n }\n\n // Add the attachment\n fetchJSON(url, {\n headers: new h({'Content-Type': type}),\n method: 'PUT',\n body: blob\n }, callback).catch(callback);\n });\n\n // Update/create multiple documents given by req in the database\n // given by host.\n api._bulkDocs = function (req, opts, callback) {\n // If new_edits=false then it prevents the database from creating\n // new revision numbers for the documents. Instead it just uses\n // the old ones. This is used in database replication.\n req.new_edits = opts.new_edits;\n\n setup().then(function () {\n return Promise.all(req.docs.map(preprocessAttachments$1));\n }).then(function () {\n // Update/create the documents\n return fetchJSON(genDBUrl(host, '_bulk_docs'), {\n method: 'POST',\n body: JSON.stringify(req)\n }, callback);\n }).catch(callback);\n };\n\n\n // Update/create document\n api._put = function (doc, opts, callback) {\n setup().then(function () {\n return preprocessAttachments$1(doc);\n }).then(function () {\n return fetchJSON(genDBUrl(host, encodeDocId(doc._id)), {\n method: 'PUT',\n body: JSON.stringify(doc)\n });\n }).then(function (result) {\n callback(null, result.data);\n }).catch(function (err) {\n err.docId = doc && doc._id;\n callback(err);\n });\n };\n\n\n // Get a listing of the documents in the database given\n // by host and ordered by increasing id.\n api.allDocs = adapterFun$$1('allDocs', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = clone(opts);\n\n // List of parameters to add to the GET request\n var params = {};\n var body;\n var method = 'GET';\n\n if (opts.conflicts) {\n params.conflicts = true;\n }\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n params.update_seq = true;\n }\n\n if (opts.descending) {\n params.descending = true;\n }\n\n if (opts.include_docs) {\n params.include_docs = true;\n }\n\n // added in CouchDB 1.6.0\n if (opts.attachments) {\n params.attachments = true;\n }\n\n if (opts.key) {\n params.key = JSON.stringify(opts.key);\n }\n\n if (opts.start_key) {\n opts.startkey = opts.start_key;\n }\n\n if (opts.startkey) {\n params.startkey = JSON.stringify(opts.startkey);\n }\n\n if (opts.end_key) {\n opts.endkey = opts.end_key;\n }\n\n if (opts.endkey) {\n params.endkey = JSON.stringify(opts.endkey);\n }\n\n if (typeof opts.inclusive_end !== 'undefined') {\n params.inclusive_end = !!opts.inclusive_end;\n }\n\n if (typeof opts.limit !== 'undefined') {\n params.limit = opts.limit;\n }\n\n if (typeof opts.skip !== 'undefined') {\n params.skip = opts.skip;\n }\n\n var paramStr = paramsToStr(params);\n\n if (typeof opts.keys !== 'undefined') {\n method = 'POST';\n body = {keys: opts.keys};\n }\n\n fetchJSON(genDBUrl(host, '_all_docs' + paramStr), {\n method: method,\n body: JSON.stringify(body)\n }).then(function (result) {\n if (opts.include_docs && opts.attachments && opts.binary) {\n result.data.rows.forEach(readAttachmentsAsBlobOrBuffer);\n }\n callback(null, result.data);\n }).catch(callback);\n });\n\n // Get a list of changes made to documents in the database given by host.\n // TODO According to the README, there should be two other methods here,\n // api.changes.addListener and api.changes.removeListener.\n api._changes = function (opts) {\n\n // We internally page the results of a changes request, this means\n // if there is a large set of changes to be returned we can start\n // processing them quicker instead of waiting on the entire\n // set of changes to return and attempting to process them at once\n var batchSize = 'batch_size' in opts ? opts.batch_size : CHANGES_BATCH_SIZE;\n\n opts = clone(opts);\n\n if (opts.continuous && !('heartbeat' in opts)) {\n opts.heartbeat = DEFAULT_HEARTBEAT;\n }\n\n var requestTimeout = ('timeout' in opts) ? opts.timeout : 30 * 1000;\n\n // ensure CHANGES_TIMEOUT_BUFFER applies\n if ('timeout' in opts && opts.timeout &&\n (requestTimeout - opts.timeout) < CHANGES_TIMEOUT_BUFFER) {\n requestTimeout = opts.timeout + CHANGES_TIMEOUT_BUFFER;\n }\n\n /* istanbul ignore if */\n if ('heartbeat' in opts && opts.heartbeat &&\n (requestTimeout - opts.heartbeat) < CHANGES_TIMEOUT_BUFFER) {\n requestTimeout = opts.heartbeat + CHANGES_TIMEOUT_BUFFER;\n }\n\n var params = {};\n if ('timeout' in opts && opts.timeout) {\n params.timeout = opts.timeout;\n }\n\n var limit = (typeof opts.limit !== 'undefined') ? opts.limit : false;\n var leftToFetch = limit;\n\n if (opts.style) {\n params.style = opts.style;\n }\n\n if (opts.include_docs || opts.filter && typeof opts.filter === 'function') {\n params.include_docs = true;\n }\n\n if (opts.attachments) {\n params.attachments = true;\n }\n\n if (opts.continuous) {\n params.feed = 'longpoll';\n }\n\n if (opts.seq_interval) {\n params.seq_interval = opts.seq_interval;\n }\n\n if (opts.conflicts) {\n params.conflicts = true;\n }\n\n if (opts.descending) {\n params.descending = true;\n }\n \n /* istanbul ignore if */\n if (opts.update_seq) {\n params.update_seq = true;\n }\n\n if ('heartbeat' in opts) {\n // If the heartbeat value is false, it disables the default heartbeat\n if (opts.heartbeat) {\n params.heartbeat = opts.heartbeat;\n }\n }\n\n if (opts.filter && typeof opts.filter === 'string') {\n params.filter = opts.filter;\n }\n\n if (opts.view && typeof opts.view === 'string') {\n params.filter = '_view';\n params.view = opts.view;\n }\n\n // If opts.query_params exists, pass it through to the changes request.\n // These parameters may be used by the filter on the source database.\n if (opts.query_params && typeof opts.query_params === 'object') {\n for (var param_name in opts.query_params) {\n /* istanbul ignore else */\n if (opts.query_params.hasOwnProperty(param_name)) {\n params[param_name] = opts.query_params[param_name];\n }\n }\n }\n\n var method = 'GET';\n var body;\n\n if (opts.doc_ids) {\n // set this automagically for the user; it's annoying that couchdb\n // requires both a \"filter\" and a \"doc_ids\" param.\n params.filter = '_doc_ids';\n method = 'POST';\n body = {doc_ids: opts.doc_ids };\n }\n /* istanbul ignore next */\n else if (opts.selector) {\n // set this automagically for the user, similar to above\n params.filter = '_selector';\n method = 'POST';\n body = {selector: opts.selector };\n }\n\n var controller = new a();\n var lastFetchedSeq;\n\n // Get all the changes starting wtih the one immediately after the\n // sequence number given by since.\n var fetchData = function (since, callback) {\n if (opts.aborted) {\n return;\n }\n params.since = since;\n // \"since\" can be any kind of json object in Cloudant/CouchDB 2.x\n /* istanbul ignore next */\n if (typeof params.since === \"object\") {\n params.since = JSON.stringify(params.since);\n }\n\n if (opts.descending) {\n if (limit) {\n params.limit = leftToFetch;\n }\n } else {\n params.limit = (!limit || leftToFetch > batchSize) ?\n batchSize : leftToFetch;\n }\n\n // Set the options for the ajax call\n var url = genDBUrl(host, '_changes' + paramsToStr(params));\n var fetchOpts = {\n signal: controller.signal,\n method: method,\n body: JSON.stringify(body)\n };\n lastFetchedSeq = since;\n\n /* istanbul ignore if */\n if (opts.aborted) {\n return;\n }\n\n // Get the changes\n setup().then(function () {\n return fetchJSON(url, fetchOpts, callback);\n }).catch(callback);\n };\n\n // If opts.since exists, get all the changes from the sequence\n // number given by opts.since. Otherwise, get all the changes\n // from the sequence number 0.\n var results = {results: []};\n\n var fetched = function (err, res) {\n if (opts.aborted) {\n return;\n }\n var raw_results_length = 0;\n // If the result of the ajax call (res) contains changes (res.results)\n if (res && res.results) {\n raw_results_length = res.results.length;\n results.last_seq = res.last_seq;\n var pending = null;\n var lastSeq = null;\n // Attach 'pending' property if server supports it (CouchDB 2.0+)\n /* istanbul ignore if */\n if (typeof res.pending === 'number') {\n pending = res.pending;\n }\n if (typeof results.last_seq === 'string' || typeof results.last_seq === 'number') {\n lastSeq = results.last_seq;\n }\n // For each change\n var req = {};\n req.query = opts.query_params;\n res.results = res.results.filter(function (c) {\n leftToFetch--;\n var ret = filterChange(opts)(c);\n if (ret) {\n if (opts.include_docs && opts.attachments && opts.binary) {\n readAttachmentsAsBlobOrBuffer(c);\n }\n if (opts.return_docs) {\n results.results.push(c);\n }\n opts.onChange(c, pending, lastSeq);\n }\n return ret;\n });\n } else if (err) {\n // In case of an error, stop listening for changes and call\n // opts.complete\n opts.aborted = true;\n opts.complete(err);\n return;\n }\n\n // The changes feed may have timed out with no results\n // if so reuse last update sequence\n if (res && res.last_seq) {\n lastFetchedSeq = res.last_seq;\n }\n\n var finished = (limit && leftToFetch <= 0) ||\n (res && raw_results_length < batchSize) ||\n (opts.descending);\n\n if ((opts.continuous && !(limit && leftToFetch <= 0)) || !finished) {\n // Queue a call to fetch again with the newest sequence number\n nextTick(function () { fetchData(lastFetchedSeq, fetched); });\n } else {\n // We're done, call the callback\n opts.complete(null, results);\n }\n };\n\n fetchData(opts.since || 0, fetched);\n\n // Return a method to cancel this method from processing any more\n return {\n cancel: function () {\n opts.aborted = true;\n controller.abort();\n }\n };\n };\n\n // Given a set of document/revision IDs (given by req), tets the subset of\n // those that do NOT correspond to revisions stored in the database.\n // See http://wiki.apache.org/couchdb/HttpPostRevsDiff\n api.revsDiff = adapterFun$$1('revsDiff', function (req, opts, callback) {\n // If no options were given, set the callback to be the second parameter\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n // Get the missing document/revision IDs\n fetchJSON(genDBUrl(host, '_revs_diff'), {\n method: 'POST',\n body: JSON.stringify(req)\n }, callback).catch(callback);\n });\n\n api._close = function (callback) {\n callback();\n };\n\n api._destroy = function (options, callback) {\n fetchJSON(genDBUrl(host, ''), {method: 'DELETE'}).then(function (json) {\n callback(null, json);\n }).catch(function (err) {\n /* istanbul ignore if */\n if (err.status === 404) {\n callback(null, {ok: true});\n } else {\n callback(err);\n }\n });\n };\n}\n\n// HttpPouch is a valid adapter.\nHttpPouch.valid = function () {\n return true;\n};\n\nfunction HttpPouch$1 (PouchDB) {\n PouchDB.adapter('http', HttpPouch, false);\n PouchDB.adapter('https', HttpPouch, false);\n}\n\nfunction QueryParseError(message) {\n this.status = 400;\n this.name = 'query_parse_error';\n this.message = message;\n this.error = true;\n try {\n Error.captureStackTrace(this, QueryParseError);\n } catch (e) {}\n}\n\ninherits(QueryParseError, Error);\n\nfunction NotFoundError(message) {\n this.status = 404;\n this.name = 'not_found';\n this.message = message;\n this.error = true;\n try {\n Error.captureStackTrace(this, NotFoundError);\n } catch (e) {}\n}\n\ninherits(NotFoundError, Error);\n\nfunction BuiltInError(message) {\n this.status = 500;\n this.name = 'invalid_value';\n this.message = message;\n this.error = true;\n try {\n Error.captureStackTrace(this, BuiltInError);\n } catch (e) {}\n}\n\ninherits(BuiltInError, Error);\n\nfunction promisedCallback(promise, callback) {\n if (callback) {\n promise.then(function (res) {\n nextTick(function () {\n callback(null, res);\n });\n }, function (reason) {\n nextTick(function () {\n callback(reason);\n });\n });\n }\n return promise;\n}\n\nfunction callbackify(fun) {\n return getArguments(function (args) {\n var cb = args.pop();\n var promise = fun.apply(this, args);\n if (typeof cb === 'function') {\n promisedCallback(promise, cb);\n }\n return promise;\n });\n}\n\n// Promise finally util similar to Q.finally\nfunction fin(promise, finalPromiseFactory) {\n return promise.then(function (res) {\n return finalPromiseFactory().then(function () {\n return res;\n });\n }, function (reason) {\n return finalPromiseFactory().then(function () {\n throw reason;\n });\n });\n}\n\nfunction sequentialize(queue, promiseFactory) {\n return function () {\n var args = arguments;\n var that = this;\n return queue.add(function () {\n return promiseFactory.apply(that, args);\n });\n };\n}\n\n// uniq an array of strings, order not guaranteed\n// similar to underscore/lodash _.uniq\nfunction uniq(arr) {\n var theSet = new ExportedSet(arr);\n var result = new Array(theSet.size);\n var index = -1;\n theSet.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n}\n\nfunction mapToKeysArray(map) {\n var result = new Array(map.size);\n var index = -1;\n map.forEach(function (value, key) {\n result[++index] = key;\n });\n return result;\n}\n\nfunction createBuiltInError(name) {\n var message = 'builtin ' + name +\n ' function requires map values to be numbers' +\n ' or number arrays';\n return new BuiltInError(message);\n}\n\nfunction sum(values) {\n var result = 0;\n for (var i = 0, len = values.length; i < len; i++) {\n var num = values[i];\n if (typeof num !== 'number') {\n if (Array.isArray(num)) {\n // lists of numbers are also allowed, sum them separately\n result = typeof result === 'number' ? [result] : result;\n for (var j = 0, jLen = num.length; j < jLen; j++) {\n var jNum = num[j];\n if (typeof jNum !== 'number') {\n throw createBuiltInError('_sum');\n } else if (typeof result[j] === 'undefined') {\n result.push(jNum);\n } else {\n result[j] += jNum;\n }\n }\n } else { // not array/number\n throw createBuiltInError('_sum');\n }\n } else if (typeof result === 'number') {\n result += num;\n } else { // add number to array\n result[0] += num;\n }\n }\n return result;\n}\n\nvar log = guardedConsole.bind(null, 'log');\nvar isArray = Array.isArray;\nvar toJSON = JSON.parse;\n\nfunction evalFunctionWithEval(func, emit) {\n return scopeEval(\n \"return (\" + func.replace(/;\\s*$/, \"\") + \");\",\n {\n emit: emit,\n sum: sum,\n log: log,\n isArray: isArray,\n toJSON: toJSON\n }\n );\n}\n\n/*\n * Simple task queue to sequentialize actions. Assumes\n * callbacks will eventually fire (once).\n */\n\n\nfunction TaskQueue$1() {\n this.promise = new Promise(function (fulfill) {fulfill(); });\n}\nTaskQueue$1.prototype.add = function (promiseFactory) {\n this.promise = this.promise.catch(function () {\n // just recover\n }).then(function () {\n return promiseFactory();\n });\n return this.promise;\n};\nTaskQueue$1.prototype.finish = function () {\n return this.promise;\n};\n\nfunction stringify(input) {\n if (!input) {\n return 'undefined'; // backwards compat for empty reduce\n }\n // for backwards compat with mapreduce, functions/strings are stringified\n // as-is. everything else is JSON-stringified.\n switch (typeof input) {\n case 'function':\n // e.g. a mapreduce map\n return input.toString();\n case 'string':\n // e.g. a mapreduce built-in _reduce function\n return input.toString();\n default:\n // e.g. a JSON object in the case of mango queries\n return JSON.stringify(input);\n }\n}\n\n/* create a string signature for a view so we can cache it and uniq it */\nfunction createViewSignature(mapFun, reduceFun) {\n // the \"undefined\" part is for backwards compatibility\n return stringify(mapFun) + stringify(reduceFun) + 'undefined';\n}\n\nfunction createView(sourceDB, viewName, mapFun, reduceFun, temporary, localDocName) {\n var viewSignature = createViewSignature(mapFun, reduceFun);\n\n var cachedViews;\n if (!temporary) {\n // cache this to ensure we don't try to update the same view twice\n cachedViews = sourceDB._cachedViews = sourceDB._cachedViews || {};\n if (cachedViews[viewSignature]) {\n return cachedViews[viewSignature];\n }\n }\n\n var promiseForView = sourceDB.info().then(function (info) {\n\n var depDbName = info.db_name + '-mrview-' +\n (temporary ? 'temp' : stringMd5(viewSignature));\n\n // save the view name in the source db so it can be cleaned up if necessary\n // (e.g. when the _design doc is deleted, remove all associated view data)\n function diffFunction(doc) {\n doc.views = doc.views || {};\n var fullViewName = viewName;\n if (fullViewName.indexOf('/') === -1) {\n fullViewName = viewName + '/' + viewName;\n }\n var depDbs = doc.views[fullViewName] = doc.views[fullViewName] || {};\n /* istanbul ignore if */\n if (depDbs[depDbName]) {\n return; // no update necessary\n }\n depDbs[depDbName] = true;\n return doc;\n }\n return upsert(sourceDB, '_local/' + localDocName, diffFunction).then(function () {\n return sourceDB.registerDependentDatabase(depDbName).then(function (res) {\n var db = res.db;\n db.auto_compaction = true;\n var view = {\n name: depDbName,\n db: db,\n sourceDB: sourceDB,\n adapter: sourceDB.adapter,\n mapFun: mapFun,\n reduceFun: reduceFun\n };\n return view.db.get('_local/lastSeq').catch(function (err) {\n /* istanbul ignore if */\n if (err.status !== 404) {\n throw err;\n }\n }).then(function (lastSeqDoc) {\n view.seq = lastSeqDoc ? lastSeqDoc.seq : 0;\n if (cachedViews) {\n view.db.once('destroyed', function () {\n delete cachedViews[viewSignature];\n });\n }\n return view;\n });\n });\n });\n });\n\n if (cachedViews) {\n cachedViews[viewSignature] = promiseForView;\n }\n return promiseForView;\n}\n\nvar persistentQueues = {};\nvar tempViewQueue = new TaskQueue$1();\nvar CHANGES_BATCH_SIZE$1 = 50;\n\nfunction parseViewName(name) {\n // can be either 'ddocname/viewname' or just 'viewname'\n // (where the ddoc name is the same)\n return name.indexOf('/') === -1 ? [name, name] : name.split('/');\n}\n\nfunction isGenOne(changes) {\n // only return true if the current change is 1-\n // and there are no other leafs\n return changes.length === 1 && /^1-/.test(changes[0].rev);\n}\n\nfunction emitError(db, e) {\n try {\n db.emit('error', e);\n } catch (err) {\n guardedConsole('error',\n 'The user\\'s map/reduce function threw an uncaught error.\\n' +\n 'You can debug this error by doing:\\n' +\n 'myDatabase.on(\\'error\\', function (err) { debugger; });\\n' +\n 'Please double-check your map/reduce function.');\n guardedConsole('error', e);\n }\n}\n\n/**\n * Returns an \"abstract\" mapreduce object of the form:\n *\n * {\n * query: queryFun,\n * viewCleanup: viewCleanupFun\n * }\n *\n * Arguments are:\n *\n * localDoc: string\n * This is for the local doc that gets saved in order to track the\n * \"dependent\" DBs and clean them up for viewCleanup. It should be\n * unique, so that indexer plugins don't collide with each other.\n * mapper: function (mapFunDef, emit)\n * Returns a map function based on the mapFunDef, which in the case of\n * normal map/reduce is just the de-stringified function, but may be\n * something else, such as an object in the case of pouchdb-find.\n * reducer: function (reduceFunDef)\n * Ditto, but for reducing. Modules don't have to support reducing\n * (e.g. pouchdb-find).\n * ddocValidator: function (ddoc, viewName)\n * Throws an error if the ddoc or viewName is not valid.\n * This could be a way to communicate to the user that the configuration for the\n * indexer is invalid.\n */\nfunction createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator) {\n\n function tryMap(db, fun, doc) {\n // emit an event if there was an error thrown by a map function.\n // putting try/catches in a single function also avoids deoptimizations.\n try {\n fun(doc);\n } catch (e) {\n emitError(db, e);\n }\n }\n\n function tryReduce(db, fun, keys, values, rereduce) {\n // same as above, but returning the result or an error. there are two separate\n // functions to avoid extra memory allocations since the tryCode() case is used\n // for custom map functions (common) vs this function, which is only used for\n // custom reduce functions (rare)\n try {\n return {output : fun(keys, values, rereduce)};\n } catch (e) {\n emitError(db, e);\n return {error: e};\n }\n }\n\n function sortByKeyThenValue(x, y) {\n var keyCompare = collate(x.key, y.key);\n return keyCompare !== 0 ? keyCompare : collate(x.value, y.value);\n }\n\n function sliceResults(results, limit, skip) {\n skip = skip || 0;\n if (typeof limit === 'number') {\n return results.slice(skip, limit + skip);\n } else if (skip > 0) {\n return results.slice(skip);\n }\n return results;\n }\n\n function rowToDocId(row) {\n var val = row.value;\n // Users can explicitly specify a joined doc _id, or it\n // defaults to the doc _id that emitted the key/value.\n var docId = (val && typeof val === 'object' && val._id) || row.id;\n return docId;\n }\n\n function readAttachmentsAsBlobOrBuffer(res) {\n res.rows.forEach(function (row) {\n var atts = row.doc && row.doc._attachments;\n if (!atts) {\n return;\n }\n Object.keys(atts).forEach(function (filename) {\n var att = atts[filename];\n atts[filename].data = b64ToBluffer(att.data, att.content_type);\n });\n });\n }\n\n function postprocessAttachments(opts) {\n return function (res) {\n if (opts.include_docs && opts.attachments && opts.binary) {\n readAttachmentsAsBlobOrBuffer(res);\n }\n return res;\n };\n }\n\n function addHttpParam(paramName, opts, params, asJson) {\n // add an http param from opts to params, optionally json-encoded\n var val = opts[paramName];\n if (typeof val !== 'undefined') {\n if (asJson) {\n val = encodeURIComponent(JSON.stringify(val));\n }\n params.push(paramName + '=' + val);\n }\n }\n\n function coerceInteger(integerCandidate) {\n if (typeof integerCandidate !== 'undefined') {\n var asNumber = Number(integerCandidate);\n // prevents e.g. '1foo' or '1.1' being coerced to 1\n if (!isNaN(asNumber) && asNumber === parseInt(integerCandidate, 10)) {\n return asNumber;\n } else {\n return integerCandidate;\n }\n }\n }\n\n function coerceOptions(opts) {\n opts.group_level = coerceInteger(opts.group_level);\n opts.limit = coerceInteger(opts.limit);\n opts.skip = coerceInteger(opts.skip);\n return opts;\n }\n\n function checkPositiveInteger(number) {\n if (number) {\n if (typeof number !== 'number') {\n return new QueryParseError('Invalid value for integer: \"' +\n number + '\"');\n }\n if (number < 0) {\n return new QueryParseError('Invalid value for positive integer: ' +\n '\"' + number + '\"');\n }\n }\n }\n\n function checkQueryParseError(options, fun) {\n var startkeyName = options.descending ? 'endkey' : 'startkey';\n var endkeyName = options.descending ? 'startkey' : 'endkey';\n\n if (typeof options[startkeyName] !== 'undefined' &&\n typeof options[endkeyName] !== 'undefined' &&\n collate(options[startkeyName], options[endkeyName]) > 0) {\n throw new QueryParseError('No rows can match your key range, ' +\n 'reverse your start_key and end_key or set {descending : true}');\n } else if (fun.reduce && options.reduce !== false) {\n if (options.include_docs) {\n throw new QueryParseError('{include_docs:true} is invalid for reduce');\n } else if (options.keys && options.keys.length > 1 &&\n !options.group && !options.group_level) {\n throw new QueryParseError('Multi-key fetches for reduce views must use ' +\n '{group: true}');\n }\n }\n ['group_level', 'limit', 'skip'].forEach(function (optionName) {\n var error = checkPositiveInteger(options[optionName]);\n if (error) {\n throw error;\n }\n });\n }\n\n function httpQuery(db, fun, opts) {\n // List of parameters to add to the PUT request\n var params = [];\n var body;\n var method = 'GET';\n var ok, status;\n\n // If opts.reduce exists and is defined, then add it to the list\n // of parameters.\n // If reduce=false then the results are that of only the map function\n // not the final result of map and reduce.\n addHttpParam('reduce', opts, params);\n addHttpParam('include_docs', opts, params);\n addHttpParam('attachments', opts, params);\n addHttpParam('limit', opts, params);\n addHttpParam('descending', opts, params);\n addHttpParam('group', opts, params);\n addHttpParam('group_level', opts, params);\n addHttpParam('skip', opts, params);\n addHttpParam('stale', opts, params);\n addHttpParam('conflicts', opts, params);\n addHttpParam('startkey', opts, params, true);\n addHttpParam('start_key', opts, params, true);\n addHttpParam('endkey', opts, params, true);\n addHttpParam('end_key', opts, params, true);\n addHttpParam('inclusive_end', opts, params);\n addHttpParam('key', opts, params, true);\n addHttpParam('update_seq', opts, params);\n\n // Format the list of parameters into a valid URI query string\n params = params.join('&');\n params = params === '' ? '' : '?' + params;\n\n // If keys are supplied, issue a POST to circumvent GET query string limits\n // see http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options\n if (typeof opts.keys !== 'undefined') {\n var MAX_URL_LENGTH = 2000;\n // according to http://stackoverflow.com/a/417184/680742,\n // the de facto URL length limit is 2000 characters\n\n var keysAsString =\n 'keys=' + encodeURIComponent(JSON.stringify(opts.keys));\n if (keysAsString.length + params.length + 1 <= MAX_URL_LENGTH) {\n // If the keys are short enough, do a GET. we do this to work around\n // Safari not understanding 304s on POSTs (see pouchdb/pouchdb#1239)\n params += (params[0] === '?' ? '&' : '?') + keysAsString;\n } else {\n method = 'POST';\n if (typeof fun === 'string') {\n body = {keys: opts.keys};\n } else { // fun is {map : mapfun}, so append to this\n fun.keys = opts.keys;\n }\n }\n }\n\n // We are referencing a query defined in the design doc\n if (typeof fun === 'string') {\n var parts = parseViewName(fun);\n return db.fetch('_design/' + parts[0] + '/_view/' + parts[1] + params, {\n headers: new h({'Content-Type': 'application/json'}),\n method: method,\n body: JSON.stringify(body)\n }).then(function (response) {\n ok = response.ok;\n status = response.status;\n return response.json();\n }).then(function (result) {\n if (!ok) {\n result.status = status;\n throw generateErrorFromResponse(result);\n }\n // fail the entire request if the result contains an error\n result.rows.forEach(function (row) {\n /* istanbul ignore if */\n if (row.value && row.value.error && row.value.error === \"builtin_reduce_error\") {\n throw new Error(row.reason);\n }\n });\n return result;\n }).then(postprocessAttachments(opts));\n }\n\n // We are using a temporary view, terrible for performance, good for testing\n body = body || {};\n Object.keys(fun).forEach(function (key) {\n if (Array.isArray(fun[key])) {\n body[key] = fun[key];\n } else {\n body[key] = fun[key].toString();\n }\n });\n\n return db.fetch('_temp_view' + params, {\n headers: new h({'Content-Type': 'application/json'}),\n method: 'POST',\n body: JSON.stringify(body)\n }).then(function (response) {\n ok = response.ok;\n status = response.status;\n return response.json();\n }).then(function (result) {\n if (!ok) {\n result.status = status;\n throw generateErrorFromResponse(result);\n }\n return result;\n }).then(postprocessAttachments(opts));\n }\n\n // custom adapters can define their own api._query\n // and override the default behavior\n /* istanbul ignore next */\n function customQuery(db, fun, opts) {\n return new Promise(function (resolve, reject) {\n db._query(fun, opts, function (err, res) {\n if (err) {\n return reject(err);\n }\n resolve(res);\n });\n });\n }\n\n // custom adapters can define their own api._viewCleanup\n // and override the default behavior\n /* istanbul ignore next */\n function customViewCleanup(db) {\n return new Promise(function (resolve, reject) {\n db._viewCleanup(function (err, res) {\n if (err) {\n return reject(err);\n }\n resolve(res);\n });\n });\n }\n\n function defaultsTo(value) {\n return function (reason) {\n /* istanbul ignore else */\n if (reason.status === 404) {\n return value;\n } else {\n throw reason;\n }\n };\n }\n\n // returns a promise for a list of docs to update, based on the input docId.\n // the order doesn't matter, because post-3.2.0, bulkDocs\n // is an atomic operation in all three adapters.\n function getDocsToPersist(docId, view, docIdsToChangesAndEmits) {\n var metaDocId = '_local/doc_' + docId;\n var defaultMetaDoc = {_id: metaDocId, keys: []};\n var docData = docIdsToChangesAndEmits.get(docId);\n var indexableKeysToKeyValues = docData[0];\n var changes = docData[1];\n\n function getMetaDoc() {\n if (isGenOne(changes)) {\n // generation 1, so we can safely assume initial state\n // for performance reasons (avoids unnecessary GETs)\n return Promise.resolve(defaultMetaDoc);\n }\n return view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc));\n }\n\n function getKeyValueDocs(metaDoc) {\n if (!metaDoc.keys.length) {\n // no keys, no need for a lookup\n return Promise.resolve({rows: []});\n }\n return view.db.allDocs({\n keys: metaDoc.keys,\n include_docs: true\n });\n }\n\n function processKeyValueDocs(metaDoc, kvDocsRes) {\n var kvDocs = [];\n var oldKeys = new ExportedSet();\n\n for (var i = 0, len = kvDocsRes.rows.length; i < len; i++) {\n var row = kvDocsRes.rows[i];\n var doc = row.doc;\n if (!doc) { // deleted\n continue;\n }\n kvDocs.push(doc);\n oldKeys.add(doc._id);\n doc._deleted = !indexableKeysToKeyValues.has(doc._id);\n if (!doc._deleted) {\n var keyValue = indexableKeysToKeyValues.get(doc._id);\n if ('value' in keyValue) {\n doc.value = keyValue.value;\n }\n }\n }\n var newKeys = mapToKeysArray(indexableKeysToKeyValues);\n newKeys.forEach(function (key) {\n if (!oldKeys.has(key)) {\n // new doc\n var kvDoc = {\n _id: key\n };\n var keyValue = indexableKeysToKeyValues.get(key);\n if ('value' in keyValue) {\n kvDoc.value = keyValue.value;\n }\n kvDocs.push(kvDoc);\n }\n });\n metaDoc.keys = uniq(newKeys.concat(metaDoc.keys));\n kvDocs.push(metaDoc);\n\n return kvDocs;\n }\n\n return getMetaDoc().then(function (metaDoc) {\n return getKeyValueDocs(metaDoc).then(function (kvDocsRes) {\n return processKeyValueDocs(metaDoc, kvDocsRes);\n });\n });\n }\n\n // updates all emitted key/value docs and metaDocs in the mrview database\n // for the given batch of documents from the source database\n function saveKeyValues(view, docIdsToChangesAndEmits, seq) {\n var seqDocId = '_local/lastSeq';\n return view.db.get(seqDocId)\n .catch(defaultsTo({_id: seqDocId, seq: 0}))\n .then(function (lastSeqDoc) {\n var docIds = mapToKeysArray(docIdsToChangesAndEmits);\n return Promise.all(docIds.map(function (docId) {\n return getDocsToPersist(docId, view, docIdsToChangesAndEmits);\n })).then(function (listOfDocsToPersist) {\n var docsToPersist = flatten(listOfDocsToPersist);\n lastSeqDoc.seq = seq;\n docsToPersist.push(lastSeqDoc);\n // write all docs in a single operation, update the seq once\n return view.db.bulkDocs({docs : docsToPersist});\n });\n });\n }\n\n function getQueue(view) {\n var viewName = typeof view === 'string' ? view : view.name;\n var queue = persistentQueues[viewName];\n if (!queue) {\n queue = persistentQueues[viewName] = new TaskQueue$1();\n }\n return queue;\n }\n\n function updateView(view) {\n return sequentialize(getQueue(view), function () {\n return updateViewInQueue(view);\n })();\n }\n\n function updateViewInQueue(view) {\n // bind the emit function once\n var mapResults;\n var doc;\n\n function emit(key, value) {\n var output = {id: doc._id, key: normalizeKey(key)};\n // Don't explicitly store the value unless it's defined and non-null.\n // This saves on storage space, because often people don't use it.\n if (typeof value !== 'undefined' && value !== null) {\n output.value = normalizeKey(value);\n }\n mapResults.push(output);\n }\n\n var mapFun = mapper(view.mapFun, emit);\n\n var currentSeq = view.seq || 0;\n\n function processChange(docIdsToChangesAndEmits, seq) {\n return function () {\n return saveKeyValues(view, docIdsToChangesAndEmits, seq);\n };\n }\n\n var queue = new TaskQueue$1();\n\n function processNextBatch() {\n return view.sourceDB.changes({\n return_docs: true,\n conflicts: true,\n include_docs: true,\n style: 'all_docs',\n since: currentSeq,\n limit: CHANGES_BATCH_SIZE$1\n }).then(processBatch);\n }\n\n function processBatch(response) {\n var results = response.results;\n if (!results.length) {\n return;\n }\n var docIdsToChangesAndEmits = createDocIdsToChangesAndEmits(results);\n queue.add(processChange(docIdsToChangesAndEmits, currentSeq));\n if (results.length < CHANGES_BATCH_SIZE$1) {\n return;\n }\n return processNextBatch();\n }\n\n function createDocIdsToChangesAndEmits(results) {\n var docIdsToChangesAndEmits = new ExportedMap();\n for (var i = 0, len = results.length; i < len; i++) {\n var change = results[i];\n if (change.doc._id[0] !== '_') {\n mapResults = [];\n doc = change.doc;\n\n if (!doc._deleted) {\n tryMap(view.sourceDB, mapFun, doc);\n }\n mapResults.sort(sortByKeyThenValue);\n\n var indexableKeysToKeyValues = createIndexableKeysToKeyValues(mapResults);\n docIdsToChangesAndEmits.set(change.doc._id, [\n indexableKeysToKeyValues,\n change.changes\n ]);\n }\n currentSeq = change.seq;\n }\n return docIdsToChangesAndEmits;\n }\n\n function createIndexableKeysToKeyValues(mapResults) {\n var indexableKeysToKeyValues = new ExportedMap();\n var lastKey;\n for (var i = 0, len = mapResults.length; i < len; i++) {\n var emittedKeyValue = mapResults[i];\n var complexKey = [emittedKeyValue.key, emittedKeyValue.id];\n if (i > 0 && collate(emittedKeyValue.key, lastKey) === 0) {\n complexKey.push(i); // dup key+id, so make it unique\n }\n indexableKeysToKeyValues.set(toIndexableString(complexKey), emittedKeyValue);\n lastKey = emittedKeyValue.key;\n }\n return indexableKeysToKeyValues;\n }\n\n return processNextBatch().then(function () {\n return queue.finish();\n }).then(function () {\n view.seq = currentSeq;\n });\n }\n\n function reduceView(view, results, options) {\n if (options.group_level === 0) {\n delete options.group_level;\n }\n\n var shouldGroup = options.group || options.group_level;\n\n var reduceFun = reducer(view.reduceFun);\n\n var groups = [];\n var lvl = isNaN(options.group_level) ? Number.POSITIVE_INFINITY :\n options.group_level;\n results.forEach(function (e) {\n var last = groups[groups.length - 1];\n var groupKey = shouldGroup ? e.key : null;\n\n // only set group_level for array keys\n if (shouldGroup && Array.isArray(groupKey)) {\n groupKey = groupKey.slice(0, lvl);\n }\n\n if (last && collate(last.groupKey, groupKey) === 0) {\n last.keys.push([e.key, e.id]);\n last.values.push(e.value);\n return;\n }\n groups.push({\n keys: [[e.key, e.id]],\n values: [e.value],\n groupKey: groupKey\n });\n });\n results = [];\n for (var i = 0, len = groups.length; i < len; i++) {\n var e = groups[i];\n var reduceTry = tryReduce(view.sourceDB, reduceFun, e.keys, e.values, false);\n if (reduceTry.error && reduceTry.error instanceof BuiltInError) {\n // CouchDB returns an error if a built-in errors out\n throw reduceTry.error;\n }\n results.push({\n // CouchDB just sets the value to null if a non-built-in errors out\n value: reduceTry.error ? null : reduceTry.output,\n key: e.groupKey\n });\n }\n // no total_rows/offset when reducing\n return {rows: sliceResults(results, options.limit, options.skip)};\n }\n\n function queryView(view, opts) {\n return sequentialize(getQueue(view), function () {\n return queryViewInQueue(view, opts);\n })();\n }\n\n function queryViewInQueue(view, opts) {\n var totalRows;\n var shouldReduce = view.reduceFun && opts.reduce !== false;\n var skip = opts.skip || 0;\n if (typeof opts.keys !== 'undefined' && !opts.keys.length) {\n // equivalent query\n opts.limit = 0;\n delete opts.keys;\n }\n\n function fetchFromView(viewOpts) {\n viewOpts.include_docs = true;\n return view.db.allDocs(viewOpts).then(function (res) {\n totalRows = res.total_rows;\n return res.rows.map(function (result) {\n\n // implicit migration - in older versions of PouchDB,\n // we explicitly stored the doc as {id: ..., key: ..., value: ...}\n // this is tested in a migration test\n /* istanbul ignore next */\n if ('value' in result.doc && typeof result.doc.value === 'object' &&\n result.doc.value !== null) {\n var keys = Object.keys(result.doc.value).sort();\n // this detection method is not perfect, but it's unlikely the user\n // emitted a value which was an object with these 3 exact keys\n var expectedKeys = ['id', 'key', 'value'];\n if (!(keys < expectedKeys || keys > expectedKeys)) {\n return result.doc.value;\n }\n }\n\n var parsedKeyAndDocId = parseIndexableString(result.doc._id);\n return {\n key: parsedKeyAndDocId[0],\n id: parsedKeyAndDocId[1],\n value: ('value' in result.doc ? result.doc.value : null)\n };\n });\n });\n }\n\n function onMapResultsReady(rows) {\n var finalResults;\n if (shouldReduce) {\n finalResults = reduceView(view, rows, opts);\n } else {\n finalResults = {\n total_rows: totalRows,\n offset: skip,\n rows: rows\n };\n }\n /* istanbul ignore if */\n if (opts.update_seq) {\n finalResults.update_seq = view.seq;\n }\n if (opts.include_docs) {\n var docIds = uniq(rows.map(rowToDocId));\n\n return view.sourceDB.allDocs({\n keys: docIds,\n include_docs: true,\n conflicts: opts.conflicts,\n attachments: opts.attachments,\n binary: opts.binary\n }).then(function (allDocsRes) {\n var docIdsToDocs = new ExportedMap();\n allDocsRes.rows.forEach(function (row) {\n docIdsToDocs.set(row.id, row.doc);\n });\n rows.forEach(function (row) {\n var docId = rowToDocId(row);\n var doc = docIdsToDocs.get(docId);\n if (doc) {\n row.doc = doc;\n }\n });\n return finalResults;\n });\n } else {\n return finalResults;\n }\n }\n\n if (typeof opts.keys !== 'undefined') {\n var keys = opts.keys;\n var fetchPromises = keys.map(function (key) {\n var viewOpts = {\n startkey : toIndexableString([key]),\n endkey : toIndexableString([key, {}])\n };\n /* istanbul ignore if */\n if (opts.update_seq) {\n viewOpts.update_seq = true;\n }\n return fetchFromView(viewOpts);\n });\n return Promise.all(fetchPromises).then(flatten).then(onMapResultsReady);\n } else { // normal query, no 'keys'\n var viewOpts = {\n descending : opts.descending\n };\n /* istanbul ignore if */\n if (opts.update_seq) {\n viewOpts.update_seq = true;\n }\n var startkey;\n var endkey;\n if ('start_key' in opts) {\n startkey = opts.start_key;\n }\n if ('startkey' in opts) {\n startkey = opts.startkey;\n }\n if ('end_key' in opts) {\n endkey = opts.end_key;\n }\n if ('endkey' in opts) {\n endkey = opts.endkey;\n }\n if (typeof startkey !== 'undefined') {\n viewOpts.startkey = opts.descending ?\n toIndexableString([startkey, {}]) :\n toIndexableString([startkey]);\n }\n if (typeof endkey !== 'undefined') {\n var inclusiveEnd = opts.inclusive_end !== false;\n if (opts.descending) {\n inclusiveEnd = !inclusiveEnd;\n }\n\n viewOpts.endkey = toIndexableString(\n inclusiveEnd ? [endkey, {}] : [endkey]);\n }\n if (typeof opts.key !== 'undefined') {\n var keyStart = toIndexableString([opts.key]);\n var keyEnd = toIndexableString([opts.key, {}]);\n if (viewOpts.descending) {\n viewOpts.endkey = keyStart;\n viewOpts.startkey = keyEnd;\n } else {\n viewOpts.startkey = keyStart;\n viewOpts.endkey = keyEnd;\n }\n }\n if (!shouldReduce) {\n if (typeof opts.limit === 'number') {\n viewOpts.limit = opts.limit;\n }\n viewOpts.skip = skip;\n }\n return fetchFromView(viewOpts).then(onMapResultsReady);\n }\n }\n\n function httpViewCleanup(db) {\n return db.fetch('_view_cleanup', {\n headers: new h({'Content-Type': 'application/json'}),\n method: 'POST'\n }).then(function (response) {\n return response.json();\n });\n }\n\n function localViewCleanup(db) {\n return db.get('_local/' + localDocName).then(function (metaDoc) {\n var docsToViews = new ExportedMap();\n Object.keys(metaDoc.views).forEach(function (fullViewName) {\n var parts = parseViewName(fullViewName);\n var designDocName = '_design/' + parts[0];\n var viewName = parts[1];\n var views = docsToViews.get(designDocName);\n if (!views) {\n views = new ExportedSet();\n docsToViews.set(designDocName, views);\n }\n views.add(viewName);\n });\n var opts = {\n keys : mapToKeysArray(docsToViews),\n include_docs : true\n };\n return db.allDocs(opts).then(function (res) {\n var viewsToStatus = {};\n res.rows.forEach(function (row) {\n var ddocName = row.key.substring(8); // cuts off '_design/'\n docsToViews.get(row.key).forEach(function (viewName) {\n var fullViewName = ddocName + '/' + viewName;\n /* istanbul ignore if */\n if (!metaDoc.views[fullViewName]) {\n // new format, without slashes, to support PouchDB 2.2.0\n // migration test in pouchdb's browser.migration.js verifies this\n fullViewName = viewName;\n }\n var viewDBNames = Object.keys(metaDoc.views[fullViewName]);\n // design doc deleted, or view function nonexistent\n var statusIsGood = row.doc && row.doc.views &&\n row.doc.views[viewName];\n viewDBNames.forEach(function (viewDBName) {\n viewsToStatus[viewDBName] =\n viewsToStatus[viewDBName] || statusIsGood;\n });\n });\n });\n var dbsToDelete = Object.keys(viewsToStatus).filter(\n function (viewDBName) { return !viewsToStatus[viewDBName]; });\n var destroyPromises = dbsToDelete.map(function (viewDBName) {\n return sequentialize(getQueue(viewDBName), function () {\n return new db.constructor(viewDBName, db.__opts).destroy();\n })();\n });\n return Promise.all(destroyPromises).then(function () {\n return {ok: true};\n });\n });\n }, defaultsTo({ok: true}));\n }\n\n function queryPromised(db, fun, opts) {\n /* istanbul ignore next */\n if (typeof db._query === 'function') {\n return customQuery(db, fun, opts);\n }\n if (isRemote(db)) {\n return httpQuery(db, fun, opts);\n }\n\n if (typeof fun !== 'string') {\n // temp_view\n checkQueryParseError(opts, fun);\n\n tempViewQueue.add(function () {\n var createViewPromise = createView(\n /* sourceDB */ db,\n /* viewName */ 'temp_view/temp_view',\n /* mapFun */ fun.map,\n /* reduceFun */ fun.reduce,\n /* temporary */ true,\n /* localDocName */ localDocName);\n return createViewPromise.then(function (view) {\n return fin(updateView(view).then(function () {\n return queryView(view, opts);\n }), function () {\n return view.db.destroy();\n });\n });\n });\n return tempViewQueue.finish();\n } else {\n // persistent view\n var fullViewName = fun;\n var parts = parseViewName(fullViewName);\n var designDocName = parts[0];\n var viewName = parts[1];\n return db.get('_design/' + designDocName).then(function (doc) {\n var fun = doc.views && doc.views[viewName];\n\n if (!fun) {\n // basic validator; it's assumed that every subclass would want this\n throw new NotFoundError('ddoc ' + doc._id + ' has no view named ' +\n viewName);\n }\n\n ddocValidator(doc, viewName);\n checkQueryParseError(opts, fun);\n\n var createViewPromise = createView(\n /* sourceDB */ db,\n /* viewName */ fullViewName,\n /* mapFun */ fun.map,\n /* reduceFun */ fun.reduce,\n /* temporary */ false,\n /* localDocName */ localDocName);\n return createViewPromise.then(function (view) {\n if (opts.stale === 'ok' || opts.stale === 'update_after') {\n if (opts.stale === 'update_after') {\n nextTick(function () {\n updateView(view);\n });\n }\n return queryView(view, opts);\n } else { // stale not ok\n return updateView(view).then(function () {\n return queryView(view, opts);\n });\n }\n });\n });\n }\n }\n\n function abstractQuery(fun, opts, callback) {\n var db = this;\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = opts ? coerceOptions(opts) : {};\n\n if (typeof fun === 'function') {\n fun = {map : fun};\n }\n\n var promise = Promise.resolve().then(function () {\n return queryPromised(db, fun, opts);\n });\n promisedCallback(promise, callback);\n return promise;\n }\n\n var abstractViewCleanup = callbackify(function () {\n var db = this;\n /* istanbul ignore next */\n if (typeof db._viewCleanup === 'function') {\n return customViewCleanup(db);\n }\n if (isRemote(db)) {\n return httpViewCleanup(db);\n }\n return localViewCleanup(db);\n });\n\n return {\n query: abstractQuery,\n viewCleanup: abstractViewCleanup\n };\n}\n\nvar builtInReduce = {\n _sum: function (keys, values) {\n return sum(values);\n },\n\n _count: function (keys, values) {\n return values.length;\n },\n\n _stats: function (keys, values) {\n // no need to implement rereduce=true, because Pouch\n // will never call it\n function sumsqr(values) {\n var _sumsqr = 0;\n for (var i = 0, len = values.length; i < len; i++) {\n var num = values[i];\n _sumsqr += (num * num);\n }\n return _sumsqr;\n }\n return {\n sum : sum(values),\n min : Math.min.apply(null, values),\n max : Math.max.apply(null, values),\n count : values.length,\n sumsqr : sumsqr(values)\n };\n }\n};\n\nfunction getBuiltIn(reduceFunString) {\n if (/^_sum/.test(reduceFunString)) {\n return builtInReduce._sum;\n } else if (/^_count/.test(reduceFunString)) {\n return builtInReduce._count;\n } else if (/^_stats/.test(reduceFunString)) {\n return builtInReduce._stats;\n } else if (/^_/.test(reduceFunString)) {\n throw new Error(reduceFunString + ' is not a supported reduce function.');\n }\n}\n\nfunction mapper(mapFun, emit) {\n // for temp_views one can use emit(doc, emit), see #38\n if (typeof mapFun === \"function\" && mapFun.length === 2) {\n var origMap = mapFun;\n return function (doc) {\n return origMap(doc, emit);\n };\n } else {\n return evalFunctionWithEval(mapFun.toString(), emit);\n }\n}\n\nfunction reducer(reduceFun) {\n var reduceFunString = reduceFun.toString();\n var builtIn = getBuiltIn(reduceFunString);\n if (builtIn) {\n return builtIn;\n } else {\n return evalFunctionWithEval(reduceFunString);\n }\n}\n\nfunction ddocValidator(ddoc, viewName) {\n var fun = ddoc.views && ddoc.views[viewName];\n if (typeof fun.map !== 'string') {\n throw new NotFoundError('ddoc ' + ddoc._id + ' has no string view named ' +\n viewName + ', instead found object of type: ' + typeof fun.map);\n }\n}\n\nvar localDocName = 'mrviews';\nvar abstract = createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator);\n\nfunction query(fun, opts, callback) {\n return abstract.query.call(this, fun, opts, callback);\n}\n\nfunction viewCleanup(callback) {\n return abstract.viewCleanup.call(this, callback);\n}\n\nvar mapreduce = {\n query: query,\n viewCleanup: viewCleanup\n};\n\nfunction isGenOne$1(rev) {\n return /^1-/.test(rev);\n}\n\nfunction fileHasChanged(localDoc, remoteDoc, filename) {\n return !localDoc._attachments ||\n !localDoc._attachments[filename] ||\n localDoc._attachments[filename].digest !== remoteDoc._attachments[filename].digest;\n}\n\nfunction getDocAttachments(db, doc) {\n var filenames = Object.keys(doc._attachments);\n return Promise.all(filenames.map(function (filename) {\n return db.getAttachment(doc._id, filename, {rev: doc._rev});\n }));\n}\n\nfunction getDocAttachmentsFromTargetOrSource(target, src, doc) {\n var doCheckForLocalAttachments = isRemote(src) && !isRemote(target);\n var filenames = Object.keys(doc._attachments);\n\n if (!doCheckForLocalAttachments) {\n return getDocAttachments(src, doc);\n }\n\n return target.get(doc._id).then(function (localDoc) {\n return Promise.all(filenames.map(function (filename) {\n if (fileHasChanged(localDoc, doc, filename)) {\n return src.getAttachment(doc._id, filename);\n }\n\n return target.getAttachment(localDoc._id, filename);\n }));\n }).catch(function (error) {\n /* istanbul ignore if */\n if (error.status !== 404) {\n throw error;\n }\n\n return getDocAttachments(src, doc);\n });\n}\n\nfunction createBulkGetOpts(diffs) {\n var requests = [];\n Object.keys(diffs).forEach(function (id) {\n var missingRevs = diffs[id].missing;\n missingRevs.forEach(function (missingRev) {\n requests.push({\n id: id,\n rev: missingRev\n });\n });\n });\n\n return {\n docs: requests,\n revs: true,\n latest: true\n };\n}\n\n//\n// Fetch all the documents from the src as described in the \"diffs\",\n// which is a mapping of docs IDs to revisions. If the state ever\n// changes to \"cancelled\", then the returned promise will be rejected.\n// Else it will be resolved with a list of fetched documents.\n//\nfunction getDocs(src, target, diffs, state) {\n diffs = clone(diffs); // we do not need to modify this\n\n var resultDocs = [],\n ok = true;\n\n function getAllDocs() {\n\n var bulkGetOpts = createBulkGetOpts(diffs);\n\n if (!bulkGetOpts.docs.length) { // optimization: skip empty requests\n return;\n }\n\n return src.bulkGet(bulkGetOpts).then(function (bulkGetResponse) {\n /* istanbul ignore if */\n if (state.cancelled) {\n throw new Error('cancelled');\n }\n return Promise.all(bulkGetResponse.results.map(function (bulkGetInfo) {\n return Promise.all(bulkGetInfo.docs.map(function (doc) {\n var remoteDoc = doc.ok;\n\n if (doc.error) {\n // when AUTO_COMPACTION is set, docs can be returned which look\n // like this: {\"missing\":\"1-7c3ac256b693c462af8442f992b83696\"}\n ok = false;\n }\n\n if (!remoteDoc || !remoteDoc._attachments) {\n return remoteDoc;\n }\n\n return getDocAttachmentsFromTargetOrSource(target, src, remoteDoc)\n .then(function (attachments) {\n var filenames = Object.keys(remoteDoc._attachments);\n attachments\n .forEach(function (attachment, i) {\n var att = remoteDoc._attachments[filenames[i]];\n delete att.stub;\n delete att.length;\n att.data = attachment;\n });\n\n return remoteDoc;\n });\n }));\n }))\n\n .then(function (results) {\n resultDocs = resultDocs.concat(flatten(results).filter(Boolean));\n });\n });\n }\n\n function hasAttachments(doc) {\n return doc._attachments && Object.keys(doc._attachments).length > 0;\n }\n\n function hasConflicts(doc) {\n return doc._conflicts && doc._conflicts.length > 0;\n }\n\n function fetchRevisionOneDocs(ids) {\n // Optimization: fetch gen-1 docs and attachments in\n // a single request using _all_docs\n return src.allDocs({\n keys: ids,\n include_docs: true,\n conflicts: true\n }).then(function (res) {\n if (state.cancelled) {\n throw new Error('cancelled');\n }\n res.rows.forEach(function (row) {\n if (row.deleted || !row.doc || !isGenOne$1(row.value.rev) ||\n hasAttachments(row.doc) || hasConflicts(row.doc)) {\n // if any of these conditions apply, we need to fetch using get()\n return;\n }\n\n // strip _conflicts array to appease CSG (#5793)\n /* istanbul ignore if */\n if (row.doc._conflicts) {\n delete row.doc._conflicts;\n }\n\n // the doc we got back from allDocs() is sufficient\n resultDocs.push(row.doc);\n delete diffs[row.id];\n });\n });\n }\n\n function getRevisionOneDocs() {\n // filter out the generation 1 docs and get them\n // leaving the non-generation one docs to be got otherwise\n var ids = Object.keys(diffs).filter(function (id) {\n var missing = diffs[id].missing;\n return missing.length === 1 && isGenOne$1(missing[0]);\n });\n if (ids.length > 0) {\n return fetchRevisionOneDocs(ids);\n }\n }\n\n function returnResult() {\n return { ok:ok, docs:resultDocs };\n }\n\n return Promise.resolve()\n .then(getRevisionOneDocs)\n .then(getAllDocs)\n .then(returnResult);\n}\n\nvar CHECKPOINT_VERSION = 1;\nvar REPLICATOR = \"pouchdb\";\n// This is an arbitrary number to limit the\n// amount of replication history we save in the checkpoint.\n// If we save too much, the checkpoing docs will become very big,\n// if we save fewer, we'll run a greater risk of having to\n// read all the changes from 0 when checkpoint PUTs fail\n// CouchDB 2.0 has a more involved history pruning,\n// but let's go for the simple version for now.\nvar CHECKPOINT_HISTORY_SIZE = 5;\nvar LOWEST_SEQ = 0;\n\nfunction updateCheckpoint(db, id, checkpoint, session, returnValue) {\n return db.get(id).catch(function (err) {\n if (err.status === 404) {\n if (db.adapter === 'http' || db.adapter === 'https') {\n explainError(\n 404, 'PouchDB is just checking if a remote checkpoint exists.'\n );\n }\n return {\n session_id: session,\n _id: id,\n history: [],\n replicator: REPLICATOR,\n version: CHECKPOINT_VERSION\n };\n }\n throw err;\n }).then(function (doc) {\n if (returnValue.cancelled) {\n return;\n }\n\n // if the checkpoint has not changed, do not update\n if (doc.last_seq === checkpoint) {\n return;\n }\n\n // Filter out current entry for this replication\n doc.history = (doc.history || []).filter(function (item) {\n return item.session_id !== session;\n });\n\n // Add the latest checkpoint to history\n doc.history.unshift({\n last_seq: checkpoint,\n session_id: session\n });\n\n // Just take the last pieces in history, to\n // avoid really big checkpoint docs.\n // see comment on history size above\n doc.history = doc.history.slice(0, CHECKPOINT_HISTORY_SIZE);\n\n doc.version = CHECKPOINT_VERSION;\n doc.replicator = REPLICATOR;\n\n doc.session_id = session;\n doc.last_seq = checkpoint;\n\n return db.put(doc).catch(function (err) {\n if (err.status === 409) {\n // retry; someone is trying to write a checkpoint simultaneously\n return updateCheckpoint(db, id, checkpoint, session, returnValue);\n }\n throw err;\n });\n });\n}\n\nfunction Checkpointer(src, target, id, returnValue, opts) {\n this.src = src;\n this.target = target;\n this.id = id;\n this.returnValue = returnValue;\n this.opts = opts || {};\n}\n\nCheckpointer.prototype.writeCheckpoint = function (checkpoint, session) {\n var self = this;\n return this.updateTarget(checkpoint, session).then(function () {\n return self.updateSource(checkpoint, session);\n });\n};\n\nCheckpointer.prototype.updateTarget = function (checkpoint, session) {\n if (this.opts.writeTargetCheckpoint) {\n return updateCheckpoint(this.target, this.id, checkpoint,\n session, this.returnValue);\n } else {\n return Promise.resolve(true);\n }\n};\n\nCheckpointer.prototype.updateSource = function (checkpoint, session) {\n if (this.opts.writeSourceCheckpoint) {\n var self = this;\n return updateCheckpoint(this.src, this.id, checkpoint,\n session, this.returnValue)\n .catch(function (err) {\n if (isForbiddenError(err)) {\n self.opts.writeSourceCheckpoint = false;\n return true;\n }\n throw err;\n });\n } else {\n return Promise.resolve(true);\n }\n};\n\nvar comparisons = {\n \"undefined\": function (targetDoc, sourceDoc) {\n // This is the previous comparison function\n if (collate(targetDoc.last_seq, sourceDoc.last_seq) === 0) {\n return sourceDoc.last_seq;\n }\n /* istanbul ignore next */\n return 0;\n },\n \"1\": function (targetDoc, sourceDoc) {\n // This is the comparison function ported from CouchDB\n return compareReplicationLogs(sourceDoc, targetDoc).last_seq;\n }\n};\n\nCheckpointer.prototype.getCheckpoint = function () {\n var self = this;\n\n if (self.opts && self.opts.writeSourceCheckpoint && !self.opts.writeTargetCheckpoint) {\n return self.src.get(self.id).then(function (sourceDoc) {\n return sourceDoc.last_seq || LOWEST_SEQ;\n }).catch(function (err) {\n /* istanbul ignore if */\n if (err.status !== 404) {\n throw err;\n }\n return LOWEST_SEQ;\n });\n }\n\n return self.target.get(self.id).then(function (targetDoc) {\n if (self.opts && self.opts.writeTargetCheckpoint && !self.opts.writeSourceCheckpoint) {\n return targetDoc.last_seq || LOWEST_SEQ;\n }\n\n return self.src.get(self.id).then(function (sourceDoc) {\n // Since we can't migrate an old version doc to a new one\n // (no session id), we just go with the lowest seq in this case\n /* istanbul ignore if */\n if (targetDoc.version !== sourceDoc.version) {\n return LOWEST_SEQ;\n }\n\n var version;\n if (targetDoc.version) {\n version = targetDoc.version.toString();\n } else {\n version = \"undefined\";\n }\n\n if (version in comparisons) {\n return comparisons[version](targetDoc, sourceDoc);\n }\n /* istanbul ignore next */\n return LOWEST_SEQ;\n }, function (err) {\n if (err.status === 404 && targetDoc.last_seq) {\n return self.src.put({\n _id: self.id,\n last_seq: LOWEST_SEQ\n }).then(function () {\n return LOWEST_SEQ;\n }, function (err) {\n if (isForbiddenError(err)) {\n self.opts.writeSourceCheckpoint = false;\n return targetDoc.last_seq;\n }\n /* istanbul ignore next */\n return LOWEST_SEQ;\n });\n }\n throw err;\n });\n }).catch(function (err) {\n if (err.status !== 404) {\n throw err;\n }\n return LOWEST_SEQ;\n });\n};\n// This checkpoint comparison is ported from CouchDBs source\n// they come from here:\n// https://github.com/apache/couchdb-couch-replicator/blob/master/src/couch_replicator.erl#L863-L906\n\nfunction compareReplicationLogs(srcDoc, tgtDoc) {\n if (srcDoc.session_id === tgtDoc.session_id) {\n return {\n last_seq: srcDoc.last_seq,\n history: srcDoc.history\n };\n }\n\n return compareReplicationHistory(srcDoc.history, tgtDoc.history);\n}\n\nfunction compareReplicationHistory(sourceHistory, targetHistory) {\n // the erlang loop via function arguments is not so easy to repeat in JS\n // therefore, doing this as recursion\n var S = sourceHistory[0];\n var sourceRest = sourceHistory.slice(1);\n var T = targetHistory[0];\n var targetRest = targetHistory.slice(1);\n\n if (!S || targetHistory.length === 0) {\n return {\n last_seq: LOWEST_SEQ,\n history: []\n };\n }\n\n var sourceId = S.session_id;\n /* istanbul ignore if */\n if (hasSessionId(sourceId, targetHistory)) {\n return {\n last_seq: S.last_seq,\n history: sourceHistory\n };\n }\n\n var targetId = T.session_id;\n if (hasSessionId(targetId, sourceRest)) {\n return {\n last_seq: T.last_seq,\n history: targetRest\n };\n }\n\n return compareReplicationHistory(sourceRest, targetRest);\n}\n\nfunction hasSessionId(sessionId, history) {\n var props = history[0];\n var rest = history.slice(1);\n\n if (!sessionId || history.length === 0) {\n return false;\n }\n\n if (sessionId === props.session_id) {\n return true;\n }\n\n return hasSessionId(sessionId, rest);\n}\n\nfunction isForbiddenError(err) {\n return typeof err.status === 'number' && Math.floor(err.status / 100) === 4;\n}\n\nvar STARTING_BACK_OFF = 0;\n\nfunction backOff(opts, returnValue, error, callback) {\n if (opts.retry === false) {\n returnValue.emit('error', error);\n returnValue.removeAllListeners();\n return;\n }\n /* istanbul ignore if */\n if (typeof opts.back_off_function !== 'function') {\n opts.back_off_function = defaultBackOff;\n }\n returnValue.emit('requestError', error);\n if (returnValue.state === 'active' || returnValue.state === 'pending') {\n returnValue.emit('paused', error);\n returnValue.state = 'stopped';\n var backOffSet = function backoffTimeSet() {\n opts.current_back_off = STARTING_BACK_OFF;\n };\n var removeBackOffSetter = function removeBackOffTimeSet() {\n returnValue.removeListener('active', backOffSet);\n };\n returnValue.once('paused', removeBackOffSetter);\n returnValue.once('active', backOffSet);\n }\n\n opts.current_back_off = opts.current_back_off || STARTING_BACK_OFF;\n opts.current_back_off = opts.back_off_function(opts.current_back_off);\n setTimeout(callback, opts.current_back_off);\n}\n\nfunction sortObjectPropertiesByKey(queryParams) {\n return Object.keys(queryParams).sort(collate).reduce(function (result, key) {\n result[key] = queryParams[key];\n return result;\n }, {});\n}\n\n// Generate a unique id particular to this replication.\n// Not guaranteed to align perfectly with CouchDB's rep ids.\nfunction generateReplicationId(src, target, opts) {\n var docIds = opts.doc_ids ? opts.doc_ids.sort(collate) : '';\n var filterFun = opts.filter ? opts.filter.toString() : '';\n var queryParams = '';\n var filterViewName = '';\n var selector = '';\n\n // possibility for checkpoints to be lost here as behaviour of\n // JSON.stringify is not stable (see #6226)\n /* istanbul ignore if */\n if (opts.selector) {\n selector = JSON.stringify(opts.selector);\n }\n\n if (opts.filter && opts.query_params) {\n queryParams = JSON.stringify(sortObjectPropertiesByKey(opts.query_params));\n }\n\n if (opts.filter && opts.filter === '_view') {\n filterViewName = opts.view.toString();\n }\n\n return Promise.all([src.id(), target.id()]).then(function (res) {\n var queryData = res[0] + res[1] + filterFun + filterViewName +\n queryParams + docIds + selector;\n return new Promise(function (resolve) {\n binaryMd5(queryData, resolve);\n });\n }).then(function (md5sum) {\n // can't use straight-up md5 alphabet, because\n // the char '/' is interpreted as being for attachments,\n // and + is also not url-safe\n md5sum = md5sum.replace(/\\//g, '.').replace(/\\+/g, '_');\n return '_local/' + md5sum;\n });\n}\n\nfunction replicate(src, target, opts, returnValue, result) {\n var batches = []; // list of batches to be processed\n var currentBatch; // the batch currently being processed\n var pendingBatch = {\n seq: 0,\n changes: [],\n docs: []\n }; // next batch, not yet ready to be processed\n var writingCheckpoint = false; // true while checkpoint is being written\n var changesCompleted = false; // true when all changes received\n var replicationCompleted = false; // true when replication has completed\n var last_seq = 0;\n var continuous = opts.continuous || opts.live || false;\n var batch_size = opts.batch_size || 100;\n var batches_limit = opts.batches_limit || 10;\n var changesPending = false; // true while src.changes is running\n var doc_ids = opts.doc_ids;\n var selector = opts.selector;\n var repId;\n var checkpointer;\n var changedDocs = [];\n // Like couchdb, every replication gets a unique session id\n var session = uuid();\n\n result = result || {\n ok: true,\n start_time: new Date().toISOString(),\n docs_read: 0,\n docs_written: 0,\n doc_write_failures: 0,\n errors: []\n };\n\n var changesOpts = {};\n returnValue.ready(src, target);\n\n function initCheckpointer() {\n if (checkpointer) {\n return Promise.resolve();\n }\n return generateReplicationId(src, target, opts).then(function (res) {\n repId = res;\n\n var checkpointOpts = {};\n if (opts.checkpoint === false) {\n checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: false };\n } else if (opts.checkpoint === 'source') {\n checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: false };\n } else if (opts.checkpoint === 'target') {\n checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: true };\n } else {\n checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: true };\n }\n\n checkpointer = new Checkpointer(src, target, repId, returnValue, checkpointOpts);\n });\n }\n\n function writeDocs() {\n changedDocs = [];\n\n if (currentBatch.docs.length === 0) {\n return;\n }\n var docs = currentBatch.docs;\n var bulkOpts = {timeout: opts.timeout};\n return target.bulkDocs({docs: docs, new_edits: false}, bulkOpts).then(function (res) {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n throw new Error('cancelled');\n }\n\n // `res` doesn't include full documents (which live in `docs`), so we create a map of \n // (id -> error), and check for errors while iterating over `docs`\n var errorsById = Object.create(null);\n res.forEach(function (res) {\n if (res.error) {\n errorsById[res.id] = res;\n }\n });\n\n var errorsNo = Object.keys(errorsById).length;\n result.doc_write_failures += errorsNo;\n result.docs_written += docs.length - errorsNo;\n\n docs.forEach(function (doc) {\n var error = errorsById[doc._id];\n if (error) {\n result.errors.push(error);\n // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)\n var errorName = (error.name || '').toLowerCase();\n if (errorName === 'unauthorized' || errorName === 'forbidden') {\n returnValue.emit('denied', clone(error));\n } else {\n throw error;\n }\n } else {\n changedDocs.push(doc);\n }\n });\n\n }, function (err) {\n result.doc_write_failures += docs.length;\n throw err;\n });\n }\n\n function finishBatch() {\n if (currentBatch.error) {\n throw new Error('There was a problem getting docs.');\n }\n result.last_seq = last_seq = currentBatch.seq;\n var outResult = clone(result);\n if (changedDocs.length) {\n outResult.docs = changedDocs;\n // Attach 'pending' property if server supports it (CouchDB 2.0+)\n /* istanbul ignore if */\n if (typeof currentBatch.pending === 'number') {\n outResult.pending = currentBatch.pending;\n delete currentBatch.pending;\n }\n returnValue.emit('change', outResult);\n }\n writingCheckpoint = true;\n return checkpointer.writeCheckpoint(currentBatch.seq,\n session).then(function () {\n writingCheckpoint = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n throw new Error('cancelled');\n }\n currentBatch = undefined;\n getChanges();\n }).catch(function (err) {\n onCheckpointError(err);\n throw err;\n });\n }\n\n function getDiffs() {\n var diff = {};\n currentBatch.changes.forEach(function (change) {\n // Couchbase Sync Gateway emits these, but we can ignore them\n /* istanbul ignore if */\n if (change.id === \"_user/\") {\n return;\n }\n diff[change.id] = change.changes.map(function (x) {\n return x.rev;\n });\n });\n return target.revsDiff(diff).then(function (diffs) {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n throw new Error('cancelled');\n }\n // currentBatch.diffs elements are deleted as the documents are written\n currentBatch.diffs = diffs;\n });\n }\n\n function getBatchDocs() {\n return getDocs(src, target, currentBatch.diffs, returnValue).then(function (got) {\n currentBatch.error = !got.ok;\n got.docs.forEach(function (doc) {\n delete currentBatch.diffs[doc._id];\n result.docs_read++;\n currentBatch.docs.push(doc);\n });\n });\n }\n\n function startNextBatch() {\n if (returnValue.cancelled || currentBatch) {\n return;\n }\n if (batches.length === 0) {\n processPendingBatch(true);\n return;\n }\n currentBatch = batches.shift();\n getDiffs()\n .then(getBatchDocs)\n .then(writeDocs)\n .then(finishBatch)\n .then(startNextBatch)\n .catch(function (err) {\n abortReplication('batch processing terminated with error', err);\n });\n }\n\n\n function processPendingBatch(immediate) {\n if (pendingBatch.changes.length === 0) {\n if (batches.length === 0 && !currentBatch) {\n if ((continuous && changesOpts.live) || changesCompleted) {\n returnValue.state = 'pending';\n returnValue.emit('paused');\n }\n if (changesCompleted) {\n completeReplication();\n }\n }\n return;\n }\n if (\n immediate ||\n changesCompleted ||\n pendingBatch.changes.length >= batch_size\n ) {\n batches.push(pendingBatch);\n pendingBatch = {\n seq: 0,\n changes: [],\n docs: []\n };\n if (returnValue.state === 'pending' || returnValue.state === 'stopped') {\n returnValue.state = 'active';\n returnValue.emit('active');\n }\n startNextBatch();\n }\n }\n\n\n function abortReplication(reason, err) {\n if (replicationCompleted) {\n return;\n }\n if (!err.message) {\n err.message = reason;\n }\n result.ok = false;\n result.status = 'aborting';\n batches = [];\n pendingBatch = {\n seq: 0,\n changes: [],\n docs: []\n };\n completeReplication(err);\n }\n\n\n function completeReplication(fatalError) {\n if (replicationCompleted) {\n return;\n }\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n result.status = 'cancelled';\n if (writingCheckpoint) {\n return;\n }\n }\n result.status = result.status || 'complete';\n result.end_time = new Date().toISOString();\n result.last_seq = last_seq;\n replicationCompleted = true;\n\n if (fatalError) {\n // need to extend the error because Firefox considers \".result\" read-only\n fatalError = createError(fatalError);\n fatalError.result = result;\n\n // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)\n var errorName = (fatalError.name || '').toLowerCase();\n if (errorName === 'unauthorized' || errorName === 'forbidden') {\n returnValue.emit('error', fatalError);\n returnValue.removeAllListeners();\n } else {\n backOff(opts, returnValue, fatalError, function () {\n replicate(src, target, opts, returnValue);\n });\n }\n } else {\n returnValue.emit('complete', result);\n returnValue.removeAllListeners();\n }\n }\n\n\n function onChange(change, pending, lastSeq) {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n return completeReplication();\n }\n // Attach 'pending' property if server supports it (CouchDB 2.0+)\n /* istanbul ignore if */\n if (typeof pending === 'number') {\n pendingBatch.pending = pending;\n }\n\n var filter = filterChange(opts)(change);\n if (!filter) {\n return;\n }\n pendingBatch.seq = change.seq || lastSeq;\n pendingBatch.changes.push(change);\n nextTick(function () {\n processPendingBatch(batches.length === 0 && changesOpts.live);\n });\n }\n\n\n function onChangesComplete(changes) {\n changesPending = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n return completeReplication();\n }\n\n // if no results were returned then we're done,\n // else fetch more\n if (changes.results.length > 0) {\n changesOpts.since = changes.results[changes.results.length - 1].seq;\n getChanges();\n processPendingBatch(true);\n } else {\n\n var complete = function () {\n if (continuous) {\n changesOpts.live = true;\n getChanges();\n } else {\n changesCompleted = true;\n }\n processPendingBatch(true);\n };\n\n // update the checkpoint so we start from the right seq next time\n if (!currentBatch && changes.results.length === 0) {\n writingCheckpoint = true;\n checkpointer.writeCheckpoint(changes.last_seq,\n session).then(function () {\n writingCheckpoint = false;\n result.last_seq = last_seq = changes.last_seq;\n complete();\n })\n .catch(onCheckpointError);\n } else {\n complete();\n }\n }\n }\n\n\n function onChangesError(err) {\n changesPending = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n return completeReplication();\n }\n abortReplication('changes rejected', err);\n }\n\n\n function getChanges() {\n if (!(\n !changesPending &&\n !changesCompleted &&\n batches.length < batches_limit\n )) {\n return;\n }\n changesPending = true;\n function abortChanges() {\n changes.cancel();\n }\n function removeListener() {\n returnValue.removeListener('cancel', abortChanges);\n }\n\n if (returnValue._changes) { // remove old changes() and listeners\n returnValue.removeListener('cancel', returnValue._abortChanges);\n returnValue._changes.cancel();\n }\n returnValue.once('cancel', abortChanges);\n\n var changes = src.changes(changesOpts)\n .on('change', onChange);\n changes.then(removeListener, removeListener);\n changes.then(onChangesComplete)\n .catch(onChangesError);\n\n if (opts.retry) {\n // save for later so we can cancel if necessary\n returnValue._changes = changes;\n returnValue._abortChanges = abortChanges;\n }\n }\n\n\n function startChanges() {\n initCheckpointer().then(function () {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n return;\n }\n return checkpointer.getCheckpoint().then(function (checkpoint) {\n last_seq = checkpoint;\n changesOpts = {\n since: last_seq,\n limit: batch_size,\n batch_size: batch_size,\n style: 'all_docs',\n doc_ids: doc_ids,\n selector: selector,\n return_docs: true // required so we know when we're done\n };\n if (opts.filter) {\n if (typeof opts.filter !== 'string') {\n // required for the client-side filter in onChange\n changesOpts.include_docs = true;\n } else { // ddoc filter\n changesOpts.filter = opts.filter;\n }\n }\n if ('heartbeat' in opts) {\n changesOpts.heartbeat = opts.heartbeat;\n }\n if ('timeout' in opts) {\n changesOpts.timeout = opts.timeout;\n }\n if (opts.query_params) {\n changesOpts.query_params = opts.query_params;\n }\n if (opts.view) {\n changesOpts.view = opts.view;\n }\n getChanges();\n });\n }).catch(function (err) {\n abortReplication('getCheckpoint rejected with ', err);\n });\n }\n\n /* istanbul ignore next */\n function onCheckpointError(err) {\n writingCheckpoint = false;\n abortReplication('writeCheckpoint completed with error', err);\n }\n\n /* istanbul ignore if */\n if (returnValue.cancelled) { // cancelled immediately\n completeReplication();\n return;\n }\n\n if (!returnValue._addedListeners) {\n returnValue.once('cancel', completeReplication);\n\n if (typeof opts.complete === 'function') {\n returnValue.once('error', opts.complete);\n returnValue.once('complete', function (result) {\n opts.complete(null, result);\n });\n }\n returnValue._addedListeners = true;\n }\n\n if (typeof opts.since === 'undefined') {\n startChanges();\n } else {\n initCheckpointer().then(function () {\n writingCheckpoint = true;\n return checkpointer.writeCheckpoint(opts.since, session);\n }).then(function () {\n writingCheckpoint = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n return;\n }\n last_seq = opts.since;\n startChanges();\n }).catch(onCheckpointError);\n }\n}\n\n// We create a basic promise so the caller can cancel the replication possibly\n// before we have actually started listening to changes etc\ninherits(Replication, EventEmitter);\nfunction Replication() {\n EventEmitter.call(this);\n this.cancelled = false;\n this.state = 'pending';\n var self = this;\n var promise = new Promise(function (fulfill, reject) {\n self.once('complete', fulfill);\n self.once('error', reject);\n });\n self.then = function (resolve, reject) {\n return promise.then(resolve, reject);\n };\n self.catch = function (reject) {\n return promise.catch(reject);\n };\n // As we allow error handling via \"error\" event as well,\n // put a stub in here so that rejecting never throws UnhandledError.\n self.catch(function () {});\n}\n\nReplication.prototype.cancel = function () {\n this.cancelled = true;\n this.state = 'cancelled';\n this.emit('cancel');\n};\n\nReplication.prototype.ready = function (src, target) {\n var self = this;\n if (self._readyCalled) {\n return;\n }\n self._readyCalled = true;\n\n function onDestroy() {\n self.cancel();\n }\n src.once('destroyed', onDestroy);\n target.once('destroyed', onDestroy);\n function cleanup() {\n src.removeListener('destroyed', onDestroy);\n target.removeListener('destroyed', onDestroy);\n }\n self.once('complete', cleanup);\n};\n\nfunction toPouch(db, opts) {\n var PouchConstructor = opts.PouchConstructor;\n if (typeof db === 'string') {\n return new PouchConstructor(db, opts);\n } else {\n return db;\n }\n}\n\nfunction replicateWrapper(src, target, opts, callback) {\n\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n if (typeof opts === 'undefined') {\n opts = {};\n }\n\n if (opts.doc_ids && !Array.isArray(opts.doc_ids)) {\n throw createError(BAD_REQUEST,\n \"`doc_ids` filter parameter is not a list.\");\n }\n\n opts.complete = callback;\n opts = clone(opts);\n opts.continuous = opts.continuous || opts.live;\n opts.retry = ('retry' in opts) ? opts.retry : false;\n /*jshint validthis:true */\n opts.PouchConstructor = opts.PouchConstructor || this;\n var replicateRet = new Replication(opts);\n var srcPouch = toPouch(src, opts);\n var targetPouch = toPouch(target, opts);\n replicate(srcPouch, targetPouch, opts, replicateRet);\n return replicateRet;\n}\n\ninherits(Sync, EventEmitter);\nfunction sync(src, target, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n if (typeof opts === 'undefined') {\n opts = {};\n }\n opts = clone(opts);\n /*jshint validthis:true */\n opts.PouchConstructor = opts.PouchConstructor || this;\n src = toPouch(src, opts);\n target = toPouch(target, opts);\n return new Sync(src, target, opts, callback);\n}\n\nfunction Sync(src, target, opts, callback) {\n var self = this;\n this.canceled = false;\n\n var optsPush = opts.push ? $inject_Object_assign({}, opts, opts.push) : opts;\n var optsPull = opts.pull ? $inject_Object_assign({}, opts, opts.pull) : opts;\n\n this.push = replicateWrapper(src, target, optsPush);\n this.pull = replicateWrapper(target, src, optsPull);\n\n this.pushPaused = true;\n this.pullPaused = true;\n\n function pullChange(change) {\n self.emit('change', {\n direction: 'pull',\n change: change\n });\n }\n function pushChange(change) {\n self.emit('change', {\n direction: 'push',\n change: change\n });\n }\n function pushDenied(doc) {\n self.emit('denied', {\n direction: 'push',\n doc: doc\n });\n }\n function pullDenied(doc) {\n self.emit('denied', {\n direction: 'pull',\n doc: doc\n });\n }\n function pushPaused() {\n self.pushPaused = true;\n /* istanbul ignore if */\n if (self.pullPaused) {\n self.emit('paused');\n }\n }\n function pullPaused() {\n self.pullPaused = true;\n /* istanbul ignore if */\n if (self.pushPaused) {\n self.emit('paused');\n }\n }\n function pushActive() {\n self.pushPaused = false;\n /* istanbul ignore if */\n if (self.pullPaused) {\n self.emit('active', {\n direction: 'push'\n });\n }\n }\n function pullActive() {\n self.pullPaused = false;\n /* istanbul ignore if */\n if (self.pushPaused) {\n self.emit('active', {\n direction: 'pull'\n });\n }\n }\n\n var removed = {};\n\n function removeAll(type) { // type is 'push' or 'pull'\n return function (event, func) {\n var isChange = event === 'change' &&\n (func === pullChange || func === pushChange);\n var isDenied = event === 'denied' &&\n (func === pullDenied || func === pushDenied);\n var isPaused = event === 'paused' &&\n (func === pullPaused || func === pushPaused);\n var isActive = event === 'active' &&\n (func === pullActive || func === pushActive);\n\n if (isChange || isDenied || isPaused || isActive) {\n if (!(event in removed)) {\n removed[event] = {};\n }\n removed[event][type] = true;\n if (Object.keys(removed[event]).length === 2) {\n // both push and pull have asked to be removed\n self.removeAllListeners(event);\n }\n }\n };\n }\n\n if (opts.live) {\n this.push.on('complete', self.pull.cancel.bind(self.pull));\n this.pull.on('complete', self.push.cancel.bind(self.push));\n }\n\n function addOneListener(ee, event, listener) {\n if (ee.listeners(event).indexOf(listener) == -1) {\n ee.on(event, listener);\n }\n }\n\n this.on('newListener', function (event) {\n if (event === 'change') {\n addOneListener(self.pull, 'change', pullChange);\n addOneListener(self.push, 'change', pushChange);\n } else if (event === 'denied') {\n addOneListener(self.pull, 'denied', pullDenied);\n addOneListener(self.push, 'denied', pushDenied);\n } else if (event === 'active') {\n addOneListener(self.pull, 'active', pullActive);\n addOneListener(self.push, 'active', pushActive);\n } else if (event === 'paused') {\n addOneListener(self.pull, 'paused', pullPaused);\n addOneListener(self.push, 'paused', pushPaused);\n }\n });\n\n this.on('removeListener', function (event) {\n if (event === 'change') {\n self.pull.removeListener('change', pullChange);\n self.push.removeListener('change', pushChange);\n } else if (event === 'denied') {\n self.pull.removeListener('denied', pullDenied);\n self.push.removeListener('denied', pushDenied);\n } else if (event === 'active') {\n self.pull.removeListener('active', pullActive);\n self.push.removeListener('active', pushActive);\n } else if (event === 'paused') {\n self.pull.removeListener('paused', pullPaused);\n self.push.removeListener('paused', pushPaused);\n }\n });\n\n this.pull.on('removeListener', removeAll('pull'));\n this.push.on('removeListener', removeAll('push'));\n\n var promise = Promise.all([\n this.push,\n this.pull\n ]).then(function (resp) {\n var out = {\n push: resp[0],\n pull: resp[1]\n };\n self.emit('complete', out);\n if (callback) {\n callback(null, out);\n }\n self.removeAllListeners();\n return out;\n }, function (err) {\n self.cancel();\n if (callback) {\n // if there's a callback, then the callback can receive\n // the error event\n callback(err);\n } else {\n // if there's no callback, then we're safe to emit an error\n // event, which would otherwise throw an unhandled error\n // due to 'error' being a special event in EventEmitters\n self.emit('error', err);\n }\n self.removeAllListeners();\n if (callback) {\n // no sense throwing if we're already emitting an 'error' event\n throw err;\n }\n });\n\n this.then = function (success, err) {\n return promise.then(success, err);\n };\n\n this.catch = function (err) {\n return promise.catch(err);\n };\n}\n\nSync.prototype.cancel = function () {\n if (!this.canceled) {\n this.canceled = true;\n this.push.cancel();\n this.pull.cancel();\n }\n};\n\nfunction replication(PouchDB) {\n PouchDB.replicate = replicateWrapper;\n PouchDB.sync = sync;\n\n Object.defineProperty(PouchDB.prototype, 'replicate', {\n get: function () {\n var self = this;\n if (typeof this.replicateMethods === 'undefined') {\n this.replicateMethods = {\n from: function (other, opts, callback) {\n return self.constructor.replicate(other, self, opts, callback);\n },\n to: function (other, opts, callback) {\n return self.constructor.replicate(self, other, opts, callback);\n }\n };\n }\n return this.replicateMethods;\n }\n });\n\n PouchDB.prototype.sync = function (dbName, opts, callback) {\n return this.constructor.sync(this, dbName, opts, callback);\n };\n}\n\nPouchDB.plugin(IDBPouch)\n .plugin(HttpPouch$1)\n .plugin(mapreduce)\n .plugin(replication);\n\n// Pull from src because pouchdb-node/pouchdb-browser themselves\n\nexport default PouchDB;\n","import DataUtils,\n{\n REQUEST_TYPE_GET,\n REQUEST_TYPE_PUT,\n REQUEST_TYPE_POST,\n REQUEST_TYPE_DELETE,\n CONTENT_TYPE_JSON,\n CONTENT_TYPE_FORM\n}\nfrom '../../../../brain/tools/utilities/DataUtils';\nimport * as DataEvent from '../../../../brain/tools/events/DataEvent';\nimport DisplayManager from './controllers/DisplayManager';\nimport PouchDB from 'pouchdb';\nexport default class Base\n{\n //--------------------------\n // constructor\n //--------------------------\n //TODO: Flip to unified structure defined in BMG, brah\n constructor()\n {\n var self = this;\n var admin = [];\n var folio = [];\n var displayManager = [];\n this.dataUtils = new DataUtils();\n this.settings = [];\n //this.start();\n this.loadSettings();\n }\n start()\n {\n this.displayManager = new DisplayManager();\n }\n //--------------------------\n // methods\n //--------------------------\n loadSettings()\n {\n var self = this;\n this.dataUtils.request('/api/post', DataEvent.SETTINGS_LOADED).then((response) =>\n {\n //let posts = JSON.parse(response['request'].response);\n var db = new PouchDB('forfipamo');\n \n /** \n self.dataUtils.request(\"/api/post/couch\", DataEvent.POST_IMAGE_ADDED, REQUEST_TYPE_POST, CONTENT_TYPE_JSON, db).then((response) =>\n {\n console.log(JSON.parse(response.request['response']).url);\n }).catch((err) =>\n {\n console.log(err)\n })\n */\n \n var remote = new PouchDB('http://are0h:pa$$@localhost:5984/forfipamo');\n db.sync(remote).then(result=>{\n console.log(result);\n }).catch(err=>{\n console.log(err);\n })\n \n //console.log(posts.length);\n this.start();\n //transfer \n }).catch((err) =>\n {\n //console.log(err);\n });\n }\n //--------------------------\n // event handlers\n //--------------------------\n}","import Base from './Base'\n\ndocument.addEventListener('DOMContentLoaded', function() {\n\n var base = new Base();\n}, false);\n"]}