summaryrefslogtreecommitdiff
path: root/webapp/static/pogospace/3.2860b24d78cee11b8d5e.worker.js.map
blob: 44045651a9ad09f550e47edc29dbba176564e034 (plain)
1
{"version":3,"sources":["webpack:////home/user/tracespace/node_modules/dexie/dist/dexie.mjs"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","keys","isArray","Array","_global","self","window","global","extend","obj","extension","forEach","key","Promise","getProto","getPrototypeOf","_hasOwn","hasOwn","prop","props","proto","setProp","defineProperty","functionOrGetSet","options","get","set","configurable","value","writable","derive","Child","from","Parent","create","bind","getOwnPropertyDescriptor","_slice","slice","args","start","end","override","origFunc","overridedFactory","assert","b","Error","asap","fn","setImmediate","setTimeout","getByKeyPath","keyPath","rv","l","val","push","period","indexOf","innerObj","substr","undefined","setByKeyPath","isFrozen","currentKeyPath","remainingKeyPath","isNaN","parseInt","splice","shallowClone","m","concat","flatten","a","intrinsicTypes","split","map","num","filter","deepClone","any","constructor","getObjectDiff","prfx","ap","bp","iteratorSymbol","Symbol","iterator","getIteratorOf","x","NO_CHAR_ARRAY","getArrayOf","arrayLike","it","next","done","debug","location","test","href","setDebug","libraryFilter","NEEDS_THROW_FOR_STACK","stack","getErrorWithStack","e","prettyStack","exception","numIgnoredFrames","name","message","frame","join","idbDomErrorNames","errorList","defaultTexts","VersionChanged","DatabaseClosed","Abort","TransactionInactive","DexieError","msg","_e","getMultiErrorMessage","failures","toString","v","ModifyError","successCount","failedKeys","BulkError","_stack","errnames","reduce","BaseException","exceptions","fullName","msgOrInner","inner","Syntax","SyntaxError","Type","TypeError","Range","RangeError","exceptionMap","fullNameExceptions","nop","mirror","pureFunctionChain","f1","f2","callBoth","on1","on2","hookCreatingChain","res","onsuccess","onerror","res2","hookDeletingChain","hookUpdatingChain","modifications","reverseStoppableEventChain","promisableChain","then","thiz","INTERNAL","LONG_STACKS_CLIP_LIMIT","ZONE_ECHO_LIMIT","nativePromiseInstanceAndProto","Function","P","resolve","resolvedNativePromise","nativePromiseProto","resolvedGlobalPromise","nativePromiseThen","NativePromise","AsyncFunction","patchGlobalPromise","stack_being_generated","schedulePhysicalTick","physicalTick","MutationObserver","hiddenDiv","document","createElement","observe","attributes","setAttribute","asap$1","callback","microtickQueue","needsNewPhysicalTick","isOutsideMicroTick","unhandledErrors","rejectingErrors","currentFulfiller","rejectionMapper","globalPSD","id","ref","unhandleds","onunhandled","globalError","pgp","env","finalize","uh","PSD","numScheduledCalls","tickFinalizers","Promise$1","_listeners","onuncatched","_lib","psd","_PSD","_stackHolder","_prev","_numPrev","_state","_value","handleRejection","executePromiseTask","promise","shouldExecuteTick","beginMicroTickScope","reject","_then","propagateAllListeners","endMicroTickScope","ex","thenProp","microTaskId","totalEchoes","onFulfilled","onRejected","_this","possibleAwait","decrementExpectedAwaits","propagateToListener","Listener","nativeAwaitCompatibleWrap","linkToPreviousPromise","zone","reason","_promise","tryCatch","origProp","getPropertyDescriptor","some","addPossiblyUnhandledError","listeners","len","finalizePhysicalTick","listener","cb","callListener","ret","markErrorAsHandled","prev","numPrev","wasRootExec","callbacks","item","unhandledErrs","finalizers","PromiseReject","wrap","errorCatcher","outerScope","switchToZone","catch","type","handler","err","finally","onFinally","getStack","stacks","limit","errorName","failure","timeout","ms","Infinity","handle","Timeout","clearTimeout","toStringTag","snapShot","all","values","onPossibleParallellAsync","remaining","race","newPSD","newScope","usePSD","scheduler","follow","zoneProps","finalizer","run_at_end_of_this_or_next_physical_tick","task","awaits","echoes","taskCounter","zoneStack","zoneEchoes","zone_id_counter","props$$1","a1","a2","parent","globalEnv","PromiseProp","nthen","getPatchedPromiseThen","gthen","incrementExpectedAwaits","sourceTaskId","possiblePromise","rejection","zoneLeaveEcho","pop","targetZone","bEnteringZone","job","currentZone","GlobalPromise","targetEnv","a3","outerZone","origThen","onResolved","UNHANDLEDREJECTION","event","eventData","createEvent","initEvent","CustomEvent","detail","dispatchEvent","PromiseRejectionEvent","onunhandledrejection","_","defaultPrevented","console","warn","maxString","String","fromCharCode","INVALID_KEY_ARGUMENT","STRING_EXPECTED","connections","isIEOrEdge","navigator","userAgent","hasIEDeleteObjectStoreBug","hangsOnDeleteLargeKeyRange","dexieStackFrameFilter","DBNAMES_DB","combine","filter1","filter2","AnyRange","lower","lowerOpen","upper","upperOpen","Table","_trans","mode","writeLocked","trans","_tx","tableName","checkTableInTransaction","schema","NotFound","idbtrans","db","transless","tempTransaction","storeNames","openComplete","letThrough","_createTransaction","_dbSchema","result","_completion","isBeingOpened","_options","autoOpen","open","dbReadyPromise","keyOrCrit","where","first","core","hook","reading","fire","indexOrCrit","WhereClause","keyPaths","equals","compoundIndex","indexes","primKey","ix","compound","every","_maxKey","kp","JSON","stringify","idxByName","idb","_deps","indexedDB","cmp","_a","prevIndex","prevFilterFn","index","multi","idx","filterFunction","toCollection","and","count","thenShortcut","offset","numRows","each","toArray","Collection","orderBy","reverse","mapToClass","mappedClass","readHook","unsubscribe","defineClass","content","add","mutate","numFailures","lastResult","primaryKey","outbound","update","keyOrObject","InvalidArgument","modify","put","delete","clear","range","bulkGet","keys$$1","getMany","bulkAdd","objects","pos","bulkPut","bulkDelete","Events","ctx","evs","eventName","subscriber","subscribe","addEventType","chainFunction","defaultFunction","cfg","context","subscribers","makeClassConstructor","isPlainKeyRange","ignoreLimitFilter","algorithm","or","justLimit","replayFilter","addFilter","addReplayFilter","factory","isLimitFilter","curr","getIndexOrStore","coreSchema","isPrimKey","getIndexByKeyPath","Schema","openCursor","coreTable","keysOnly","dir","unique","query","iter","coreTrans","set_1","union","cursor","advance","stop","fail","Uint8Array","_iterate","iterate","valueMapper","cursorPromise","wrappedFn","c","continue","advancer","_read","_ctx","error","table","_write","_addAlgorithm","clone","raw","Math","min","sortBy","parts","lastPart","lastIndex","getval","order","sorter","aVal","bVal","sort","valueMapper_1","a_1","offsetLeft","rowsLeft","until","bIncludeStopEntry","last","isMatch","indexName","_ondirectionchange","desc","eachKey","eachUniqueKey","eachPrimaryKey","primaryKeys","uniqueKeys","firstKey","lastKey","distinct","strKey","found","changes","modifyer","numKeys","anythingModified","extractKey","Dexie","totalFailures","applyMutateResult","expectedCount","nextChunk","addValues","putValues","putKeys","deleteKeys","origValue","ctx_1","coreRange","results","simpleCompare","simpleCompareReverse","collectionOrWhereClause","T","collection","emptyCollection","whereClause","rangeEqual","nextCasing","lowerKey","upperNeedle","lowerNeedle","llp","lwrKeyChar","addIgnoreCaseAlgorithm","match","needles","suffix","compare","upperNeedles","lowerNeedles","direction","nextKeySuffix","needlesLen","initDirection","toUpperCase","toLowerCase","upperFactory","lowerFactory","needleBounds","needle","nb","createRange","firstPossibleNeedle","lowestPossibleCasing","casing","enumerable","between","includeLower","includeUpper","_cmp","above","aboveOrEqual","below","belowOrEqual","startsWith","str","startsWithIgnoreCase","equalsIgnoreCase","anyOfIgnoreCase","startsWithAnyOfIgnoreCase","anyOf","_ascending","_descending","notEqual","inAnyRange","includeLowers","includeUppers","noneOf","ranges","ascending","descending","_min","max","_max","sortDirection","rangeSorter","newRange","rangePos","keyIsBeyondCurrentEntry","keyIsBeforeCurrentEntry","checkKey","keyWithinCurrentRange","startsWithAnyOf","safariMultiStoreFix","getMaxKey","IdbKeyRange","only","eventRejectHandler","preventDefault","target","stopPropagation","Transaction","_lock","_reculock","lockOwnerFor","_unlock","_blockedFuncs","_locked","fnAndPSD","shift","idbdb","dbOpenError","MissingAPI","OpenFailed","active","transaction","ev","_reject","onabort","on","oncomplete","_resolve","bWriteLock","ReadOnly","_root","waitFor","promiseLike","root","_waitingFor","_waitingQueue","store","objectStore","spin","_spinCount","currentWaitPromise","abort","memoizedTables","_memoizedTables","tableSchema","transactionBoundTable","createIndexSpec","auto","src","nameFromKeyPath","createTableSchema","array","extractor","nameAndValue","getKeyExtractor","getSinglePathKeyExtractor","getEffectiveKeys","req","arrayify","_id_counter","getKeyPathAlias","createDBCore","tmpTrans","makeIDBKeyRange","upperBound","lowerBound","bound","tables","objectStoreNames","autoIncrement","indexByKeyPath","isPrimaryKey","indexNames","multiEntry","hasGetAll","extractSchema","wantResults","isAddOrPut","errorHandler","_reqno","setResult","args1","args2","keyCount","callbackCount","successHandler","_pos","request","nonInfinitLimit","source","idbKeyRange","getAll","getAllKeys","count_1","req_1","openKeyCursor","result_1","___id","_cursorContinue","_cursorContinuePrimaryKey","continuePrimaryKey","_cursorAdvance","doThrowCursorIsStopped","gotOne","iterationPromise","resolveIteration","rejectIteration","guardedCallback","createDbCoreTable","tableMap","MIN_KEY","MAX_KEY","createMiddlewareStacks","middlewares","IDBKeyRange","dbcore","stackImpl","down","createMiddlewareStack","generateMiddlewareStacks","_middlewares","tbl","setApiOnPlace","objs","tableNames","dbschema","removeTablesApi","lowerVersionFirst","_cfg","version","runUpgraders","oldVersion","idbUpgradeTrans","globalSchema","_storeNames","rejectTransaction","createTable","populate","queue","versions","_versions","oldVersionStruct","Upgrade","anyContentUpgraderHasRun","oldSchema","newSchema","adjustToExistingIndexNames","diff","del","change","oldDef","newDef","def","recreate","oldIndexes","newIndexes","idxName","oldIdx","newIdx","getSchemaDiff","tuple","store_1","addIndex","deleteIndex","contentUpgrade","returnValue_1","upgradeSchema_1","promiseFollowed","decrementor","storeName","deleteObjectStore","deleteRemovedTables","runQueue","contains","updateTablesAndIndexes","createObjectStore","createIndex","_hasGetAll","j","dexieName","indexSpec","WorkerGlobalScope","databaseEnumerator","Version","_parseStoresSpec","stores","outSchema","trim","replace","parseIndexSyntax","storesSource","storesSpec","_allTables","upgrade","upgradeFunction","vip","dexieOpen","state","openCanceller","resolveDbReady","dbReadyResolve","upgradeTransaction","dbName","autoSchema","round","verno","onblocked","_fireOnBlocked","onupgradeneeded","allowEmptyDB","close","delreq","deleteDatabase","NoSuchDatabase","oldVer","pow","dbStoreNames","idbindex","readGlobalSchema","onversionchange","vcFired","onReadyBeingFired","ready","fireRemainders","remainders","awaitIterator","callNext","onSuccess","step","onError","throw","getNext","extractTransactionArgs","_tableArgs_","scopeFunc","pad","virtualIndexMiddleware","level","indexLookup","allVirtualIndexes","addVirtualIndexes","keyTail","lowLevelIndex","keyPathAlias","indexList","keyLength","isVirtual","virtualIndex","_i","translateRequest","createVirtualCursor","hooksMiddleware","downCore","downTable","dxTrans","deleting","creating","updating","addPutOrDelete","deleteNextChunk","deleteRange","effectiveKeys","getExistingValues","existingValues","contexts","existingValue","generatedPrimaryKey","objectDiff","additionalChanges_1","requestedValue_1","deps","dependencies","addons","cancelOpen","bSticky","db_1","keyRangeGenerator","keyRange","whereCtx","readingHook","createTableConstructor","complete","wasActive","createTransactionConstructor","versionNumber","createVersionConstructor","orCollection","_IDBKeyRange","createWhereClauseConstructor","newVersion","parentTransaction","use","addon","versionInstance","_whenReady","unuse","mw","hasArguments","doDelete","remove","backendDB","isOpen","hasBeenClosed","hasFailed","dynamicallyOpened","_transaction","idbMode","onlyIfCompatible","SubTransaction","enterTransaction","returnValue","PrematureCommit","InvalidTable","Dexie$1","databaseName","exists","getDatabaseNames","ignoreTransaction","async","generatorFn","spawn","currentTransaction","promiseOrFunction","optionalTimeout","delByKeyPath","minKey","mozIndexedDB","webkitIndexedDB","msIndexedDB","webkitIDBKeyRange","semVer","default","maxKey","dbNamesTable","getDatabaseNamesNative","webkitGetDatabaseNames","dbnames","DatabaseEnumerator","initDatabaseEnumerator","domError"],"mappings":"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","file":"3.2860b24d78cee11b8d5e.worker.js","sourcesContent":["/*\n * Dexie.js - a minimalistic wrapper for IndexedDB\n * ===============================================\n *\n * By David Fahlander, david.fahlander@gmail.com\n *\n * Version 3.0.0-alpha.8, Fri Apr 26 2019\n *\n * http://dexie.org\n *\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/\n */\n \nvar __assign = function() {\n    __assign = Object.assign || function __assign(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\n\nvar keys = Object.keys;\nvar isArray = Array.isArray;\nvar _global = typeof self !== 'undefined' ? self :\n    typeof window !== 'undefined' ? window :\n        global;\nif (typeof Promise !== 'undefined' && !_global.Promise) {\n    _global.Promise = Promise;\n}\nfunction extend(obj, extension) {\n    if (typeof extension !== 'object')\n        return obj;\n    keys(extension).forEach(function (key) {\n        obj[key] = extension[key];\n    });\n    return obj;\n}\nvar getProto = Object.getPrototypeOf;\nvar _hasOwn = {}.hasOwnProperty;\nfunction hasOwn(obj, prop) {\n    return _hasOwn.call(obj, prop);\n}\nfunction props(proto, extension) {\n    if (typeof extension === 'function')\n        extension = extension(getProto(proto));\n    keys(extension).forEach(function (key) {\n        setProp(proto, key, extension[key]);\n    });\n}\nvar defineProperty = Object.defineProperty;\nfunction setProp(obj, prop, functionOrGetSet, options) {\n    defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, \"get\") && typeof functionOrGetSet.get === 'function' ?\n        { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } :\n        { value: functionOrGetSet, configurable: true, writable: true }, options));\n}\nfunction derive(Child) {\n    return {\n        from: function (Parent) {\n            Child.prototype = Object.create(Parent.prototype);\n            setProp(Child.prototype, \"constructor\", Child);\n            return {\n                extend: props.bind(null, Child.prototype)\n            };\n        }\n    };\n}\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nfunction getPropertyDescriptor(obj, prop) {\n    var pd = getOwnPropertyDescriptor(obj, prop);\n    var proto;\n    return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop);\n}\nvar _slice = [].slice;\nfunction slice(args, start, end) {\n    return _slice.call(args, start, end);\n}\nfunction override(origFunc, overridedFactory) {\n    return overridedFactory(origFunc);\n}\nfunction assert(b) {\n    if (!b)\n        throw new Error(\"Assertion Failed\");\n}\nfunction asap(fn) {\n    if (_global.setImmediate)\n        setImmediate(fn);\n    else\n        setTimeout(fn, 0);\n}\n\nfunction arrayToObject(array, extractor) {\n    return array.reduce(function (result, item, i) {\n        var nameAndValue = extractor(item, i);\n        if (nameAndValue)\n            result[nameAndValue[0]] = nameAndValue[1];\n        return result;\n    }, {});\n}\n\nfunction tryCatch(fn, onerror, args) {\n    try {\n        fn.apply(null, args);\n    }\n    catch (ex) {\n        onerror && onerror(ex);\n    }\n}\nfunction getByKeyPath(obj, keyPath) {\n    if (hasOwn(obj, keyPath))\n        return obj[keyPath];\n    if (!keyPath)\n        return obj;\n    if (typeof keyPath !== 'string') {\n        var rv = [];\n        for (var i = 0, l = keyPath.length; i < l; ++i) {\n            var val = getByKeyPath(obj, keyPath[i]);\n            rv.push(val);\n        }\n        return rv;\n    }\n    var period = keyPath.indexOf('.');\n    if (period !== -1) {\n        var innerObj = obj[keyPath.substr(0, period)];\n        return innerObj === undefined ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1));\n    }\n    return undefined;\n}\nfunction setByKeyPath(obj, keyPath, value) {\n    if (!obj || keyPath === undefined)\n        return;\n    if ('isFrozen' in Object && Object.isFrozen(obj))\n        return;\n    if (typeof keyPath !== 'string' && 'length' in keyPath) {\n        assert(typeof value !== 'string' && 'length' in value);\n        for (var i = 0, l = keyPath.length; i < l; ++i) {\n            setByKeyPath(obj, keyPath[i], value[i]);\n        }\n    }\n    else {\n        var period = keyPath.indexOf('.');\n        if (period !== -1) {\n            var currentKeyPath = keyPath.substr(0, period);\n            var remainingKeyPath = keyPath.substr(period + 1);\n            if (remainingKeyPath === \"\")\n                if (value === undefined) {\n                    if (isArray(obj) && !isNaN(parseInt(currentKeyPath)))\n                        obj.splice(currentKeyPath, 1);\n                    else\n                        delete obj[currentKeyPath];\n                }\n                else\n                    obj[currentKeyPath] = value;\n            else {\n                var innerObj = obj[currentKeyPath];\n                if (!innerObj)\n                    innerObj = (obj[currentKeyPath] = {});\n                setByKeyPath(innerObj, remainingKeyPath, value);\n            }\n        }\n        else {\n            if (value === undefined) {\n                if (isArray(obj) && !isNaN(parseInt(keyPath)))\n                    obj.splice(keyPath, 1);\n                else\n                    delete obj[keyPath];\n            }\n            else\n                obj[keyPath] = value;\n        }\n    }\n}\nfunction delByKeyPath(obj, keyPath) {\n    if (typeof keyPath === 'string')\n        setByKeyPath(obj, keyPath, undefined);\n    else if ('length' in keyPath)\n        [].map.call(keyPath, function (kp) {\n            setByKeyPath(obj, kp, undefined);\n        });\n}\nfunction shallowClone(obj) {\n    var rv = {};\n    for (var m in obj) {\n        if (hasOwn(obj, m))\n            rv[m] = obj[m];\n    }\n    return rv;\n}\nvar concat = [].concat;\nfunction flatten(a) {\n    return concat.apply([], a);\n}\nvar intrinsicTypes = \"Boolean,String,Date,RegExp,Blob,File,FileList,ArrayBuffer,DataView,Uint8ClampedArray,ImageData,Map,Set\"\n    .split(',').concat(flatten([8, 16, 32, 64].map(function (num) { return [\"Int\", \"Uint\", \"Float\"].map(function (t) { return t + num + \"Array\"; }); }))).filter(function (t) { return _global[t]; }).map(function (t) { return _global[t]; });\nfunction deepClone(any) {\n    if (!any || typeof any !== 'object')\n        return any;\n    var rv;\n    if (isArray(any)) {\n        rv = [];\n        for (var i = 0, l = any.length; i < l; ++i) {\n            rv.push(deepClone(any[i]));\n        }\n    }\n    else if (intrinsicTypes.indexOf(any.constructor) >= 0) {\n        rv = any;\n    }\n    else {\n        rv = any.constructor ? Object.create(any.constructor.prototype) : {};\n        for (var prop in any) {\n            if (hasOwn(any, prop)) {\n                rv[prop] = deepClone(any[prop]);\n            }\n        }\n    }\n    return rv;\n}\nfunction getObjectDiff(a, b, rv, prfx) {\n    rv = rv || {};\n    prfx = prfx || '';\n    keys(a).forEach(function (prop) {\n        if (!hasOwn(b, prop))\n            rv[prfx + prop] = undefined;\n        else {\n            var ap = a[prop], bp = b[prop];\n            if (typeof ap === 'object' && typeof bp === 'object' &&\n                ap && bp &&\n                ('' + ap.constructor) === ('' + bp.constructor))\n                getObjectDiff(ap, bp, rv, prfx + prop + \".\");\n            else if (ap !== bp)\n                rv[prfx + prop] = b[prop];\n        }\n    });\n    keys(b).forEach(function (prop) {\n        if (!hasOwn(a, prop)) {\n            rv[prfx + prop] = b[prop];\n        }\n    });\n    return rv;\n}\nvar iteratorSymbol = typeof Symbol !== 'undefined' && Symbol.iterator;\nvar getIteratorOf = iteratorSymbol ? function (x) {\n    var i;\n    return x != null && (i = x[iteratorSymbol]) && i.apply(x);\n} : function () { return null; };\nvar NO_CHAR_ARRAY = {};\nfunction getArrayOf(arrayLike) {\n    var i, a, x, it;\n    if (arguments.length === 1) {\n        if (isArray(arrayLike))\n            return arrayLike.slice();\n        if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string')\n            return [arrayLike];\n        if ((it = getIteratorOf(arrayLike))) {\n            a = [];\n            while (x = it.next(), !x.done)\n                a.push(x.value);\n            return a;\n        }\n        if (arrayLike == null)\n            return [arrayLike];\n        i = arrayLike.length;\n        if (typeof i === 'number') {\n            a = new Array(i);\n            while (i--)\n                a[i] = arrayLike[i];\n            return a;\n        }\n        return [arrayLike];\n    }\n    i = arguments.length;\n    a = new Array(i);\n    while (i--)\n        a[i] = arguments[i];\n    return a;\n}\n\nvar debug = typeof location !== 'undefined' &&\n    /^(http|https):\\/\\/(localhost|127\\.0\\.0\\.1)/.test(location.href);\nfunction setDebug(value, filter) {\n    debug = value;\n    libraryFilter = filter;\n}\nvar libraryFilter = function () { return true; };\nvar NEEDS_THROW_FOR_STACK = !new Error(\"\").stack;\nfunction getErrorWithStack() {\n    if (NEEDS_THROW_FOR_STACK)\n        try {\n            throw new Error();\n        }\n        catch (e) {\n            return e;\n        }\n    return new Error();\n}\nfunction prettyStack(exception, numIgnoredFrames) {\n    var stack = exception.stack;\n    if (!stack)\n        return \"\";\n    numIgnoredFrames = (numIgnoredFrames || 0);\n    if (stack.indexOf(exception.name) === 0)\n        numIgnoredFrames += (exception.name + exception.message).split('\\n').length;\n    return stack.split('\\n')\n        .slice(numIgnoredFrames)\n        .filter(libraryFilter)\n        .map(function (frame) { return \"\\n\" + frame; })\n        .join('');\n}\n\nvar dexieErrorNames = [\n    'Modify',\n    'Bulk',\n    'OpenFailed',\n    'VersionChange',\n    'Schema',\n    'Upgrade',\n    'InvalidTable',\n    'MissingAPI',\n    'NoSuchDatabase',\n    'InvalidArgument',\n    'SubTransaction',\n    'Unsupported',\n    'Internal',\n    'DatabaseClosed',\n    'PrematureCommit',\n    'ForeignAwait'\n];\nvar idbDomErrorNames = [\n    'Unknown',\n    'Constraint',\n    'Data',\n    'TransactionInactive',\n    'ReadOnly',\n    'Version',\n    'NotFound',\n    'InvalidState',\n    'InvalidAccess',\n    'Abort',\n    'Timeout',\n    'QuotaExceeded',\n    'Syntax',\n    'DataClone'\n];\nvar errorList = dexieErrorNames.concat(idbDomErrorNames);\nvar defaultTexts = {\n    VersionChanged: \"Database version changed by other database connection\",\n    DatabaseClosed: \"Database has been closed\",\n    Abort: \"Transaction aborted\",\n    TransactionInactive: \"Transaction has already completed or failed\"\n};\nfunction DexieError(name, msg) {\n    this._e = getErrorWithStack();\n    this.name = name;\n    this.message = msg;\n}\nderive(DexieError).from(Error).extend({\n    stack: {\n        get: function () {\n            return this._stack ||\n                (this._stack = this.name + \": \" + this.message + prettyStack(this._e, 2));\n        }\n    },\n    toString: function () { return this.name + \": \" + this.message; }\n});\nfunction getMultiErrorMessage(msg, failures) {\n    return msg + \". Errors: \" + Object.keys(failures)\n        .map(function (key) { return failures[key].toString(); })\n        .filter(function (v, i, s) { return s.indexOf(v) === i; })\n        .join('\\n');\n}\nfunction ModifyError(msg, failures, successCount, failedKeys) {\n    this._e = getErrorWithStack();\n    this.failures = failures;\n    this.failedKeys = failedKeys;\n    this.successCount = successCount;\n    this.message = getMultiErrorMessage(msg, failures);\n}\nderive(ModifyError).from(DexieError);\nfunction BulkError(msg, failures) {\n    this._e = getErrorWithStack();\n    this.name = \"BulkError\";\n    this.failures = failures;\n    this.message = getMultiErrorMessage(msg, failures);\n}\nderive(BulkError).from(DexieError);\nvar errnames = errorList.reduce(function (obj, name) { return (obj[name] = name + \"Error\", obj); }, {});\nvar BaseException = DexieError;\nvar exceptions = errorList.reduce(function (obj, name) {\n    var fullName = name + \"Error\";\n    function DexieError(msgOrInner, inner) {\n        this._e = getErrorWithStack();\n        this.name = fullName;\n        if (!msgOrInner) {\n            this.message = defaultTexts[name] || fullName;\n            this.inner = null;\n        }\n        else if (typeof msgOrInner === 'string') {\n            this.message = \"\" + msgOrInner + (!inner ? '' : '\\n ' + inner);\n            this.inner = inner || null;\n        }\n        else if (typeof msgOrInner === 'object') {\n            this.message = msgOrInner.name + \" \" + msgOrInner.message;\n            this.inner = msgOrInner;\n        }\n    }\n    derive(DexieError).from(BaseException);\n    obj[name] = DexieError;\n    return obj;\n}, {});\nexceptions.Syntax = SyntaxError;\nexceptions.Type = TypeError;\nexceptions.Range = RangeError;\nvar exceptionMap = idbDomErrorNames.reduce(function (obj, name) {\n    obj[name + \"Error\"] = exceptions[name];\n    return obj;\n}, {});\nfunction mapError(domError, message) {\n    if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name])\n        return domError;\n    var rv = new exceptionMap[domError.name](message || domError.message, domError);\n    if (\"stack\" in domError) {\n        setProp(rv, \"stack\", { get: function () {\n                return this.inner.stack;\n            } });\n    }\n    return rv;\n}\nvar fullNameExceptions = errorList.reduce(function (obj, name) {\n    if ([\"Syntax\", \"Type\", \"Range\"].indexOf(name) === -1)\n        obj[name + \"Error\"] = exceptions[name];\n    return obj;\n}, {});\nfullNameExceptions.ModifyError = ModifyError;\nfullNameExceptions.DexieError = DexieError;\nfullNameExceptions.BulkError = BulkError;\n\nfunction nop() { }\nfunction mirror(val) { return val; }\nfunction pureFunctionChain(f1, f2) {\n    if (f1 == null || f1 === mirror)\n        return f2;\n    return function (val) {\n        return f2(f1(val));\n    };\n}\nfunction callBoth(on1, on2) {\n    return function () {\n        on1.apply(this, arguments);\n        on2.apply(this, arguments);\n    };\n}\nfunction hookCreatingChain(f1, f2) {\n    if (f1 === nop)\n        return f2;\n    return function () {\n        var res = f1.apply(this, arguments);\n        if (res !== undefined)\n            arguments[0] = res;\n        var onsuccess = this.onsuccess,\n        onerror = this.onerror;\n        this.onsuccess = null;\n        this.onerror = null;\n        var res2 = f2.apply(this, arguments);\n        if (onsuccess)\n            this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n        if (onerror)\n            this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n        return res2 !== undefined ? res2 : res;\n    };\n}\nfunction hookDeletingChain(f1, f2) {\n    if (f1 === nop)\n        return f2;\n    return function () {\n        f1.apply(this, arguments);\n        var onsuccess = this.onsuccess,\n        onerror = this.onerror;\n        this.onsuccess = this.onerror = null;\n        f2.apply(this, arguments);\n        if (onsuccess)\n            this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n        if (onerror)\n            this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n    };\n}\nfunction hookUpdatingChain(f1, f2) {\n    if (f1 === nop)\n        return f2;\n    return function (modifications) {\n        var res = f1.apply(this, arguments);\n        extend(modifications, res);\n        var onsuccess = this.onsuccess,\n        onerror = this.onerror;\n        this.onsuccess = null;\n        this.onerror = null;\n        var res2 = f2.apply(this, arguments);\n        if (onsuccess)\n            this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n        if (onerror)\n            this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n        return res === undefined ?\n            (res2 === undefined ? undefined : res2) :\n            (extend(res, res2));\n    };\n}\nfunction reverseStoppableEventChain(f1, f2) {\n    if (f1 === nop)\n        return f2;\n    return function () {\n        if (f2.apply(this, arguments) === false)\n            return false;\n        return f1.apply(this, arguments);\n    };\n}\n\nfunction promisableChain(f1, f2) {\n    if (f1 === nop)\n        return f2;\n    return function () {\n        var res = f1.apply(this, arguments);\n        if (res && typeof res.then === 'function') {\n            var thiz = this, i = arguments.length, args = new Array(i);\n            while (i--)\n                args[i] = arguments[i];\n            return res.then(function () {\n                return f2.apply(thiz, args);\n            });\n        }\n        return f2.apply(this, arguments);\n    };\n}\n\nvar INTERNAL = {};\nvar LONG_STACKS_CLIP_LIMIT = 100;\nvar MAX_LONG_STACKS = 20;\nvar ZONE_ECHO_LIMIT = 7;\nvar nativePromiseInstanceAndProto = (function () {\n    try {\n        return new Function('let F=async ()=>{},p=F();return [p,Object.getPrototypeOf(p),Promise.resolve(),F.constructor];')();\n    }\n    catch (e) {\n        var P = _global.Promise;\n        return P ?\n            [P.resolve(), P.prototype, P.resolve()] :\n            [];\n    }\n})();\nvar resolvedNativePromise = nativePromiseInstanceAndProto[0];\nvar nativePromiseProto = nativePromiseInstanceAndProto[1];\nvar resolvedGlobalPromise = nativePromiseInstanceAndProto[2];\nvar nativePromiseThen = nativePromiseProto && nativePromiseProto.then;\nvar NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;\nvar AsyncFunction = nativePromiseInstanceAndProto[3];\nvar patchGlobalPromise = !!resolvedGlobalPromise;\nvar stack_being_generated = false;\nvar schedulePhysicalTick = resolvedGlobalPromise ?\n    function () { resolvedGlobalPromise.then(physicalTick); }\n    :\n        _global.setImmediate ?\n            setImmediate.bind(null, physicalTick) :\n            _global.MutationObserver ?\n                function () {\n                    var hiddenDiv = document.createElement(\"div\");\n                    (new MutationObserver(function () {\n                        physicalTick();\n                        hiddenDiv = null;\n                    })).observe(hiddenDiv, { attributes: true });\n                    hiddenDiv.setAttribute('i', '1');\n                } :\n                function () { setTimeout(physicalTick, 0); };\nvar asap$1 = function (callback, args) {\n    microtickQueue.push([callback, args]);\n    if (needsNewPhysicalTick) {\n        schedulePhysicalTick();\n        needsNewPhysicalTick = false;\n    }\n};\nvar isOutsideMicroTick = true;\nvar needsNewPhysicalTick = true;\nvar unhandledErrors = [];\nvar rejectingErrors = [];\nvar currentFulfiller = null;\nvar rejectionMapper = mirror;\nvar globalPSD = {\n    id: 'global',\n    global: true,\n    ref: 0,\n    unhandleds: [],\n    onunhandled: globalError,\n    pgp: false,\n    env: {},\n    finalize: function () {\n        this.unhandleds.forEach(function (uh) {\n            try {\n                globalError(uh[0], uh[1]);\n            }\n            catch (e) { }\n        });\n    }\n};\nvar PSD = globalPSD;\nvar microtickQueue = [];\nvar numScheduledCalls = 0;\nvar tickFinalizers = [];\nfunction Promise$1(fn) {\n    if (typeof this !== 'object')\n        throw new TypeError('Promises must be constructed via new');\n    this._listeners = [];\n    this.onuncatched = nop;\n    this._lib = false;\n    var psd = (this._PSD = PSD);\n    if (debug) {\n        this._stackHolder = getErrorWithStack();\n        this._prev = null;\n        this._numPrev = 0;\n    }\n    if (typeof fn !== 'function') {\n        if (fn !== INTERNAL)\n            throw new TypeError('Not a function');\n        this._state = arguments[1];\n        this._value = arguments[2];\n        if (this._state === false)\n            handleRejection(this, this._value);\n        return;\n    }\n    this._state = null;\n    this._value = null;\n    ++psd.ref;\n    executePromiseTask(this, fn);\n}\nvar thenProp = {\n    get: function () {\n        var psd = PSD, microTaskId = totalEchoes;\n        function then(onFulfilled, onRejected) {\n            var _this = this;\n            var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);\n            if (possibleAwait)\n                decrementExpectedAwaits();\n            var rv = new Promise$1(function (resolve, reject) {\n                propagateToListener(_this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait), resolve, reject, psd));\n            });\n            debug && linkToPreviousPromise(rv, this);\n            return rv;\n        }\n        then.prototype = INTERNAL;\n        return then;\n    },\n    set: function (value) {\n        setProp(this, 'then', value && value.prototype === INTERNAL ?\n            thenProp :\n            {\n                get: function () {\n                    return value;\n                },\n                set: thenProp.set\n            });\n    }\n};\nprops(Promise$1.prototype, {\n    then: thenProp,\n    _then: function (onFulfilled, onRejected) {\n        propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD));\n    },\n    catch: function (onRejected) {\n        if (arguments.length === 1)\n            return this.then(null, onRejected);\n        var type = arguments[0], handler = arguments[1];\n        return typeof type === 'function' ? this.then(null, function (err) {\n            return err instanceof type ? handler(err) : PromiseReject(err);\n        })\n            : this.then(null, function (err) {\n                return err && err.name === type ? handler(err) : PromiseReject(err);\n            });\n    },\n    finally: function (onFinally) {\n        return this.then(function (value) {\n            onFinally();\n            return value;\n        }, function (err) {\n            onFinally();\n            return PromiseReject(err);\n        });\n    },\n    stack: {\n        get: function () {\n            if (this._stack)\n                return this._stack;\n            try {\n                stack_being_generated = true;\n                var stacks = getStack(this, [], MAX_LONG_STACKS);\n                var stack = stacks.join(\"\\nFrom previous: \");\n                if (this._state !== null)\n                    this._stack = stack;\n                return stack;\n            }\n            finally {\n                stack_being_generated = false;\n            }\n        }\n    },\n    timeout: function (ms, msg) {\n        var _this = this;\n        return ms < Infinity ?\n            new Promise$1(function (resolve, reject) {\n                var handle = setTimeout(function () { return reject(new exceptions.Timeout(msg)); }, ms);\n                _this.then(resolve, reject).finally(clearTimeout.bind(null, handle));\n            }) : this;\n    }\n});\nif (typeof Symbol !== 'undefined' && Symbol.toStringTag)\n    setProp(Promise$1.prototype, Symbol.toStringTag, 'Promise');\nglobalPSD.env = snapShot();\nfunction Listener(onFulfilled, onRejected, resolve, reject, zone) {\n    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n    this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n    this.resolve = resolve;\n    this.reject = reject;\n    this.psd = zone;\n}\nprops(Promise$1, {\n    all: function () {\n        var values = getArrayOf.apply(null, arguments)\n            .map(onPossibleParallellAsync);\n        return new Promise$1(function (resolve, reject) {\n            if (values.length === 0)\n                resolve([]);\n            var remaining = values.length;\n            values.forEach(function (a, i) { return Promise$1.resolve(a).then(function (x) {\n                values[i] = x;\n                if (!--remaining)\n                    resolve(values);\n            }, reject); });\n        });\n    },\n    resolve: function (value) {\n        if (value instanceof Promise$1)\n            return value;\n        if (value && typeof value.then === 'function')\n            return new Promise$1(function (resolve, reject) {\n                value.then(resolve, reject);\n            });\n        var rv = new Promise$1(INTERNAL, true, value);\n        linkToPreviousPromise(rv, currentFulfiller);\n        return rv;\n    },\n    reject: PromiseReject,\n    race: function () {\n        var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n        return new Promise$1(function (resolve, reject) {\n            values.map(function (value) { return Promise$1.resolve(value).then(resolve, reject); });\n        });\n    },\n    PSD: {\n        get: function () { return PSD; },\n        set: function (value) { return PSD = value; }\n    },\n    newPSD: newScope,\n    usePSD: usePSD,\n    scheduler: {\n        get: function () { return asap$1; },\n        set: function (value) { asap$1 = value; }\n    },\n    rejectionMapper: {\n        get: function () { return rejectionMapper; },\n        set: function (value) { rejectionMapper = value; }\n    },\n    follow: function (fn, zoneProps) {\n        return new Promise$1(function (resolve, reject) {\n            return newScope(function (resolve, reject) {\n                var psd = PSD;\n                psd.unhandleds = [];\n                psd.onunhandled = reject;\n                psd.finalize = callBoth(function () {\n                    var _this = this;\n                    run_at_end_of_this_or_next_physical_tick(function () {\n                        _this.unhandleds.length === 0 ? resolve() : reject(_this.unhandleds[0]);\n                    });\n                }, psd.finalize);\n                fn();\n            }, zoneProps, resolve, reject);\n        });\n    }\n});\nfunction executePromiseTask(promise, fn) {\n    try {\n        fn(function (value) {\n            if (promise._state !== null)\n                return;\n            if (value === promise)\n                throw new TypeError('A promise cannot be resolved with itself.');\n            var shouldExecuteTick = promise._lib && beginMicroTickScope();\n            if (value && typeof value.then === 'function') {\n                executePromiseTask(promise, function (resolve, reject) {\n                    value instanceof Promise$1 ?\n                        value._then(resolve, reject) :\n                        value.then(resolve, reject);\n                });\n            }\n            else {\n                promise._state = true;\n                promise._value = value;\n                propagateAllListeners(promise);\n            }\n            if (shouldExecuteTick)\n                endMicroTickScope();\n        }, handleRejection.bind(null, promise));\n    }\n    catch (ex) {\n        handleRejection(promise, ex);\n    }\n}\nfunction handleRejection(promise, reason) {\n    rejectingErrors.push(reason);\n    if (promise._state !== null)\n        return;\n    var shouldExecuteTick = promise._lib && beginMicroTickScope();\n    reason = rejectionMapper(reason);\n    promise._state = false;\n    promise._value = reason;\n    debug && reason !== null && typeof reason === 'object' && !reason._promise && tryCatch(function () {\n        var origProp = getPropertyDescriptor(reason, \"stack\");\n        reason._promise = promise;\n        setProp(reason, \"stack\", {\n            get: function () {\n                return stack_being_generated ?\n                    origProp && (origProp.get ?\n                        origProp.get.apply(reason) :\n                        origProp.value) :\n                    promise.stack;\n            }\n        });\n    });\n    addPossiblyUnhandledError(promise);\n    propagateAllListeners(promise);\n    if (shouldExecuteTick)\n        endMicroTickScope();\n}\nfunction propagateAllListeners(promise) {\n    var listeners = promise._listeners;\n    promise._listeners = [];\n    for (var i = 0, len = listeners.length; i < len; ++i) {\n        propagateToListener(promise, listeners[i]);\n    }\n    var psd = promise._PSD;\n    --psd.ref || psd.finalize();\n    if (numScheduledCalls === 0) {\n        ++numScheduledCalls;\n        asap$1(function () {\n            if (--numScheduledCalls === 0)\n                finalizePhysicalTick();\n        }, []);\n    }\n}\nfunction propagateToListener(promise, listener) {\n    if (promise._state === null) {\n        promise._listeners.push(listener);\n        return;\n    }\n    var cb = promise._state ? listener.onFulfilled : listener.onRejected;\n    if (cb === null) {\n        return (promise._state ? listener.resolve : listener.reject)(promise._value);\n    }\n    ++listener.psd.ref;\n    ++numScheduledCalls;\n    asap$1(callListener, [cb, promise, listener]);\n}\nfunction callListener(cb, promise, listener) {\n    try {\n        currentFulfiller = promise;\n        var ret, value = promise._value;\n        if (promise._state) {\n            ret = cb(value);\n        }\n        else {\n            if (rejectingErrors.length)\n                rejectingErrors = [];\n            ret = cb(value);\n            if (rejectingErrors.indexOf(value) === -1)\n                markErrorAsHandled(promise);\n        }\n        listener.resolve(ret);\n    }\n    catch (e) {\n        listener.reject(e);\n    }\n    finally {\n        currentFulfiller = null;\n        if (--numScheduledCalls === 0)\n            finalizePhysicalTick();\n        --listener.psd.ref || listener.psd.finalize();\n    }\n}\nfunction getStack(promise, stacks, limit) {\n    if (stacks.length === limit)\n        return stacks;\n    var stack = \"\";\n    if (promise._state === false) {\n        var failure = promise._value, errorName, message;\n        if (failure != null) {\n            errorName = failure.name || \"Error\";\n            message = failure.message || failure;\n            stack = prettyStack(failure, 0);\n        }\n        else {\n            errorName = failure;\n            message = \"\";\n        }\n        stacks.push(errorName + (message ? \": \" + message : \"\") + stack);\n    }\n    if (debug) {\n        stack = prettyStack(promise._stackHolder, 2);\n        if (stack && stacks.indexOf(stack) === -1)\n            stacks.push(stack);\n        if (promise._prev)\n            getStack(promise._prev, stacks, limit);\n    }\n    return stacks;\n}\nfunction linkToPreviousPromise(promise, prev) {\n    var numPrev = prev ? prev._numPrev + 1 : 0;\n    if (numPrev < LONG_STACKS_CLIP_LIMIT) {\n        promise._prev = prev;\n        promise._numPrev = numPrev;\n    }\n}\nfunction physicalTick() {\n    beginMicroTickScope() && endMicroTickScope();\n}\nfunction beginMicroTickScope() {\n    var wasRootExec = isOutsideMicroTick;\n    isOutsideMicroTick = false;\n    needsNewPhysicalTick = false;\n    return wasRootExec;\n}\nfunction endMicroTickScope() {\n    var callbacks, i, l;\n    do {\n        while (microtickQueue.length > 0) {\n            callbacks = microtickQueue;\n            microtickQueue = [];\n            l = callbacks.length;\n            for (i = 0; i < l; ++i) {\n                var item = callbacks[i];\n                item[0].apply(null, item[1]);\n            }\n        }\n    } while (microtickQueue.length > 0);\n    isOutsideMicroTick = true;\n    needsNewPhysicalTick = true;\n}\nfunction finalizePhysicalTick() {\n    var unhandledErrs = unhandledErrors;\n    unhandledErrors = [];\n    unhandledErrs.forEach(function (p) {\n        p._PSD.onunhandled.call(null, p._value, p);\n    });\n    var finalizers = tickFinalizers.slice(0);\n    var i = finalizers.length;\n    while (i)\n        finalizers[--i]();\n}\nfunction run_at_end_of_this_or_next_physical_tick(fn) {\n    function finalizer() {\n        fn();\n        tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1);\n    }\n    tickFinalizers.push(finalizer);\n    ++numScheduledCalls;\n    asap$1(function () {\n        if (--numScheduledCalls === 0)\n            finalizePhysicalTick();\n    }, []);\n}\nfunction addPossiblyUnhandledError(promise) {\n    if (!unhandledErrors.some(function (p) { return p._value === promise._value; }))\n        unhandledErrors.push(promise);\n}\nfunction markErrorAsHandled(promise) {\n    var i = unhandledErrors.length;\n    while (i)\n        if (unhandledErrors[--i]._value === promise._value) {\n            unhandledErrors.splice(i, 1);\n            return;\n        }\n}\nfunction PromiseReject(reason) {\n    return new Promise$1(INTERNAL, false, reason);\n}\nfunction wrap(fn, errorCatcher) {\n    var psd = PSD;\n    return function () {\n        var wasRootExec = beginMicroTickScope(), outerScope = PSD;\n        try {\n            switchToZone(psd, true);\n            return fn.apply(this, arguments);\n        }\n        catch (e) {\n            errorCatcher && errorCatcher(e);\n        }\n        finally {\n            switchToZone(outerScope, false);\n            if (wasRootExec)\n                endMicroTickScope();\n        }\n    };\n}\nvar task = { awaits: 0, echoes: 0, id: 0 };\nvar taskCounter = 0;\nvar zoneStack = [];\nvar zoneEchoes = 0;\nvar totalEchoes = 0;\nvar zone_id_counter = 0;\nfunction newScope(fn, props$$1, a1, a2) {\n    var parent = PSD, psd = Object.create(parent);\n    psd.parent = parent;\n    psd.ref = 0;\n    psd.global = false;\n    psd.id = ++zone_id_counter;\n    var globalEnv = globalPSD.env;\n    psd.env = patchGlobalPromise ? {\n        Promise: Promise$1,\n        PromiseProp: { value: Promise$1, configurable: true, writable: true },\n        all: Promise$1.all,\n        race: Promise$1.race,\n        resolve: Promise$1.resolve,\n        reject: Promise$1.reject,\n        nthen: getPatchedPromiseThen(globalEnv.nthen, psd),\n        gthen: getPatchedPromiseThen(globalEnv.gthen, psd)\n    } : {};\n    if (props$$1)\n        extend(psd, props$$1);\n    ++parent.ref;\n    psd.finalize = function () {\n        --this.parent.ref || this.parent.finalize();\n    };\n    var rv = usePSD(psd, fn, a1, a2);\n    if (psd.ref === 0)\n        psd.finalize();\n    return rv;\n}\nfunction incrementExpectedAwaits() {\n    if (!task.id)\n        task.id = ++taskCounter;\n    ++task.awaits;\n    task.echoes += ZONE_ECHO_LIMIT;\n    return task.id;\n}\nfunction decrementExpectedAwaits(sourceTaskId) {\n    if (!task.awaits || (sourceTaskId && sourceTaskId !== task.id))\n        return;\n    if (--task.awaits === 0)\n        task.id = 0;\n    task.echoes = task.awaits * ZONE_ECHO_LIMIT;\n}\nfunction onPossibleParallellAsync(possiblePromise) {\n    if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {\n        incrementExpectedAwaits();\n        return possiblePromise.then(function (x) {\n            decrementExpectedAwaits();\n            return x;\n        }, function (e) {\n            decrementExpectedAwaits();\n            return rejection(e);\n        });\n    }\n    return possiblePromise;\n}\nfunction zoneEnterEcho(targetZone) {\n    ++totalEchoes;\n    if (!task.echoes || --task.echoes === 0) {\n        task.echoes = task.id = 0;\n    }\n    zoneStack.push(PSD);\n    switchToZone(targetZone, true);\n}\nfunction zoneLeaveEcho() {\n    var zone = zoneStack[zoneStack.length - 1];\n    zoneStack.pop();\n    switchToZone(zone, false);\n}\nfunction switchToZone(targetZone, bEnteringZone) {\n    var currentZone = PSD;\n    if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) {\n        enqueueNativeMicroTask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho);\n    }\n    if (targetZone === PSD)\n        return;\n    PSD = targetZone;\n    if (currentZone === globalPSD)\n        globalPSD.env = snapShot();\n    if (patchGlobalPromise) {\n        var GlobalPromise = globalPSD.env.Promise;\n        var targetEnv = targetZone.env;\n        nativePromiseProto.then = targetEnv.nthen;\n        GlobalPromise.prototype.then = targetEnv.gthen;\n        if (currentZone.global || targetZone.global) {\n            Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp);\n            GlobalPromise.all = targetEnv.all;\n            GlobalPromise.race = targetEnv.race;\n            GlobalPromise.resolve = targetEnv.resolve;\n            GlobalPromise.reject = targetEnv.reject;\n        }\n    }\n}\nfunction snapShot() {\n    var GlobalPromise = _global.Promise;\n    return patchGlobalPromise ? {\n        Promise: GlobalPromise,\n        PromiseProp: Object.getOwnPropertyDescriptor(_global, \"Promise\"),\n        all: GlobalPromise.all,\n        race: GlobalPromise.race,\n        resolve: GlobalPromise.resolve,\n        reject: GlobalPromise.reject,\n        nthen: nativePromiseProto.then,\n        gthen: GlobalPromise.prototype.then\n    } : {};\n}\nfunction usePSD(psd, fn, a1, a2, a3) {\n    var outerScope = PSD;\n    try {\n        switchToZone(psd, true);\n        return fn(a1, a2, a3);\n    }\n    finally {\n        switchToZone(outerScope, false);\n    }\n}\nfunction enqueueNativeMicroTask(job) {\n    nativePromiseThen.call(resolvedNativePromise, job);\n}\nfunction nativeAwaitCompatibleWrap(fn, zone, possibleAwait) {\n    return typeof fn !== 'function' ? fn : function () {\n        var outerZone = PSD;\n        if (possibleAwait)\n            incrementExpectedAwaits();\n        switchToZone(zone, true);\n        try {\n            return fn.apply(this, arguments);\n        }\n        finally {\n            switchToZone(outerZone, false);\n        }\n    };\n}\nfunction getPatchedPromiseThen(origThen, zone) {\n    return function (onResolved, onRejected) {\n        return origThen.call(this, nativeAwaitCompatibleWrap(onResolved, zone, false), nativeAwaitCompatibleWrap(onRejected, zone, false));\n    };\n}\nvar UNHANDLEDREJECTION = \"unhandledrejection\";\nfunction globalError(err, promise) {\n    var rv;\n    try {\n        rv = promise.onuncatched(err);\n    }\n    catch (e) { }\n    if (rv !== false)\n        try {\n            var event, eventData = { promise: promise, reason: err };\n            if (_global.document && document.createEvent) {\n                event = document.createEvent('Event');\n                event.initEvent(UNHANDLEDREJECTION, true, true);\n                extend(event, eventData);\n            }\n            else if (_global.CustomEvent) {\n                event = new CustomEvent(UNHANDLEDREJECTION, { detail: eventData });\n                extend(event, eventData);\n            }\n            if (event && _global.dispatchEvent) {\n                dispatchEvent(event);\n                if (!_global.PromiseRejectionEvent && _global.onunhandledrejection)\n                    try {\n                        _global.onunhandledrejection(event);\n                    }\n                    catch (_) { }\n            }\n            if (debug && event && !event.defaultPrevented) {\n                console.warn(\"Unhandled rejection: \" + (err.stack || err));\n            }\n        }\n        catch (e) { }\n}\nvar rejection = Promise$1.reject;\n\nfunction tempTransaction(db, mode, storeNames, fn) {\n    if (!db._state.openComplete && (!PSD.letThrough)) {\n        if (!db._state.isBeingOpened) {\n            if (!db._options.autoOpen)\n                return rejection(new exceptions.DatabaseClosed());\n            db.open().catch(nop);\n        }\n        return db._state.dbReadyPromise.then(function () { return tempTransaction(db, mode, storeNames, fn); });\n    }\n    else {\n        var trans = db._createTransaction(mode, storeNames, db._dbSchema);\n        try {\n            trans.create();\n        }\n        catch (ex) {\n            return rejection(ex);\n        }\n        return trans._promise(mode, function (resolve, reject) {\n            return newScope(function () {\n                PSD.trans = trans;\n                return fn(resolve, reject, trans);\n            });\n        }).then(function (result) {\n            return trans._completion.then(function () { return result; });\n        });\n    }\n}\n\nvar DEXIE_VERSION = '3.0.0-alpha.8';\nvar maxString = String.fromCharCode(65535);\nvar minKey = -Infinity;\nvar INVALID_KEY_ARGUMENT = \"Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.\";\nvar STRING_EXPECTED = \"String expected.\";\nvar connections = [];\nvar isIEOrEdge = typeof navigator !== 'undefined' && /(MSIE|Trident|Edge)/.test(navigator.userAgent);\nvar hasIEDeleteObjectStoreBug = isIEOrEdge;\nvar hangsOnDeleteLargeKeyRange = isIEOrEdge;\nvar dexieStackFrameFilter = function (frame) { return !/(dexie\\.js|dexie\\.min\\.js)/.test(frame); };\nvar DBNAMES_DB = '__dbnames';\nvar READONLY = 'readonly';\nvar READWRITE = 'readwrite';\n\nfunction combine(filter1, filter2) {\n    return filter1 ?\n        filter2 ?\n            function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } :\n            filter1 :\n        filter2;\n}\n\nvar AnyRange = {\n    type: 3          ,\n    lower: -Infinity,\n    lowerOpen: false,\n    upper: [[]],\n    upperOpen: false\n};\n\nvar Table =               (function () {\n    function Table() {\n    }\n    Table.prototype._trans = function (mode, fn, writeLocked) {\n        var trans = this._tx || PSD.trans;\n        var tableName = this.name;\n        function checkTableInTransaction(resolve, reject, trans) {\n            if (!trans.schema[tableName])\n                throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\");\n            return fn(trans.idbtrans, trans);\n        }\n        var wasRootExec = beginMicroTickScope();\n        try {\n            return trans && trans.db === this.db ?\n                trans === PSD.trans ?\n                    trans._promise(mode, checkTableInTransaction, writeLocked) :\n                    newScope(function () { return trans._promise(mode, checkTableInTransaction, writeLocked); }, { trans: trans, transless: PSD.transless || PSD }) :\n                tempTransaction(this.db, mode, [this.name], checkTableInTransaction);\n        }\n        finally {\n            if (wasRootExec)\n                endMicroTickScope();\n        }\n    };\n    Table.prototype.get = function (keyOrCrit, cb) {\n        var _this = this;\n        if (keyOrCrit && keyOrCrit.constructor === Object)\n            return this.where(keyOrCrit).first(cb);\n        return this._trans('readonly', function (trans) {\n            return _this.core.get({ trans: trans, key: keyOrCrit })\n                .then(function (res) { return _this.hook.reading.fire(res); });\n        }).then(cb);\n    };\n    Table.prototype.where = function (indexOrCrit) {\n        if (typeof indexOrCrit === 'string')\n            return new this.db.WhereClause(this, indexOrCrit);\n        if (isArray(indexOrCrit))\n            return new this.db.WhereClause(this, \"[\" + indexOrCrit.join('+') + \"]\");\n        var keyPaths = keys(indexOrCrit);\n        if (keyPaths.length === 1)\n            return this\n                .where(keyPaths[0])\n                .equals(indexOrCrit[keyPaths[0]]);\n        var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function (ix) {\n            return ix.compound &&\n                keyPaths.every(function (keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; }) &&\n                ix.keyPath.every(function (keyPath) { return keyPaths.indexOf(keyPath) >= 0; });\n        })[0];\n        if (compoundIndex && this.db._maxKey !== maxString)\n            return this\n                .where(compoundIndex.name)\n                .equals(compoundIndex.keyPath.map(function (kp) { return indexOrCrit[kp]; }));\n        if (!compoundIndex && debug)\n            console.warn(\"The query \" + JSON.stringify(indexOrCrit) + \" on \" + this.name + \" would benefit of a \" +\n                (\"compound index [\" + keyPaths.join('+') + \"]\"));\n        var idxByName = this.schema.idxByName;\n        var idb = this.db._deps.indexedDB;\n        function equals(a, b) {\n            try {\n                return idb.cmp(a, b) === 0;\n            }\n            catch (e) {\n                return false;\n            }\n        }\n        var _a = keyPaths.reduce(function (_a, keyPath) {\n            var prevIndex = _a[0], prevFilterFn = _a[1];\n            var index = idxByName[keyPath];\n            var value = indexOrCrit[keyPath];\n            return [\n                prevIndex || index,\n                prevIndex || !index ?\n                    combine(prevFilterFn, index && index.multi ?\n                        function (x) {\n                            var prop = getByKeyPath(x, keyPath);\n                            return isArray(prop) && prop.some(function (item) { return equals(value, item); });\n                        } : function (x) { return equals(value, getByKeyPath(x, keyPath)); })\n                    : prevFilterFn\n            ];\n        }, [null, null]), idx = _a[0], filterFunction = _a[1];\n        return idx ?\n            this.where(idx.name).equals(indexOrCrit[idx.keyPath])\n                .filter(filterFunction) :\n            compoundIndex ?\n                this.filter(filterFunction) :\n                this.where(keyPaths).equals('');\n    };\n    Table.prototype.filter = function (filterFunction) {\n        return this.toCollection().and(filterFunction);\n    };\n    Table.prototype.count = function (thenShortcut) {\n        return this.toCollection().count(thenShortcut);\n    };\n    Table.prototype.offset = function (offset) {\n        return this.toCollection().offset(offset);\n    };\n    Table.prototype.limit = function (numRows) {\n        return this.toCollection().limit(numRows);\n    };\n    Table.prototype.each = function (callback) {\n        return this.toCollection().each(callback);\n    };\n    Table.prototype.toArray = function (thenShortcut) {\n        return this.toCollection().toArray(thenShortcut);\n    };\n    Table.prototype.toCollection = function () {\n        return new this.db.Collection(new this.db.WhereClause(this));\n    };\n    Table.prototype.orderBy = function (index) {\n        return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ?\n            \"[\" + index.join('+') + \"]\" :\n            index));\n    };\n    Table.prototype.reverse = function () {\n        return this.toCollection().reverse();\n    };\n    Table.prototype.mapToClass = function (constructor) {\n        this.schema.mappedClass = constructor;\n        var readHook = function (obj) {\n            if (!obj)\n                return obj;\n            var res = Object.create(constructor.prototype);\n            for (var m in obj)\n                if (hasOwn(obj, m))\n                    try {\n                        res[m] = obj[m];\n                    }\n                    catch (_) { }\n            return res;\n        };\n        if (this.schema.readHook) {\n            this.hook.reading.unsubscribe(this.schema.readHook);\n        }\n        this.schema.readHook = readHook;\n        this.hook(\"reading\", readHook);\n        return constructor;\n    };\n    Table.prototype.defineClass = function () {\n        function Class(content) {\n            extend(this, content);\n        }\n        \n        return this.mapToClass(Class);\n    };\n    Table.prototype.add = function (obj, key) {\n        var _this = this;\n        return this._trans('readwrite', function (trans) {\n            return _this.core.mutate({ trans: trans, type: 'add', keys: key != null ? [key] : null, values: [obj] });\n        }).then(function (res) { return res.numFailures ? Promise$1.reject(res.failures[0]) : res.lastResult; })\n            .then(function (lastResult) {\n            if (!_this.core.schema.primaryKey.outbound) {\n                try {\n                    setByKeyPath(obj, _this.core.schema.primaryKey.keyPath, lastResult);\n                }\n                catch (_) { }\n                \n            }\n            return lastResult;\n        });\n    };\n    Table.prototype.update = function (keyOrObject, modifications) {\n        if (typeof modifications !== 'object' || isArray(modifications))\n            throw new exceptions.InvalidArgument(\"Modifications must be an object.\");\n        if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) {\n            keys(modifications).forEach(function (keyPath) {\n                setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);\n            });\n            var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath);\n            if (key === undefined)\n                return rejection(new exceptions.InvalidArgument(\"Given object does not contain its primary key\"));\n            return this.where(\":id\").equals(key).modify(modifications);\n        }\n        else {\n            return this.where(\":id\").equals(keyOrObject).modify(modifications);\n        }\n    };\n    Table.prototype.put = function (obj, key) {\n        var _this = this;\n        return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'put', values: [obj], keys: key != null ? [key] : null }); })\n            .then(function (res) { return res.numFailures ? Promise$1.reject(res.failures[0]) : res.lastResult; })\n            .then(function (lastResult) {\n            if (!_this.core.schema.primaryKey.outbound) {\n                try {\n                    setByKeyPath(obj, _this.core.schema.primaryKey.keyPath, lastResult);\n                }\n                catch (_) { }\n                \n            }\n            return lastResult;\n        });\n    };\n    Table.prototype.delete = function (key) {\n        var _this = this;\n        return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'delete', keys: [key] }); })\n            .then(function (res) { return res.numFailures ? Promise$1.reject(res.failures[0]) : undefined; });\n    };\n    Table.prototype.clear = function () {\n        var _this = this;\n        return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'deleteRange', range: AnyRange }); })\n            .then(function (res) { return res.numFailures ? Promise$1.reject(res.failures[0]) : undefined; });\n    };\n    Table.prototype.bulkGet = function (keys$$1) {\n        var _this = this;\n        return this._trans('readonly', function (trans) {\n            return _this.core.getMany({\n                keys: keys$$1,\n                trans: trans\n            });\n        });\n    };\n    Table.prototype.bulkAdd = function (objects, keys$$1) {\n        var _this = this;\n        return this._trans('readwrite', function (trans) {\n            var outbound = _this.core.schema.primaryKey.outbound;\n            if (!outbound && keys$$1)\n                throw new exceptions.InvalidArgument(\"bulkAdd(): keys argument invalid on tables with inbound keys\");\n            if (keys$$1 && keys$$1.length !== objects.length)\n                throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n            return _this.core.mutate({ trans: trans, type: 'add', keys: keys$$1, values: objects })\n                .then(function (_a) {\n                var numFailures = _a.numFailures, lastResult = _a.lastResult, failures = _a.failures;\n                if (numFailures === 0)\n                    return lastResult;\n                throw new BulkError(_this.name + \".bulkAdd(): \" + numFailures + \" of \" + objects.length + \" operations failed\", Object.keys(failures).map(function (pos) { return failures[pos]; }));\n            });\n        });\n    };\n    Table.prototype.bulkPut = function (objects, keys$$1) {\n        var _this = this;\n        return this._trans('readwrite', function (trans) {\n            var outbound = _this.core.schema.primaryKey.outbound;\n            if (!outbound && keys$$1)\n                throw new exceptions.InvalidArgument(\"bulkPut(): keys argument invalid on tables with inbound keys\");\n            if (keys$$1 && keys$$1.length !== objects.length)\n                throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n            return _this.core.mutate({ trans: trans, type: 'put', keys: keys$$1, values: objects })\n                .then(function (_a) {\n                var numFailures = _a.numFailures, lastResult = _a.lastResult, failures = _a.failures;\n                if (numFailures === 0)\n                    return lastResult;\n                throw new BulkError(_this.name + \".bulkPut(): \" + numFailures + \" of \" + objects.length + \" operations failed\", Object.keys(failures).map(function (pos) { return failures[pos]; }));\n            });\n        });\n    };\n    Table.prototype.bulkDelete = function (keys$$1) {\n        var _this = this;\n        return this._trans('readwrite', function (trans) {\n            return _this.core.mutate({ trans: trans, type: 'delete', keys: keys$$1 });\n        }).then(function (_a) {\n            var numFailures = _a.numFailures, lastResult = _a.lastResult, failures = _a.failures;\n            if (numFailures === 0)\n                return lastResult;\n            throw new BulkError(_this.name + \".bulkDelete(): \" + numFailures + \" of \" + keys$$1.length + \" operations failed\", failures);\n        });\n    };\n    return Table;\n}());\n\nfunction Events(ctx) {\n    var evs = {};\n    var rv = function (eventName, subscriber) {\n        if (subscriber) {\n            var i = arguments.length, args = new Array(i - 1);\n            while (--i)\n                args[i - 1] = arguments[i];\n            evs[eventName].subscribe.apply(null, args);\n            return ctx;\n        }\n        else if (typeof (eventName) === 'string') {\n            return evs[eventName];\n        }\n    };\n    rv.addEventType = add;\n    for (var i = 1, l = arguments.length; i < l; ++i) {\n        add(arguments[i]);\n    }\n    return rv;\n    function add(eventName, chainFunction, defaultFunction) {\n        if (typeof eventName === 'object')\n            return addConfiguredEvents(eventName);\n        if (!chainFunction)\n            chainFunction = reverseStoppableEventChain;\n        if (!defaultFunction)\n            defaultFunction = nop;\n        var context = {\n            subscribers: [],\n            fire: defaultFunction,\n            subscribe: function (cb) {\n                if (context.subscribers.indexOf(cb) === -1) {\n                    context.subscribers.push(cb);\n                    context.fire = chainFunction(context.fire, cb);\n                }\n            },\n            unsubscribe: function (cb) {\n                context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; });\n                context.fire = context.subscribers.reduce(chainFunction, defaultFunction);\n            }\n        };\n        evs[eventName] = rv[eventName] = context;\n        return context;\n    }\n    function addConfiguredEvents(cfg) {\n        keys(cfg).forEach(function (eventName) {\n            var args = cfg[eventName];\n            if (isArray(args)) {\n                add(eventName, cfg[eventName][0], cfg[eventName][1]);\n            }\n            else if (args === 'asap') {\n                var context = add(eventName, mirror, function fire() {\n                    var i = arguments.length, args = new Array(i);\n                    while (i--)\n                        args[i] = arguments[i];\n                    context.subscribers.forEach(function (fn) {\n                        asap(function fireEvent() {\n                            fn.apply(null, args);\n                        });\n                    });\n                });\n            }\n            else\n                throw new exceptions.InvalidArgument(\"Invalid event config\");\n        });\n    }\n}\n\nfunction makeClassConstructor(prototype, constructor) {\n    derive(constructor).from({ prototype: prototype });\n    return constructor;\n}\n\nfunction createTableConstructor(db) {\n    return makeClassConstructor(Table.prototype, function Table$$1(name, tableSchema, trans) {\n        this.db = db;\n        this._tx = trans;\n        this.name = name;\n        this.schema = tableSchema;\n        this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, {\n            \"creating\": [hookCreatingChain, nop],\n            \"reading\": [pureFunctionChain, mirror],\n            \"updating\": [hookUpdatingChain, nop],\n            \"deleting\": [hookDeletingChain, nop]\n        });\n    });\n}\n\nfunction isPlainKeyRange(ctx, ignoreLimitFilter) {\n    return !(ctx.filter || ctx.algorithm || ctx.or) &&\n        (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter);\n}\nfunction addFilter(ctx, fn) {\n    ctx.filter = combine(ctx.filter, fn);\n}\nfunction addReplayFilter(ctx, factory, isLimitFilter) {\n    var curr = ctx.replayFilter;\n    ctx.replayFilter = curr ? function () { return combine(curr(), factory()); } : factory;\n    ctx.justLimit = isLimitFilter && !curr;\n}\nfunction addMatchFilter(ctx, fn) {\n    ctx.isMatch = combine(ctx.isMatch, fn);\n}\nfunction getIndexOrStore(ctx, coreSchema) {\n    if (ctx.isPrimKey)\n        return coreSchema.primaryKey;\n    var index = coreSchema.getIndexByKeyPath(ctx.index);\n    if (!index)\n        throw new exceptions.Schema(\"KeyPath \" + ctx.index + \" on object store \" + coreSchema.name + \" is not indexed\");\n    return index;\n}\nfunction openCursor(ctx, coreTable, trans) {\n    var index = getIndexOrStore(ctx, coreTable.schema);\n    return coreTable.openCursor({\n        trans: trans,\n        values: !ctx.keysOnly,\n        reverse: ctx.dir === 'prev',\n        unique: !!ctx.unique,\n        query: {\n            index: index,\n            range: ctx.range\n        }\n    });\n}\nfunction iter(ctx, fn, coreTrans, coreTable) {\n    var filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter;\n    if (!ctx.or) {\n        return iterate(openCursor(ctx, coreTable, coreTrans), combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper);\n    }\n    else {\n        var set_1 = {};\n        var union = function (item, cursor, advance) {\n            if (!filter || filter(cursor, advance, function (result) { return cursor.stop(result); }, function (err) { return cursor.fail(err); })) {\n                var primaryKey = cursor.primaryKey;\n                var key = '' + primaryKey;\n                if (key === '[object ArrayBuffer]')\n                    key = '' + new Uint8Array(primaryKey);\n                if (!hasOwn(set_1, key)) {\n                    set_1[key] = true;\n                    fn(item, cursor, advance);\n                }\n            }\n        };\n        return Promise.all([\n            ctx.or._iterate(union, coreTrans),\n            iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper)\n        ]);\n    }\n}\nfunction iterate(cursorPromise, filter, fn, valueMapper) {\n    var mappedFn = valueMapper ? function (x, c, a) { return fn(valueMapper(x), c, a); } : fn;\n    var wrappedFn = wrap(mappedFn);\n    return cursorPromise.then(function (cursor) {\n        if (cursor) {\n            return cursor.start(function () {\n                var c = function () { return cursor.continue(); };\n                if (!filter || filter(cursor, function (advancer) { return c = advancer; }, function (val) { cursor.stop(val); c = nop; }, function (e) { cursor.fail(e); c = nop; }))\n                    wrappedFn(cursor.value, cursor, function (advancer) { return c = advancer; });\n                c();\n            });\n        }\n    });\n}\n\nvar Collection =               (function () {\n    function Collection() {\n    }\n    Collection.prototype._read = function (fn, cb) {\n        var ctx = this._ctx;\n        return ctx.error ?\n            ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n            ctx.table._trans('readonly', fn).then(cb);\n    };\n    Collection.prototype._write = function (fn) {\n        var ctx = this._ctx;\n        return ctx.error ?\n            ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n            ctx.table._trans('readwrite', fn, \"locked\");\n    };\n    Collection.prototype._addAlgorithm = function (fn) {\n        var ctx = this._ctx;\n        ctx.algorithm = combine(ctx.algorithm, fn);\n    };\n    Collection.prototype._iterate = function (fn, coreTrans) {\n        return iter(this._ctx, fn, coreTrans, this._ctx.table.core);\n    };\n    Collection.prototype.clone = function (props$$1) {\n        var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx);\n        if (props$$1)\n            extend(ctx, props$$1);\n        rv._ctx = ctx;\n        return rv;\n    };\n    Collection.prototype.raw = function () {\n        this._ctx.valueMapper = null;\n        return this;\n    };\n    Collection.prototype.each = function (fn) {\n        var ctx = this._ctx;\n        return this._read(function (trans) { return iter(ctx, fn, trans, ctx.table.core); });\n    };\n    Collection.prototype.count = function (cb) {\n        var _this = this;\n        return this._read(function (trans) {\n            var ctx = _this._ctx;\n            var coreTable = ctx.table.core;\n            if (isPlainKeyRange(ctx, true)) {\n                return coreTable.count({\n                    trans: trans,\n                    query: {\n                        index: getIndexOrStore(ctx, coreTable.schema),\n                        range: ctx.range\n                    }\n                }).then(function (count) { return Math.min(count, ctx.limit); });\n            }\n            else {\n                var count = 0;\n                return iter(ctx, function () { ++count; return false; }, trans, coreTable)\n                    .then(function () { return count; });\n            }\n        }).then(cb);\n    };\n    Collection.prototype.sortBy = function (keyPath, cb) {\n        var parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1;\n        function getval(obj, i) {\n            if (i)\n                return getval(obj[parts[i]], i - 1);\n            return obj[lastPart];\n        }\n        var order = this._ctx.dir === \"next\" ? 1 : -1;\n        function sorter(a, b) {\n            var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex);\n            return aVal < bVal ? -order : aVal > bVal ? order : 0;\n        }\n        return this.toArray(function (a) {\n            return a.sort(sorter);\n        }).then(cb);\n    };\n    Collection.prototype.toArray = function (cb) {\n        var _this = this;\n        return this._read(function (trans) {\n            var ctx = _this._ctx;\n            if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n                var valueMapper_1 = ctx.valueMapper;\n                var index = getIndexOrStore(ctx, ctx.table.core.schema);\n                return ctx.table.core.query({\n                    trans: trans,\n                    limit: ctx.limit,\n                    values: true,\n                    query: {\n                        index: index,\n                        range: ctx.range\n                    }\n                }).then(function (_a) {\n                    var result = _a.result;\n                    return valueMapper_1 ? result.map(valueMapper_1) : result;\n                });\n            }\n            else {\n                var a_1 = [];\n                return iter(ctx, function (item) { return a_1.push(item); }, trans, ctx.table.core).then(function () { return a_1; });\n            }\n        }, cb);\n    };\n    Collection.prototype.offset = function (offset) {\n        var ctx = this._ctx;\n        if (offset <= 0)\n            return this;\n        ctx.offset += offset;\n        if (isPlainKeyRange(ctx)) {\n            addReplayFilter(ctx, function () {\n                var offsetLeft = offset;\n                return function (cursor, advance) {\n                    if (offsetLeft === 0)\n                        return true;\n                    if (offsetLeft === 1) {\n                        --offsetLeft;\n                        return false;\n                    }\n                    advance(function () {\n                        cursor.advance(offsetLeft);\n                        offsetLeft = 0;\n                    });\n                    return false;\n                };\n            });\n        }\n        else {\n            addReplayFilter(ctx, function () {\n                var offsetLeft = offset;\n                return function () { return (--offsetLeft < 0); };\n            });\n        }\n        return this;\n    };\n    Collection.prototype.limit = function (numRows) {\n        this._ctx.limit = Math.min(this._ctx.limit, numRows);\n        addReplayFilter(this._ctx, function () {\n            var rowsLeft = numRows;\n            return function (cursor, advance, resolve) {\n                if (--rowsLeft <= 0)\n                    advance(resolve);\n                return rowsLeft >= 0;\n            };\n        }, true);\n        return this;\n    };\n    Collection.prototype.until = function (filterFunction, bIncludeStopEntry) {\n        addFilter(this._ctx, function (cursor, advance, resolve) {\n            if (filterFunction(cursor.value)) {\n                advance(resolve);\n                return bIncludeStopEntry;\n            }\n            else {\n                return true;\n            }\n        });\n        return this;\n    };\n    Collection.prototype.first = function (cb) {\n        return this.limit(1).toArray(function (a) { return a[0]; }).then(cb);\n    };\n    Collection.prototype.last = function (cb) {\n        return this.reverse().first(cb);\n    };\n    Collection.prototype.filter = function (filterFunction) {\n        addFilter(this._ctx, function (cursor) {\n            return filterFunction(cursor.value);\n        });\n        addMatchFilter(this._ctx, filterFunction);\n        return this;\n    };\n    Collection.prototype.and = function (filter) {\n        return this.filter(filter);\n    };\n    Collection.prototype.or = function (indexName) {\n        return new this.db.WhereClause(this._ctx.table, indexName, this);\n    };\n    Collection.prototype.reverse = function () {\n        this._ctx.dir = (this._ctx.dir === \"prev\" ? \"next\" : \"prev\");\n        if (this._ondirectionchange)\n            this._ondirectionchange(this._ctx.dir);\n        return this;\n    };\n    Collection.prototype.desc = function () {\n        return this.reverse();\n    };\n    Collection.prototype.eachKey = function (cb) {\n        var ctx = this._ctx;\n        ctx.keysOnly = !ctx.isMatch;\n        return this.each(function (val, cursor) { cb(cursor.key, cursor); });\n    };\n    Collection.prototype.eachUniqueKey = function (cb) {\n        this._ctx.unique = \"unique\";\n        return this.eachKey(cb);\n    };\n    Collection.prototype.eachPrimaryKey = function (cb) {\n        var ctx = this._ctx;\n        ctx.keysOnly = !ctx.isMatch;\n        return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); });\n    };\n    Collection.prototype.keys = function (cb) {\n        var ctx = this._ctx;\n        ctx.keysOnly = !ctx.isMatch;\n        var a = [];\n        return this.each(function (item, cursor) {\n            a.push(cursor.key);\n        }).then(function () {\n            return a;\n        }).then(cb);\n    };\n    Collection.prototype.primaryKeys = function (cb) {\n        var ctx = this._ctx;\n        if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n            return this._read(function (trans) {\n                var index = getIndexOrStore(ctx, ctx.table.core.schema);\n                return ctx.table.core.query({\n                    trans: trans,\n                    values: false,\n                    limit: ctx.limit,\n                    query: {\n                        index: index,\n                        range: ctx.range\n                    }\n                });\n            }).then(function (_a) {\n                var result = _a.result;\n                return result;\n            }).then(cb);\n        }\n        ctx.keysOnly = !ctx.isMatch;\n        var a = [];\n        return this.each(function (item, cursor) {\n            a.push(cursor.primaryKey);\n        }).then(function () {\n            return a;\n        }).then(cb);\n    };\n    Collection.prototype.uniqueKeys = function (cb) {\n        this._ctx.unique = \"unique\";\n        return this.keys(cb);\n    };\n    Collection.prototype.firstKey = function (cb) {\n        return this.limit(1).keys(function (a) { return a[0]; }).then(cb);\n    };\n    Collection.prototype.lastKey = function (cb) {\n        return this.reverse().firstKey(cb);\n    };\n    Collection.prototype.distinct = function () {\n        var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index];\n        if (!idx || !idx.multi)\n            return this;\n        var set = {};\n        addFilter(this._ctx, function (cursor) {\n            var strKey = cursor.primaryKey.toString();\n            var found = hasOwn(set, strKey);\n            set[strKey] = true;\n            return !found;\n        });\n        return this;\n    };\n    Collection.prototype.modify = function (changes) {\n        var _this = this;\n        var ctx = this._ctx;\n        return this._write(function (trans) {\n            var modifyer;\n            if (typeof changes === 'function') {\n                modifyer = changes;\n            }\n            else {\n                var keyPaths = keys(changes);\n                var numKeys = keyPaths.length;\n                modifyer = function (item) {\n                    var anythingModified = false;\n                    for (var i = 0; i < numKeys; ++i) {\n                        var keyPath = keyPaths[i], val = changes[keyPath];\n                        if (getByKeyPath(item, keyPath) !== val) {\n                            setByKeyPath(item, keyPath, val);\n                            anythingModified = true;\n                        }\n                    }\n                    return anythingModified;\n                };\n            }\n            var coreTable = ctx.table.core;\n            var _a = coreTable.schema.primaryKey, outbound = _a.outbound, extractKey = _a.extractKey;\n            var limit = 'testmode' in Dexie ? 1 : 2000;\n            var cmp = _this.db.core.cmp;\n            var totalFailures = [];\n            var successCount = 0;\n            var failedKeys = [];\n            var applyMutateResult = function (expectedCount, res) {\n                var failures = res.failures, numFailures = res.numFailures;\n                successCount += expectedCount - numFailures;\n                for (var pos in failures) {\n                    totalFailures.push(failures[pos]);\n                }\n            };\n            return _this.clone().primaryKeys().then(function (keys$$1) {\n                var nextChunk = function (offset) {\n                    var count = Math.min(limit, keys$$1.length - offset);\n                    return coreTable.getMany({ trans: trans, keys: keys$$1.slice(offset, offset + count) }).then(function (values) {\n                        var addValues = [];\n                        var putValues = [];\n                        var putKeys = outbound ? [] : null;\n                        var deleteKeys = [];\n                        for (var i = 0; i < count; ++i) {\n                            var origValue = values[i];\n                            var ctx_1 = {\n                                value: deepClone(origValue),\n                                primKey: keys$$1[offset + i]\n                            };\n                            if (modifyer.call(ctx_1, ctx_1.value, ctx_1) !== false) {\n                                if (ctx_1.value == null) {\n                                    deleteKeys.push(keys$$1[offset + i]);\n                                }\n                                else if (!outbound && cmp(extractKey(origValue), extractKey(ctx_1.value)) !== 0) {\n                                    deleteKeys.push(keys$$1[offset + i]);\n                                    addValues.push(ctx_1.value);\n                                }\n                                else {\n                                    putValues.push(ctx_1.value);\n                                    if (outbound)\n                                        putKeys.push(keys$$1[offset + i]);\n                                }\n                            }\n                        }\n                        return Promise.resolve(addValues.length > 0 &&\n                            coreTable.mutate({ trans: trans, type: 'add', values: addValues })\n                                .then(function (res) {\n                                for (var pos in res.failures) {\n                                    deleteKeys.splice(parseInt(pos), 1);\n                                }\n                                applyMutateResult(addValues.length, res);\n                            })).then(function (res) { return putValues.length > 0 &&\n                            coreTable.mutate({ trans: trans, type: 'put', keys: putKeys, values: putValues })\n                                .then(function (res) { return applyMutateResult(putValues.length, res); }); }).then(function () { return deleteKeys.length > 0 &&\n                            coreTable.mutate({ trans: trans, type: 'delete', keys: deleteKeys })\n                                .then(function (res) { return applyMutateResult(deleteKeys.length, res); }); }).then(function () {\n                            return keys$$1.length > offset + count && nextChunk(offset + limit);\n                        });\n                    });\n                };\n                return nextChunk(0).then(function () {\n                    if (totalFailures.length > 0)\n                        throw new ModifyError(\"Error modifying one or more objects\", totalFailures, successCount, failedKeys);\n                    return keys$$1.length;\n                });\n            });\n        });\n    };\n    Collection.prototype.delete = function () {\n        var ctx = this._ctx, range = ctx.range;\n        if (isPlainKeyRange(ctx) &&\n            ((ctx.isPrimKey && !hangsOnDeleteLargeKeyRange) || range.type === 3          ))\n         {\n            return this._write(function (trans) {\n                var primaryKey = ctx.table.core.schema.primaryKey;\n                var coreRange = range;\n                return ctx.table.core.count({ trans: trans, query: { index: primaryKey, range: coreRange } }).then(function (count) {\n                    return ctx.table.core.mutate({ trans: trans, type: 'deleteRange', range: coreRange })\n                        .then(function (_a) {\n                        var failures = _a.failures, lastResult = _a.lastResult, results = _a.results, numFailures = _a.numFailures;\n                        if (numFailures)\n                            throw new ModifyError(\"Could not delete some values\", Object.keys(failures).map(function (pos) { return failures[pos]; }), count - numFailures);\n                        return count - numFailures;\n                    });\n                });\n            });\n        }\n        return this.modify(function (value, ctx) { return ctx.value = null; });\n    };\n    return Collection;\n}());\n\nfunction createCollectionConstructor(db) {\n    return makeClassConstructor(Collection.prototype, function Collection$$1(whereClause, keyRangeGenerator) {\n        this.db = db;\n        var keyRange = AnyRange, error = null;\n        if (keyRangeGenerator)\n            try {\n                keyRange = keyRangeGenerator();\n            }\n            catch (ex) {\n                error = ex;\n            }\n        var whereCtx = whereClause._ctx;\n        var table = whereCtx.table;\n        var readingHook = table.hook.reading.fire;\n        this._ctx = {\n            table: table,\n            index: whereCtx.index,\n            isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)),\n            range: keyRange,\n            keysOnly: false,\n            dir: \"next\",\n            unique: \"\",\n            algorithm: null,\n            filter: null,\n            replayFilter: null,\n            justLimit: true,\n            isMatch: null,\n            offset: 0,\n            limit: Infinity,\n            error: error,\n            or: whereCtx.or,\n            valueMapper: readingHook !== mirror ? readingHook : null\n        };\n    });\n}\n\nfunction simpleCompare(a, b) {\n    return a < b ? -1 : a === b ? 0 : 1;\n}\nfunction simpleCompareReverse(a, b) {\n    return a > b ? -1 : a === b ? 0 : 1;\n}\n\nfunction fail(collectionOrWhereClause, err, T) {\n    var collection = collectionOrWhereClause instanceof WhereClause ?\n        new collectionOrWhereClause.Collection(collectionOrWhereClause) :\n        collectionOrWhereClause;\n    collection._ctx.error = T ? new T(err) : new TypeError(err);\n    return collection;\n}\nfunction emptyCollection(whereClause) {\n    return new whereClause.Collection(whereClause, function () { return rangeEqual(\"\"); }).limit(0);\n}\nfunction upperFactory(dir) {\n    return dir === \"next\" ?\n        function (s) { return s.toUpperCase(); } :\n        function (s) { return s.toLowerCase(); };\n}\nfunction lowerFactory(dir) {\n    return dir === \"next\" ?\n        function (s) { return s.toLowerCase(); } :\n        function (s) { return s.toUpperCase(); };\n}\nfunction nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) {\n    var length = Math.min(key.length, lowerNeedle.length);\n    var llp = -1;\n    for (var i = 0; i < length; ++i) {\n        var lwrKeyChar = lowerKey[i];\n        if (lwrKeyChar !== lowerNeedle[i]) {\n            if (cmp(key[i], upperNeedle[i]) < 0)\n                return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1);\n            if (cmp(key[i], lowerNeedle[i]) < 0)\n                return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1);\n            if (llp >= 0)\n                return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1);\n            return null;\n        }\n        if (cmp(key[i], lwrKeyChar) < 0)\n            llp = i;\n    }\n    if (length < lowerNeedle.length && dir === \"next\")\n        return key + upperNeedle.substr(key.length);\n    if (length < key.length && dir === \"prev\")\n        return key.substr(0, upperNeedle.length);\n    return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1));\n}\nfunction addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) {\n    var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length;\n    if (!needles.every(function (s) { return typeof s === 'string'; })) {\n        return fail(whereClause, STRING_EXPECTED);\n    }\n    function initDirection(dir) {\n        upper = upperFactory(dir);\n        lower = lowerFactory(dir);\n        compare = (dir === \"next\" ? simpleCompare : simpleCompareReverse);\n        var needleBounds = needles.map(function (needle) {\n            return { lower: lower(needle), upper: upper(needle) };\n        }).sort(function (a, b) {\n            return compare(a.lower, b.lower);\n        });\n        upperNeedles = needleBounds.map(function (nb) { return nb.upper; });\n        lowerNeedles = needleBounds.map(function (nb) { return nb.lower; });\n        direction = dir;\n        nextKeySuffix = (dir === \"next\" ? \"\" : suffix);\n    }\n    initDirection(\"next\");\n    var c = new whereClause.Collection(whereClause, function () { return createRange(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix); });\n    c._ondirectionchange = function (direction) {\n        initDirection(direction);\n    };\n    var firstPossibleNeedle = 0;\n    c._addAlgorithm(function (cursor, advance, resolve) {\n        var key = cursor.key;\n        if (typeof key !== 'string')\n            return false;\n        var lowerKey = lower(key);\n        if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) {\n            return true;\n        }\n        else {\n            var lowestPossibleCasing = null;\n            for (var i = firstPossibleNeedle; i < needlesLen; ++i) {\n                var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction);\n                if (casing === null && lowestPossibleCasing === null)\n                    firstPossibleNeedle = i + 1;\n                else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) {\n                    lowestPossibleCasing = casing;\n                }\n            }\n            if (lowestPossibleCasing !== null) {\n                advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); });\n            }\n            else {\n                advance(resolve);\n            }\n            return false;\n        }\n    });\n    return c;\n}\nfunction createRange(lower, upper, lowerOpen, upperOpen) {\n    return {\n        type: 2            ,\n        lower: lower,\n        upper: upper,\n        lowerOpen: lowerOpen,\n        upperOpen: upperOpen\n    };\n}\nfunction rangeEqual(value) {\n    return {\n        type: 1            ,\n        lower: value,\n        upper: value\n    };\n}\n\nvar WhereClause =               (function () {\n    function WhereClause() {\n    }\n    Object.defineProperty(WhereClause.prototype, \"Collection\", {\n        get: function () {\n            return this._ctx.table.db.Collection;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    WhereClause.prototype.between = function (lower, upper, includeLower, includeUpper) {\n        includeLower = includeLower !== false;\n        includeUpper = includeUpper === true;\n        try {\n            if ((this._cmp(lower, upper) > 0) ||\n                (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)))\n                return emptyCollection(this);\n            return new this.Collection(this, function () { return createRange(lower, upper, !includeLower, !includeUpper); });\n        }\n        catch (e) {\n            return fail(this, INVALID_KEY_ARGUMENT);\n        }\n    };\n    WhereClause.prototype.equals = function (value) {\n        return new this.Collection(this, function () { return rangeEqual(value); });\n    };\n    WhereClause.prototype.above = function (value) {\n        if (value == null)\n            return fail(this, INVALID_KEY_ARGUMENT);\n        return new this.Collection(this, function () { return createRange(value, undefined, true); });\n    };\n    WhereClause.prototype.aboveOrEqual = function (value) {\n        if (value == null)\n            return fail(this, INVALID_KEY_ARGUMENT);\n        return new this.Collection(this, function () { return createRange(value, undefined, false); });\n    };\n    WhereClause.prototype.below = function (value) {\n        if (value == null)\n            return fail(this, INVALID_KEY_ARGUMENT);\n        return new this.Collection(this, function () { return createRange(undefined, value, false, true); });\n    };\n    WhereClause.prototype.belowOrEqual = function (value) {\n        if (value == null)\n            return fail(this, INVALID_KEY_ARGUMENT);\n        return new this.Collection(this, function () { return createRange(undefined, value); });\n    };\n    WhereClause.prototype.startsWith = function (str) {\n        if (typeof str !== 'string')\n            return fail(this, STRING_EXPECTED);\n        return this.between(str, str + maxString, true, true);\n    };\n    WhereClause.prototype.startsWithIgnoreCase = function (str) {\n        if (str === \"\")\n            return this.startsWith(str);\n        return addIgnoreCaseAlgorithm(this, function (x, a) { return x.indexOf(a[0]) === 0; }, [str], maxString);\n    };\n    WhereClause.prototype.equalsIgnoreCase = function (str) {\n        return addIgnoreCaseAlgorithm(this, function (x, a) { return x === a[0]; }, [str], \"\");\n    };\n    WhereClause.prototype.anyOfIgnoreCase = function () {\n        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n        if (set.length === 0)\n            return emptyCollection(this);\n        return addIgnoreCaseAlgorithm(this, function (x, a) { return a.indexOf(x) !== -1; }, set, \"\");\n    };\n    WhereClause.prototype.startsWithAnyOfIgnoreCase = function () {\n        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n        if (set.length === 0)\n            return emptyCollection(this);\n        return addIgnoreCaseAlgorithm(this, function (x, a) { return a.some(function (n) { return x.indexOf(n) === 0; }); }, set, maxString);\n    };\n    WhereClause.prototype.anyOf = function () {\n        var _this = this;\n        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n        var compare = this._cmp;\n        try {\n            set.sort(compare);\n        }\n        catch (e) {\n            return fail(this, INVALID_KEY_ARGUMENT);\n        }\n        if (set.length === 0)\n            return emptyCollection(this);\n        var c = new this.Collection(this, function () { return createRange(set[0], set[set.length - 1]); });\n        c._ondirectionchange = function (direction) {\n            compare = (direction === \"next\" ?\n                _this._ascending :\n                _this._descending);\n            set.sort(compare);\n        };\n        var i = 0;\n        c._addAlgorithm(function (cursor, advance, resolve) {\n            var key = cursor.key;\n            while (compare(key, set[i]) > 0) {\n                ++i;\n                if (i === set.length) {\n                    advance(resolve);\n                    return false;\n                }\n            }\n            if (compare(key, set[i]) === 0) {\n                return true;\n            }\n            else {\n                advance(function () { cursor.continue(set[i]); });\n                return false;\n            }\n        });\n        return c;\n    };\n    WhereClause.prototype.notEqual = function (value) {\n        return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false });\n    };\n    WhereClause.prototype.noneOf = function () {\n        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n        if (set.length === 0)\n            return new this.Collection(this);\n        try {\n            set.sort(this._ascending);\n        }\n        catch (e) {\n            return fail(this, INVALID_KEY_ARGUMENT);\n        }\n        var ranges = set.reduce(function (res, val) { return res ?\n            res.concat([[res[res.length - 1][1], val]]) :\n            [[minKey, val]]; }, null);\n        ranges.push([set[set.length - 1], this.db._maxKey]);\n        return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false });\n    };\n    WhereClause.prototype.inAnyRange = function (ranges, options) {\n        var _this = this;\n        var cmp = this._cmp, ascending = this._ascending, descending = this._descending, min = this._min, max = this._max;\n        if (ranges.length === 0)\n            return emptyCollection(this);\n        if (!ranges.every(function (range) {\n            return range[0] !== undefined &&\n                range[1] !== undefined &&\n                ascending(range[0], range[1]) <= 0;\n        })) {\n            return fail(this, \"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower\", exceptions.InvalidArgument);\n        }\n        var includeLowers = !options || options.includeLowers !== false;\n        var includeUppers = options && options.includeUppers === true;\n        function addRange(ranges, newRange) {\n            var i = 0, l = ranges.length;\n            for (; i < l; ++i) {\n                var range = ranges[i];\n                if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) {\n                    range[0] = min(range[0], newRange[0]);\n                    range[1] = max(range[1], newRange[1]);\n                    break;\n                }\n            }\n            if (i === l)\n                ranges.push(newRange);\n            return ranges;\n        }\n        var sortDirection = ascending;\n        function rangeSorter(a, b) { return sortDirection(a[0], b[0]); }\n        var set;\n        try {\n            set = ranges.reduce(addRange, []);\n            set.sort(rangeSorter);\n        }\n        catch (ex) {\n            return fail(this, INVALID_KEY_ARGUMENT);\n        }\n        var rangePos = 0;\n        var keyIsBeyondCurrentEntry = includeUppers ?\n            function (key) { return ascending(key, set[rangePos][1]) > 0; } :\n            function (key) { return ascending(key, set[rangePos][1]) >= 0; };\n        var keyIsBeforeCurrentEntry = includeLowers ?\n            function (key) { return descending(key, set[rangePos][0]) > 0; } :\n            function (key) { return descending(key, set[rangePos][0]) >= 0; };\n        function keyWithinCurrentRange(key) {\n            return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);\n        }\n        var checkKey = keyIsBeyondCurrentEntry;\n        var c = new this.Collection(this, function () { return createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers); });\n        c._ondirectionchange = function (direction) {\n            if (direction === \"next\") {\n                checkKey = keyIsBeyondCurrentEntry;\n                sortDirection = ascending;\n            }\n            else {\n                checkKey = keyIsBeforeCurrentEntry;\n                sortDirection = descending;\n            }\n            set.sort(rangeSorter);\n        };\n        c._addAlgorithm(function (cursor, advance, resolve) {\n            var key = cursor.key;\n            while (checkKey(key)) {\n                ++rangePos;\n                if (rangePos === set.length) {\n                    advance(resolve);\n                    return false;\n                }\n            }\n            if (keyWithinCurrentRange(key)) {\n                return true;\n            }\n            else if (_this._cmp(key, set[rangePos][1]) === 0 || _this._cmp(key, set[rangePos][0]) === 0) {\n                return false;\n            }\n            else {\n                advance(function () {\n                    if (sortDirection === ascending)\n                        cursor.continue(set[rangePos][0]);\n                    else\n                        cursor.continue(set[rangePos][1]);\n                });\n                return false;\n            }\n        });\n        return c;\n    };\n    WhereClause.prototype.startsWithAnyOf = function () {\n        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n        if (!set.every(function (s) { return typeof s === 'string'; })) {\n            return fail(this, \"startsWithAnyOf() only works with strings\");\n        }\n        if (set.length === 0)\n            return emptyCollection(this);\n        return this.inAnyRange(set.map(function (str) { return [str, str + maxString]; }));\n    };\n    return WhereClause;\n}());\n\nfunction createWhereClauseConstructor(db) {\n    return makeClassConstructor(WhereClause.prototype, function WhereClause$$1(table, index, orCollection) {\n        this.db = db;\n        this._ctx = {\n            table: table,\n            index: index === \":id\" ? null : index,\n            or: orCollection\n        };\n        var indexedDB = db._deps.indexedDB;\n        if (!indexedDB)\n            throw new exceptions.MissingAPI(\"indexedDB API missing\");\n        this._cmp = this._ascending = indexedDB.cmp.bind(indexedDB);\n        this._descending = function (a, b) { return indexedDB.cmp(b, a); };\n        this._max = function (a, b) { return indexedDB.cmp(a, b) > 0 ? a : b; };\n        this._min = function (a, b) { return indexedDB.cmp(a, b) < 0 ? a : b; };\n        this._IDBKeyRange = db._deps.IDBKeyRange;\n    });\n}\n\nfunction safariMultiStoreFix(storeNames) {\n    return storeNames.length === 1 ? storeNames[0] : storeNames;\n}\n\nfunction getMaxKey(IdbKeyRange) {\n    try {\n        IdbKeyRange.only([[]]);\n        return [[]];\n    }\n    catch (e) {\n        return maxString;\n    }\n}\n\nfunction eventRejectHandler(reject) {\n    return wrap(function (event) {\n        preventDefault(event);\n        reject(event.target.error);\n        return false;\n    });\n}\n\n\n\nfunction preventDefault(event) {\n    if (event.stopPropagation)\n        event.stopPropagation();\n    if (event.preventDefault)\n        event.preventDefault();\n}\n\nvar Transaction =               (function () {\n    function Transaction() {\n    }\n    Transaction.prototype._lock = function () {\n        assert(!PSD.global);\n        ++this._reculock;\n        if (this._reculock === 1 && !PSD.global)\n            PSD.lockOwnerFor = this;\n        return this;\n    };\n    Transaction.prototype._unlock = function () {\n        assert(!PSD.global);\n        if (--this._reculock === 0) {\n            if (!PSD.global)\n                PSD.lockOwnerFor = null;\n            while (this._blockedFuncs.length > 0 && !this._locked()) {\n                var fnAndPSD = this._blockedFuncs.shift();\n                try {\n                    usePSD(fnAndPSD[1], fnAndPSD[0]);\n                }\n                catch (e) { }\n            }\n        }\n        return this;\n    };\n    Transaction.prototype._locked = function () {\n        return this._reculock && PSD.lockOwnerFor !== this;\n    };\n    Transaction.prototype.create = function (idbtrans) {\n        var _this = this;\n        if (!this.mode)\n            return this;\n        var idbdb = this.db.idbdb;\n        var dbOpenError = this.db._state.dbOpenError;\n        assert(!this.idbtrans);\n        if (!idbtrans && !idbdb) {\n            switch (dbOpenError && dbOpenError.name) {\n                case \"DatabaseClosedError\":\n                    throw new exceptions.DatabaseClosed(dbOpenError);\n                case \"MissingAPIError\":\n                    throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError);\n                default:\n                    throw new exceptions.OpenFailed(dbOpenError);\n            }\n        }\n        if (!this.active)\n            throw new exceptions.TransactionInactive();\n        assert(this._completion._state === null);\n        idbtrans = this.idbtrans = idbtrans || idbdb.transaction(safariMultiStoreFix(this.storeNames), this.mode);\n        idbtrans.onerror = wrap(function (ev) {\n            preventDefault(ev);\n            _this._reject(idbtrans.error);\n        });\n        idbtrans.onabort = wrap(function (ev) {\n            preventDefault(ev);\n            _this.active && _this._reject(new exceptions.Abort(idbtrans.error));\n            _this.active = false;\n            _this.on(\"abort\").fire(ev);\n        });\n        idbtrans.oncomplete = wrap(function () {\n            _this.active = false;\n            _this._resolve();\n        });\n        return this;\n    };\n    Transaction.prototype._promise = function (mode, fn, bWriteLock) {\n        var _this = this;\n        if (mode === 'readwrite' && this.mode !== 'readwrite')\n            return rejection(new exceptions.ReadOnly(\"Transaction is readonly\"));\n        if (!this.active)\n            return rejection(new exceptions.TransactionInactive());\n        if (this._locked()) {\n            return new Promise$1(function (resolve, reject) {\n                _this._blockedFuncs.push([function () {\n                        _this._promise(mode, fn, bWriteLock).then(resolve, reject);\n                    }, PSD]);\n            });\n        }\n        else if (bWriteLock) {\n            return newScope(function () {\n                var p = new Promise$1(function (resolve, reject) {\n                    _this._lock();\n                    var rv = fn(resolve, reject, _this);\n                    if (rv && rv.then)\n                        rv.then(resolve, reject);\n                });\n                p.finally(function () { return _this._unlock(); });\n                p._lib = true;\n                return p;\n            });\n        }\n        else {\n            var p = new Promise$1(function (resolve, reject) {\n                var rv = fn(resolve, reject, _this);\n                if (rv && rv.then)\n                    rv.then(resolve, reject);\n            });\n            p._lib = true;\n            return p;\n        }\n    };\n    Transaction.prototype._root = function () {\n        return this.parent ? this.parent._root() : this;\n    };\n    Transaction.prototype.waitFor = function (promiseLike) {\n        var root = this._root();\n        var promise = Promise$1.resolve(promiseLike);\n        if (root._waitingFor) {\n            root._waitingFor = root._waitingFor.then(function () { return promise; });\n        }\n        else {\n            root._waitingFor = promise;\n            root._waitingQueue = [];\n            var store = root.idbtrans.objectStore(root.storeNames[0]);\n            (function spin() {\n                ++root._spinCount;\n                while (root._waitingQueue.length)\n                    (root._waitingQueue.shift())();\n                if (root._waitingFor)\n                    store.get(-Infinity).onsuccess = spin;\n            }());\n        }\n        var currentWaitPromise = root._waitingFor;\n        return new Promise$1(function (resolve, reject) {\n            promise.then(function (res) { return root._waitingQueue.push(wrap(resolve.bind(null, res))); }, function (err) { return root._waitingQueue.push(wrap(reject.bind(null, err))); }).finally(function () {\n                if (root._waitingFor === currentWaitPromise) {\n                    root._waitingFor = null;\n                }\n            });\n        });\n    };\n    Transaction.prototype.abort = function () {\n        this.active && this._reject(new exceptions.Abort());\n        this.active = false;\n    };\n    Transaction.prototype.table = function (tableName) {\n        var memoizedTables = (this._memoizedTables || (this._memoizedTables = {}));\n        if (hasOwn(memoizedTables, tableName))\n            return memoizedTables[tableName];\n        var tableSchema = this.schema[tableName];\n        if (!tableSchema) {\n            throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\");\n        }\n        var transactionBoundTable = new this.db.Table(tableName, tableSchema, this);\n        transactionBoundTable.core = this.db.core.table(tableName);\n        memoizedTables[tableName] = transactionBoundTable;\n        return transactionBoundTable;\n    };\n    return Transaction;\n}());\n\nfunction createTransactionConstructor(db) {\n    return makeClassConstructor(Transaction.prototype, function Transaction$$1(mode, storeNames, dbschema, parent) {\n        var _this = this;\n        this.db = db;\n        this.mode = mode;\n        this.storeNames = storeNames;\n        this.schema = dbschema;\n        this.idbtrans = null;\n        this.on = Events(this, \"complete\", \"error\", \"abort\");\n        this.parent = parent || null;\n        this.active = true;\n        this._reculock = 0;\n        this._blockedFuncs = [];\n        this._resolve = null;\n        this._reject = null;\n        this._waitingFor = null;\n        this._waitingQueue = null;\n        this._spinCount = 0;\n        this._completion = new Promise$1(function (resolve, reject) {\n            _this._resolve = resolve;\n            _this._reject = reject;\n        });\n        this._completion.then(function () {\n            _this.active = false;\n            _this.on.complete.fire();\n        }, function (e) {\n            var wasActive = _this.active;\n            _this.active = false;\n            _this.on.error.fire(e);\n            _this.parent ?\n                _this.parent._reject(e) :\n                wasActive && _this.idbtrans && _this.idbtrans.abort();\n            return rejection(e);\n        });\n    });\n}\n\nfunction createIndexSpec(name, keyPath, unique, multi, auto, compound) {\n    return {\n        name: name,\n        keyPath: keyPath,\n        unique: unique,\n        multi: multi,\n        auto: auto,\n        compound: compound,\n        src: (unique ? '&' : '') + (multi ? '*' : '') + (auto ? \"++\" : \"\") + nameFromKeyPath(keyPath)\n    };\n}\nfunction nameFromKeyPath(keyPath) {\n    return typeof keyPath === 'string' ?\n        keyPath :\n        keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : \"\";\n}\n\nfunction createTableSchema(name, primKey, indexes) {\n    return {\n        name: name,\n        primKey: primKey,\n        indexes: indexes,\n        mappedClass: null,\n        idxByName: arrayToObject(indexes, function (index) { return [index.name, index]; })\n    };\n}\n\nfunction getKeyExtractor(keyPath) {\n    if (keyPath == null) {\n        return function () { return undefined; };\n    }\n    else if (typeof keyPath === 'string') {\n        return getSinglePathKeyExtractor(keyPath);\n    }\n    else {\n        return function (obj) { return getByKeyPath(obj, keyPath); };\n    }\n}\nfunction getSinglePathKeyExtractor(keyPath) {\n    var split = keyPath.split('.');\n    if (split.length === 1) {\n        return function (obj) { return obj[keyPath]; };\n    }\n    else {\n        return function (obj) { return getByKeyPath(obj, keyPath); };\n    }\n}\n\nfunction getEffectiveKeys(primaryKey, req) {\n    if (req.type === 'delete')\n        return req.keys;\n    return req.keys || req.values.map(primaryKey.extractKey);\n}\nfunction getExistingValues(table, req, effectiveKeys) {\n    return req.type === 'add' ? Promise.resolve(new Array(req.values.length)) :\n        table.getMany({ trans: req.trans, keys: effectiveKeys });\n}\n\nfunction arrayify(arrayLike) {\n    return [].slice.call(arrayLike);\n}\n\nvar _id_counter = 0;\nfunction getKeyPathAlias(keyPath) {\n    return keyPath == null ?\n        \":id\" :\n        typeof keyPath === 'string' ?\n            keyPath :\n            \"[\" + keyPath.join('+') + \"]\";\n}\nfunction createDBCore(db, indexedDB, IdbKeyRange, tmpTrans) {\n    var cmp = indexedDB.cmp.bind(indexedDB);\n    function extractSchema(db, trans) {\n        var tables = arrayify(db.objectStoreNames);\n        return {\n            schema: {\n                name: db.name,\n                tables: tables.map(function (table) { return trans.objectStore(table); }).map(function (store) {\n                    var keyPath = store.keyPath, autoIncrement = store.autoIncrement;\n                    var compound = isArray(keyPath);\n                    var outbound = keyPath == null;\n                    var indexByKeyPath = {};\n                    var result = {\n                        name: store.name,\n                        primaryKey: {\n                            name: null,\n                            isPrimaryKey: true,\n                            outbound: outbound,\n                            compound: compound,\n                            keyPath: keyPath,\n                            autoIncrement: autoIncrement,\n                            unique: true,\n                            extractKey: getKeyExtractor(keyPath)\n                        },\n                        indexes: arrayify(store.indexNames).map(function (indexName) { return store.index(indexName); })\n                            .map(function (index) {\n                            var name = index.name, unique = index.unique, multiEntry = index.multiEntry, keyPath = index.keyPath;\n                            var compound = isArray(keyPath);\n                            var result = {\n                                name: name,\n                                compound: compound,\n                                keyPath: keyPath,\n                                unique: unique,\n                                multiEntry: multiEntry,\n                                extractKey: getKeyExtractor(keyPath)\n                            };\n                            indexByKeyPath[getKeyPathAlias(keyPath)] = result;\n                            return result;\n                        }),\n                        getIndexByKeyPath: function (keyPath) { return indexByKeyPath[getKeyPathAlias(keyPath)]; }\n                    };\n                    indexByKeyPath[\":id\"] = result.primaryKey;\n                    if (keyPath != null) {\n                        indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey;\n                    }\n                    return result;\n                })\n            },\n            hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) &&\n                !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n                    !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n                    [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604)\n        };\n    }\n    function makeIDBKeyRange(range) {\n        if (range.type === 3          )\n            return null;\n        if (range.type === 4            )\n            throw new Error(\"Cannot convert never type to IDBKeyRange\");\n        var lower = range.lower, upper = range.upper, lowerOpen = range.lowerOpen, upperOpen = range.upperOpen;\n        var idbRange = lower === undefined ?\n            upper === undefined ?\n                null :\n                IdbKeyRange.upperBound(upper, !!upperOpen) :\n            upper === undefined ?\n                IdbKeyRange.lowerBound(lower, !!lowerOpen) :\n                IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen);\n        return idbRange;\n    }\n    function createDbCoreTable(tableSchema) {\n        var tableName = tableSchema.name;\n        function mutate(_a) {\n            var trans = _a.trans, type = _a.type, keys$$1 = _a.keys, values = _a.values, range = _a.range, wantResults = _a.wantResults;\n            return new Promise(function (resolve, reject) {\n                resolve = wrap(resolve);\n                var store = trans.objectStore(tableName);\n                var outbound = store.keyPath == null;\n                var isAddOrPut = type === \"put\" || type === \"add\";\n                if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange')\n                    throw new Error(\"Invalid operation type: \" + type);\n                var length = (keys$$1 || values || { length: 1 }).length;\n                if (keys$$1 && values && keys$$1.length !== values.length) {\n                    throw new Error(\"Given keys array must have same length as given values array.\");\n                }\n                if (length === 0)\n                    return resolve({ numFailures: 0, failures: {}, results: [], lastResult: undefined });\n                var results = wantResults && (keys$$1 ?\n                    keys$$1 :\n                    getEffectiveKeys(tableSchema.primaryKey, { type: type, keys: keys$$1, values: values })).slice();\n                var req;\n                var failures = [];\n                var numFailures = 0;\n                var errorHandler = function (event) {\n                    ++numFailures;\n                    preventDefault(event);\n                    if (results)\n                        results[event.target._reqno] = undefined;\n                    failures[event.target._reqno] = event.target.error;\n                };\n                var setResult = function (_a) {\n                    var target = _a.target;\n                    results[target._reqno] = target.result;\n                };\n                if (type === 'deleteRange') {\n                    if (range.type === 4            )\n                        return resolve({ numFailures: numFailures, failures: failures, results: results, lastResult: undefined });\n                    if (range.type === 3          )\n                        req = store.clear();\n                    else\n                        req = store.delete(makeIDBKeyRange(range));\n                }\n                else {\n                    var _a = isAddOrPut ?\n                        outbound ?\n                            [values, keys$$1] :\n                            [values, null] :\n                        [keys$$1, null], args1 = _a[0], args2 = _a[1];\n                    if (isAddOrPut) {\n                        for (var i = 0; i < length; ++i) {\n                            req = (args2 && args2[i] !== undefined ?\n                                store[type](args1[i], args2[i]) :\n                                store[type](args1[i]));\n                            req._reqno = i;\n                            if (results && results[i] === undefined) {\n                                req.onsuccess = setResult;\n                            }\n                            req.onerror = errorHandler;\n                        }\n                    }\n                    else {\n                        for (var i = 0; i < length; ++i) {\n                            req = store[type](args1[i]);\n                            req._reqno = i;\n                            req.onerror = errorHandler;\n                        }\n                    }\n                }\n                var done = function (event) {\n                    var lastResult = event.target.result;\n                    if (results)\n                        results[length - 1] = lastResult;\n                    resolve({\n                        numFailures: numFailures,\n                        failures: failures,\n                        results: results,\n                        lastResult: lastResult\n                    });\n                };\n                req.onerror = function (event) {\n                    errorHandler(event);\n                    done(event);\n                };\n                req.onsuccess = done;\n            });\n        }\n        function openCursor(_a) {\n            var trans = _a.trans, values = _a.values, query = _a.query, reverse = _a.reverse, unique = _a.unique;\n            return new Promise(function (resolve, reject) {\n                resolve = wrap(resolve);\n                var index = query.index, range = query.range;\n                var store = trans.objectStore(tableName);\n                var source = index.isPrimaryKey ?\n                    store :\n                    store.index(index.name);\n                var direction = reverse ?\n                    unique ?\n                        \"prevunique\" :\n                        \"prev\" :\n                    unique ?\n                        \"nextunique\" :\n                        \"next\";\n                var req = values || !('openKeyCursor' in source) ?\n                    source.openCursor(makeIDBKeyRange(range), direction) :\n                    source.openKeyCursor(makeIDBKeyRange(range), direction);\n                req.onerror = eventRejectHandler(reject);\n                req.onsuccess = wrap(function (ev) {\n                    var cursor = req.result;\n                    if (!cursor) {\n                        resolve(null);\n                        return;\n                    }\n                    cursor.___id = ++_id_counter;\n                    cursor.done = false;\n                    var _cursorContinue = cursor.continue.bind(cursor);\n                    var _cursorContinuePrimaryKey = cursor.continuePrimaryKey;\n                    if (_cursorContinuePrimaryKey)\n                        _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor);\n                    var _cursorAdvance = cursor.advance.bind(cursor);\n                    var doThrowCursorIsNotStarted = function () { throw new Error(\"Cursor not started\"); };\n                    var doThrowCursorIsStopped = function () { throw new Error(\"Cursor not stopped\"); };\n                    cursor.trans = trans;\n                    cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted;\n                    cursor.fail = wrap(reject);\n                    cursor.next = function () {\n                        var _this = this;\n                        var gotOne = 1;\n                        return this.start(function () { return gotOne-- ? _this.continue() : _this.stop(); }).then(function () { return _this; });\n                    };\n                    cursor.start = function (callback) {\n                        var iterationPromise = new Promise(function (resolveIteration, rejectIteration) {\n                            resolveIteration = wrap(resolveIteration);\n                            req.onerror = eventRejectHandler(rejectIteration);\n                            cursor.fail = rejectIteration;\n                            cursor.stop = function (value) {\n                                cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped;\n                                resolveIteration(value);\n                            };\n                        });\n                        var guardedCallback = function () {\n                            if (req.result) {\n                                try {\n                                    callback();\n                                }\n                                catch (err) {\n                                    cursor.fail(err);\n                                }\n                            }\n                            else {\n                                cursor.done = true;\n                                cursor.start = function () { throw new Error(\"Cursor behind last entry\"); };\n                                cursor.stop();\n                            }\n                        };\n                        req.onsuccess = wrap(function (ev) {\n                            req.onsuccess = guardedCallback;\n                            guardedCallback();\n                        });\n                        cursor.continue = _cursorContinue;\n                        cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n                        cursor.advance = _cursorAdvance;\n                        guardedCallback();\n                        return iterationPromise;\n                    };\n                    resolve(cursor);\n                }, reject);\n            });\n        }\n        function query(hasGetAll) {\n            return function (request) {\n                return new Promise(function (resolve, reject) {\n                    resolve = wrap(resolve);\n                    var trans = request.trans, values = request.values, limit = request.limit, query = request.query;\n                    var nonInfinitLimit = limit === Infinity ? undefined : limit;\n                    var index = query.index, range = query.range;\n                    var store = trans.objectStore(tableName);\n                    var source = index.isPrimaryKey ? store : store.index(index.name);\n                    var idbKeyRange = makeIDBKeyRange(range);\n                    if (limit === 0)\n                        return resolve({ result: [] });\n                    if (hasGetAll) {\n                        var req = values ?\n                            source.getAll(idbKeyRange, nonInfinitLimit) :\n                            source.getAllKeys(idbKeyRange, nonInfinitLimit);\n                        req.onsuccess = function (event) { return resolve({ result: event.target.result }); };\n                        req.onerror = eventRejectHandler(reject);\n                    }\n                    else {\n                        var count_1 = 0;\n                        var req_1 = values || !('openKeyCursor' in source) ?\n                            source.openCursor(idbKeyRange) :\n                            source.openKeyCursor(idbKeyRange);\n                        var result_1 = [];\n                        req_1.onsuccess = function (event) {\n                            var cursor = req_1.result;\n                            if (!cursor)\n                                return resolve({ result: result_1 });\n                            result_1.push(values ? cursor.value : cursor.primaryKey);\n                            if (++count_1 === limit)\n                                return resolve({ result: result_1 });\n                            cursor.continue();\n                        };\n                        req_1.onerror = eventRejectHandler(reject);\n                    }\n                });\n            };\n        }\n        return {\n            name: tableName,\n            schema: tableSchema,\n            mutate: mutate,\n            getMany: function (_a) {\n                var trans = _a.trans, keys$$1 = _a.keys;\n                return new Promise(function (resolve, reject) {\n                    resolve = wrap(resolve);\n                    var store = trans.objectStore(tableName);\n                    var length = keys$$1.length;\n                    var result = new Array(length);\n                    var keyCount = 0;\n                    var callbackCount = 0;\n                    var valueCount = 0;\n                    var req;\n                    var successHandler = function (event) {\n                        var req = event.target;\n                        if ((result[req._pos] = req.result) != null)\n                            ++valueCount;\n                        if (++callbackCount === keyCount)\n                            resolve(result);\n                    };\n                    var errorHandler = eventRejectHandler(reject);\n                    for (var i = 0; i < length; ++i) {\n                        var key = keys$$1[i];\n                        if (key != null) {\n                            req = store.get(keys$$1[i]);\n                            req._pos = i;\n                            req.onsuccess = successHandler;\n                            req.onerror = errorHandler;\n                            ++keyCount;\n                        }\n                    }\n                    if (keyCount === 0)\n                        resolve(result);\n                });\n            },\n            get: function (_a) {\n                var trans = _a.trans, key = _a.key;\n                return new Promise(function (resolve, reject) {\n                    resolve = wrap(resolve);\n                    var store = trans.objectStore(tableName);\n                    var req = store.get(key);\n                    req.onsuccess = function (event) { return resolve(event.target.result); };\n                    req.onerror = eventRejectHandler(reject);\n                });\n            },\n            query: query(hasGetAll),\n            openCursor: openCursor,\n            count: function (_a) {\n                var query = _a.query, trans = _a.trans;\n                var index = query.index, range = query.range;\n                return new Promise(function (resolve, reject) {\n                    var store = trans.objectStore(tableName);\n                    var source = index.isPrimaryKey ? store : store.index(index.name);\n                    var idbKeyRange = makeIDBKeyRange(range);\n                    var req = idbKeyRange ? source.count(idbKeyRange) : source.count();\n                    req.onsuccess = wrap(function (ev) { return resolve(ev.target.result); });\n                    req.onerror = eventRejectHandler(reject);\n                });\n            }\n        };\n    }\n    var _a = extractSchema(db, tmpTrans), schema = _a.schema, hasGetAll = _a.hasGetAll;\n    var tables = schema.tables.map(function (tableSchema) { return createDbCoreTable(tableSchema); });\n    var tableMap = {};\n    tables.forEach(function (table) { return tableMap[table.name] = table; });\n    return {\n        stack: \"dbcore\",\n        transaction: db.transaction.bind(db),\n        table: function (name) {\n            var result = tableMap[name];\n            if (!result)\n                throw new Error(\"Table '\" + name + \"' not found\");\n            return tableMap[name];\n        },\n        cmp: cmp,\n        MIN_KEY: -Infinity,\n        MAX_KEY: getMaxKey(IdbKeyRange),\n        schema: schema\n    };\n}\n\nfunction createMiddlewareStack(stackImpl, middlewares) {\n    return middlewares.reduce(function (down, _a) {\n        var create = _a.create;\n        return (__assign({}, down, create(down)));\n    }, stackImpl);\n}\nfunction createMiddlewareStacks(middlewares, idbdb, _a, tmpTrans) {\n    var IDBKeyRange = _a.IDBKeyRange, indexedDB = _a.indexedDB;\n    var dbcore = createMiddlewareStack(createDBCore(idbdb, indexedDB, IDBKeyRange, tmpTrans), middlewares.dbcore);\n    return {\n        dbcore: dbcore\n    };\n}\nfunction generateMiddlewareStacks(db, tmpTrans) {\n    var idbdb = tmpTrans.db;\n    var stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans);\n    db.core = stacks.dbcore;\n    db.tables.forEach(function (table) {\n        var tableName = table.name;\n        if (db.core.schema.tables.some(function (tbl) { return tbl.name === tableName; })) {\n            table.core = db.core.table(tableName);\n            if (db[tableName] instanceof db.Table) {\n                db[tableName].core = table.core;\n            }\n        }\n    });\n}\n\nfunction setApiOnPlace(db, objs, tableNames, dbschema) {\n    tableNames.forEach(function (tableName) {\n        var schema = dbschema[tableName];\n        objs.forEach(function (obj) {\n            if (!(tableName in obj)) {\n                if (obj === db.Transaction.prototype || obj instanceof db.Transaction) {\n                    setProp(obj, tableName, { get: function () { return this.table(tableName); } });\n                }\n                else {\n                    obj[tableName] = new db.Table(tableName, schema);\n                }\n            }\n        });\n    });\n}\nfunction removeTablesApi(db, objs) {\n    objs.forEach(function (obj) {\n        for (var key in obj) {\n            if (obj[key] instanceof db.Table)\n                delete obj[key];\n        }\n    });\n}\nfunction lowerVersionFirst(a, b) {\n    return a._cfg.version - b._cfg.version;\n}\nfunction runUpgraders(db, oldVersion, idbUpgradeTrans, reject) {\n    var globalSchema = db._dbSchema;\n    var trans = db._createTransaction('readwrite', db._storeNames, globalSchema);\n    trans.create(idbUpgradeTrans);\n    trans._completion.catch(reject);\n    var rejectTransaction = trans._reject.bind(trans);\n    var transless = PSD.transless || PSD;\n    newScope(function () {\n        PSD.trans = trans;\n        PSD.transless = transless;\n        if (oldVersion === 0) {\n            keys(globalSchema).forEach(function (tableName) {\n                createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);\n            });\n            generateMiddlewareStacks(db, idbUpgradeTrans);\n            Promise$1.follow(function () { return db.on.populate.fire(trans); }).catch(rejectTransaction);\n        }\n        else\n            updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans).catch(rejectTransaction);\n    });\n}\nfunction updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans) {\n    var queue = [];\n    var versions = db._versions;\n    var oldVersionStruct = versions.filter(function (version) { return version._cfg.version === oldVersion; })[0];\n    if (!oldVersionStruct)\n        throw new exceptions.Upgrade(\"Dexie specification of currently installed DB version is missing\");\n    var globalSchema = db._dbSchema = oldVersionStruct._cfg.dbschema;\n    var anyContentUpgraderHasRun = false;\n    var versToRun = versions.filter(function (v) { return v._cfg.version > oldVersion; });\n    versToRun.forEach(function (version) {\n        queue.push(function () {\n            var oldSchema = globalSchema;\n            var newSchema = version._cfg.dbschema;\n            adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans);\n            adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans);\n            globalSchema = db._dbSchema = newSchema;\n            var diff = getSchemaDiff(oldSchema, newSchema);\n            diff.add.forEach(function (tuple) {\n                createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes);\n            });\n            diff.change.forEach(function (change) {\n                if (change.recreate) {\n                    throw new exceptions.Upgrade(\"Not yet support for changing primary key\");\n                }\n                else {\n                    var store_1 = idbUpgradeTrans.objectStore(change.name);\n                    change.add.forEach(function (idx) { return addIndex(store_1, idx); });\n                    change.change.forEach(function (idx) {\n                        store_1.deleteIndex(idx.name);\n                        addIndex(store_1, idx);\n                    });\n                    change.del.forEach(function (idxName) { return store_1.deleteIndex(idxName); });\n                }\n            });\n            var contentUpgrade = version._cfg.contentUpgrade;\n            if (contentUpgrade) {\n                generateMiddlewareStacks(db, idbUpgradeTrans);\n                anyContentUpgraderHasRun = true;\n                var upgradeSchema_1 = shallowClone(newSchema);\n                diff.del.forEach(function (table) {\n                    upgradeSchema_1[table] = oldSchema[table];\n                });\n                removeTablesApi(db, [db.Transaction.prototype]);\n                setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema_1), upgradeSchema_1);\n                trans.schema = upgradeSchema_1;\n                if (contentUpgrade.constructor === AsyncFunction) {\n                    incrementExpectedAwaits();\n                }\n                var returnValue_1;\n                var promiseFollowed = Promise$1.follow(function () {\n                    returnValue_1 = contentUpgrade(trans);\n                    if (returnValue_1) {\n                        if (returnValue_1.constructor === NativePromise) {\n                            var decrementor = decrementExpectedAwaits.bind(null, null);\n                            returnValue_1.then(decrementor, decrementor);\n                        }\n                    }\n                });\n                return (returnValue_1 && typeof returnValue_1.then === 'function' ?\n                    Promise$1.resolve(returnValue_1) : promiseFollowed.then(function () { return returnValue_1; }));\n            }\n        });\n        queue.push(function (idbtrans) {\n            if (!anyContentUpgraderHasRun || !hasIEDeleteObjectStoreBug) {\n                var newSchema = version._cfg.dbschema;\n                deleteRemovedTables(newSchema, idbtrans);\n            }\n            removeTablesApi(db, [db.Transaction.prototype]);\n            setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema);\n            trans.schema = db._dbSchema;\n        });\n    });\n    function runQueue() {\n        return queue.length ? Promise$1.resolve(queue.shift()(trans.idbtrans)).then(runQueue) :\n            Promise$1.resolve();\n    }\n    return runQueue().then(function () {\n        createMissingTables(globalSchema, idbUpgradeTrans);\n    });\n}\nfunction getSchemaDiff(oldSchema, newSchema) {\n    var diff = {\n        del: [],\n        add: [],\n        change: []\n    };\n    var table;\n    for (table in oldSchema) {\n        if (!newSchema[table])\n            diff.del.push(table);\n    }\n    for (table in newSchema) {\n        var oldDef = oldSchema[table], newDef = newSchema[table];\n        if (!oldDef) {\n            diff.add.push([table, newDef]);\n        }\n        else {\n            var change = {\n                name: table,\n                def: newDef,\n                recreate: false,\n                del: [],\n                add: [],\n                change: []\n            };\n            if (oldDef.primKey.src !== newDef.primKey.src) {\n                change.recreate = true;\n                diff.change.push(change);\n            }\n            else {\n                var oldIndexes = oldDef.idxByName;\n                var newIndexes = newDef.idxByName;\n                var idxName = void 0;\n                for (idxName in oldIndexes) {\n                    if (!newIndexes[idxName])\n                        change.del.push(idxName);\n                }\n                for (idxName in newIndexes) {\n                    var oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName];\n                    if (!oldIdx)\n                        change.add.push(newIdx);\n                    else if (oldIdx.src !== newIdx.src)\n                        change.change.push(newIdx);\n                }\n                if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) {\n                    diff.change.push(change);\n                }\n            }\n        }\n    }\n    return diff;\n}\nfunction createTable(idbtrans, tableName, primKey, indexes) {\n    var store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ?\n        { keyPath: primKey.keyPath, autoIncrement: primKey.auto } :\n        { autoIncrement: primKey.auto });\n    indexes.forEach(function (idx) { return addIndex(store, idx); });\n    return store;\n}\nfunction createMissingTables(newSchema, idbtrans) {\n    keys(newSchema).forEach(function (tableName) {\n        if (!idbtrans.db.objectStoreNames.contains(tableName)) {\n            createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes);\n        }\n    });\n}\nfunction deleteRemovedTables(newSchema, idbtrans) {\n    for (var i = 0; i < idbtrans.db.objectStoreNames.length; ++i) {\n        var storeName = idbtrans.db.objectStoreNames[i];\n        if (newSchema[storeName] == null) {\n            idbtrans.db.deleteObjectStore(storeName);\n        }\n    }\n}\nfunction addIndex(store, idx) {\n    store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi });\n}\nfunction readGlobalSchema(db, idbdb, tmpTrans) {\n    db.verno = idbdb.version / 10;\n    var globalSchema = db._dbSchema = {};\n    var dbStoreNames = db._storeNames = slice(idbdb.objectStoreNames, 0);\n    if (dbStoreNames.length === 0)\n        return;\n    dbStoreNames.forEach(function (storeName) {\n        var store = tmpTrans.objectStore(storeName);\n        var keyPath = store.keyPath;\n        var primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || \"\", false, false, !!store.autoIncrement, keyPath && typeof keyPath !== 'string');\n        var indexes = [];\n        for (var j = 0; j < store.indexNames.length; ++j) {\n            var idbindex = store.index(store.indexNames[j]);\n            keyPath = idbindex.keyPath;\n            var index = createIndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== 'string');\n            indexes.push(index);\n        }\n        globalSchema[storeName] = createTableSchema(storeName, primKey, indexes);\n    });\n    setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema);\n}\nfunction adjustToExistingIndexNames(db, schema, idbtrans) {\n    var storeNames = idbtrans.db.objectStoreNames;\n    for (var i = 0; i < storeNames.length; ++i) {\n        var storeName = storeNames[i];\n        var store = idbtrans.objectStore(storeName);\n        db._hasGetAll = 'getAll' in store;\n        for (var j = 0; j < store.indexNames.length; ++j) {\n            var indexName = store.indexNames[j];\n            var keyPath = store.index(indexName).keyPath;\n            var dexieName = typeof keyPath === 'string' ? keyPath : \"[\" + slice(keyPath).join('+') + \"]\";\n            if (schema[storeName]) {\n                var indexSpec = schema[storeName].idxByName[dexieName];\n                if (indexSpec)\n                    indexSpec.name = indexName;\n            }\n        }\n    }\n    if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n        !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n        _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope &&\n        [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604) {\n        db._hasGetAll = false;\n    }\n}\nfunction parseIndexSyntax(indexes) {\n    var rv = [];\n    indexes.split(',').forEach(function (index) {\n        index = index.trim();\n        var name = index.replace(/([&*]|\\+\\+)/g, \"\");\n        var keyPath = /^\\[/.test(name) ? name.match(/^\\[(.*)\\]$/)[1].split('+') : name;\n        rv.push(createIndexSpec(name, keyPath || null, /\\&/.test(index), /\\*/.test(index), /\\+\\+/.test(index), isArray(keyPath)));\n    });\n    return rv;\n}\n\nvar Version =               (function () {\n    function Version() {\n    }\n    Version.prototype._parseStoresSpec = function (stores, outSchema) {\n        keys(stores).forEach(function (tableName) {\n            if (stores[tableName] !== null) {\n                var indexes = parseIndexSyntax(stores[tableName]);\n                var primKey = indexes.shift();\n                if (primKey.multi)\n                    throw new exceptions.Schema(\"Primary key cannot be multi-valued\");\n                indexes.forEach(function (idx) {\n                    if (idx.auto)\n                        throw new exceptions.Schema(\"Only primary key can be marked as autoIncrement (++)\");\n                    if (!idx.keyPath)\n                        throw new exceptions.Schema(\"Index must have a name and cannot be an empty string\");\n                });\n                outSchema[tableName] = createTableSchema(tableName, primKey, indexes);\n            }\n        });\n    };\n    Version.prototype.stores = function (stores) {\n        var db = this.db;\n        this._cfg.storesSource = this._cfg.storesSource ?\n            extend(this._cfg.storesSource, stores) :\n            stores;\n        var versions = db._versions;\n        var storesSpec = {};\n        versions.forEach(function (version) {\n            extend(storesSpec, version._cfg.storesSource);\n        });\n        var dbschema = (this._cfg.dbschema = {});\n        this._parseStoresSpec(storesSpec, dbschema);\n        db._dbSchema = dbschema;\n        removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]);\n        setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema);\n        db._storeNames = keys(dbschema);\n        return this;\n    };\n    Version.prototype.upgrade = function (upgradeFunction) {\n        this._cfg.contentUpgrade = upgradeFunction;\n        return this;\n    };\n    return Version;\n}());\n\nfunction createVersionConstructor(db) {\n    return makeClassConstructor(Version.prototype, function Version$$1(versionNumber) {\n        this.db = db;\n        this._cfg = {\n            version: versionNumber,\n            storesSource: null,\n            dbschema: {},\n            tables: {},\n            contentUpgrade: null\n        };\n        this.stores({});\n    });\n}\n\nvar databaseEnumerator;\nfunction DatabaseEnumerator(indexedDB) {\n    var getDatabaseNamesNative = indexedDB && (indexedDB.getDatabaseNames || indexedDB.webkitGetDatabaseNames);\n    var dbNamesTable;\n    if (!getDatabaseNamesNative) {\n        var db = new Dexie(DBNAMES_DB, { addons: [] });\n        db.version(1).stores({ dbnames: 'name' });\n        dbNamesTable = db.table('dbnames');\n    }\n    return {\n        getDatabaseNames: function () {\n            return getDatabaseNamesNative ? new Promise$1(function (resolve, reject) {\n                var req = getDatabaseNamesNative.call(indexedDB);\n                req.onsuccess = function (event) { return resolve(slice(event.target.result, 0)); };\n                req.onerror = eventRejectHandler(reject);\n            }) : dbNamesTable.toCollection().primaryKeys();\n        },\n        add: function (name) {\n            return !getDatabaseNamesNative && name !== DBNAMES_DB && dbNamesTable.put({ name: name }).catch(nop);\n        },\n        remove: function (name) {\n            return !getDatabaseNamesNative && name !== DBNAMES_DB && dbNamesTable.delete(name).catch(nop);\n        }\n    };\n}\nfunction initDatabaseEnumerator(indexedDB) {\n    try {\n        databaseEnumerator = DatabaseEnumerator(indexedDB);\n    }\n    catch (e) { }\n}\n\nfunction vip(fn) {\n    return newScope(function () {\n        PSD.letThrough = true;\n        return fn();\n    });\n}\n\nfunction dexieOpen(db) {\n    var state = db._state;\n    var indexedDB = db._deps.indexedDB;\n    if (state.isBeingOpened || db.idbdb)\n        return state.dbReadyPromise.then(function () { return state.dbOpenError ?\n            rejection(state.dbOpenError) :\n            db; });\n    debug && (state.openCanceller._stackHolder = getErrorWithStack());\n    state.isBeingOpened = true;\n    state.dbOpenError = null;\n    state.openComplete = false;\n    var resolveDbReady = state.dbReadyResolve,\n    upgradeTransaction = null;\n    return Promise$1.race([state.openCanceller, new Promise$1(function (resolve, reject) {\n            if (!indexedDB)\n                throw new exceptions.MissingAPI(\"indexedDB API not found. If using IE10+, make sure to run your code on a server URL \" +\n                    \"(not locally). If using old Safari versions, make sure to include indexedDB polyfill.\");\n            var dbName = db.name;\n            var req = state.autoSchema ?\n                indexedDB.open(dbName) :\n                indexedDB.open(dbName, Math.round(db.verno * 10));\n            if (!req)\n                throw new exceptions.MissingAPI(\"IndexedDB API not available\");\n            req.onerror = eventRejectHandler(reject);\n            req.onblocked = wrap(db._fireOnBlocked);\n            req.onupgradeneeded = wrap(function (e) {\n                upgradeTransaction = req.transaction;\n                if (state.autoSchema && !db._options.allowEmptyDB) {\n                    req.onerror = preventDefault;\n                    upgradeTransaction.abort();\n                    req.result.close();\n                    var delreq = indexedDB.deleteDatabase(dbName);\n                    delreq.onsuccess = delreq.onerror = wrap(function () {\n                        reject(new exceptions.NoSuchDatabase(\"Database \" + dbName + \" doesnt exist\"));\n                    });\n                }\n                else {\n                    upgradeTransaction.onerror = eventRejectHandler(reject);\n                    var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion;\n                    runUpgraders(db, oldVer / 10, upgradeTransaction, reject);\n                }\n            }, reject);\n            req.onsuccess = wrap(function () {\n                upgradeTransaction = null;\n                var idbdb = db.idbdb = req.result;\n                var objectStoreNames = slice(idbdb.objectStoreNames);\n                if (objectStoreNames.length > 0)\n                    try {\n                        var tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly');\n                        if (state.autoSchema)\n                            readGlobalSchema(db, idbdb, tmpTrans);\n                        else\n                            adjustToExistingIndexNames(db, db._dbSchema, tmpTrans);\n                        generateMiddlewareStacks(db, tmpTrans);\n                    }\n                    catch (e) {\n                    }\n                connections.push(db);\n                idbdb.onversionchange = wrap(function (ev) {\n                    state.vcFired = true;\n                    db.on(\"versionchange\").fire(ev);\n                });\n                databaseEnumerator.add(dbName);\n                resolve();\n            }, reject);\n        })]).then(function () {\n        state.onReadyBeingFired = [];\n        return Promise$1.resolve(vip(db.on.ready.fire)).then(function fireRemainders() {\n            if (state.onReadyBeingFired.length > 0) {\n                var remainders = state.onReadyBeingFired.reduce(promisableChain, nop);\n                state.onReadyBeingFired = [];\n                return Promise$1.resolve(vip(remainders)).then(fireRemainders);\n            }\n        });\n    }).finally(function () {\n        state.onReadyBeingFired = null;\n    }).then(function () {\n        state.isBeingOpened = false;\n        return db;\n    }).catch(function (err) {\n        try {\n            upgradeTransaction && upgradeTransaction.abort();\n        }\n        catch (e) { }\n        state.isBeingOpened = false;\n        db.close();\n        state.dbOpenError = err;\n        return rejection(state.dbOpenError);\n    }).finally(function () {\n        state.openComplete = true;\n        resolveDbReady();\n    });\n}\n\nfunction awaitIterator(iterator) {\n    var callNext = function (result) { return iterator.next(result); }, doThrow = function (error) { return iterator.throw(error); }, onSuccess = step(callNext), onError = step(doThrow);\n    function step(getNext) {\n        return function (val) {\n            var next = getNext(val), value = next.value;\n            return next.done ? value :\n                (!value || typeof value.then !== 'function' ?\n                    isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) :\n                    value.then(onSuccess, onError));\n        };\n    }\n    return step(callNext)();\n}\n\nfunction extractTransactionArgs(mode, _tableArgs_, scopeFunc) {\n    var i = arguments.length;\n    if (i < 2)\n        throw new exceptions.InvalidArgument(\"Too few arguments\");\n    var args = new Array(i - 1);\n    while (--i)\n        args[i - 1] = arguments[i];\n    scopeFunc = args.pop();\n    var tables = flatten(args);\n    return [mode, tables, scopeFunc];\n}\nfunction enterTransactionScope(db, mode, storeNames, parentTransaction, scopeFunc) {\n    return Promise$1.resolve().then(function () {\n        var transless = PSD.transless || PSD;\n        var trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction);\n        var zoneProps = {\n            trans: trans,\n            transless: transless\n        };\n        if (parentTransaction) {\n            trans.idbtrans = parentTransaction.idbtrans;\n        }\n        else {\n            trans.create();\n        }\n        if (scopeFunc.constructor === AsyncFunction) {\n            incrementExpectedAwaits();\n        }\n        var returnValue;\n        var promiseFollowed = Promise$1.follow(function () {\n            returnValue = scopeFunc.call(trans, trans);\n            if (returnValue) {\n                if (returnValue.constructor === NativePromise) {\n                    var decrementor = decrementExpectedAwaits.bind(null, null);\n                    returnValue.then(decrementor, decrementor);\n                }\n                else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') {\n                    returnValue = awaitIterator(returnValue);\n                }\n            }\n        }, zoneProps);\n        return (returnValue && typeof returnValue.then === 'function' ?\n            Promise$1.resolve(returnValue).then(function (x) { return trans.active ?\n                x\n                : rejection(new exceptions.PrematureCommit(\"Transaction committed too early. See http://bit.ly/2kdckMn\")); })\n            : promiseFollowed.then(function () { return returnValue; })).then(function (x) {\n            if (parentTransaction)\n                trans._resolve();\n            return trans._completion.then(function () { return x; });\n        }).catch(function (e) {\n            trans._reject(e);\n            return rejection(e);\n        });\n    });\n}\n\nfunction pad(a, value, count) {\n    if (!isArray(a))\n        a = [a];\n    var length = a.length;\n    var result = new Array(length + count);\n    for (var i = a.length + count - 1; i >= length; --i) {\n        result[i] = value;\n    }\n    return result;\n}\nfunction createVirtualIndexMiddleware(down) {\n    return __assign({}, down, { table: function (tableName) {\n            var table = down.table(tableName);\n            var schema = table.schema;\n            var indexLookup = {};\n            var allVirtualIndexes = [];\n            function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) {\n                var keyPathAlias = getKeyPathAlias(keyPath);\n                var indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []);\n                var keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length;\n                var isVirtual = keyTail > 0;\n                var virtualIndex = __assign({}, lowLevelIndex, { isVirtual: isVirtual, isPrimaryKey: !isVirtual && lowLevelIndex.isPrimaryKey, keyTail: keyTail,\n                    keyLength: keyLength, extractKey: getKeyExtractor(keyPath), unique: !isVirtual && lowLevelIndex.unique });\n                indexList.push(virtualIndex);\n                if (!virtualIndex.isPrimaryKey) {\n                    allVirtualIndexes.push(virtualIndex);\n                }\n                if (keyLength > 1) {\n                    var virtualKeyPath = keyLength === 2 ?\n                        keyPath[0] :\n                        keyPath.slice(0, keyLength - 1);\n                    addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex);\n                }\n                indexList.sort(function (a, b) { return a.keyTail - b.keyTail; });\n                return virtualIndex;\n            }\n            var primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey);\n            indexLookup[\":id\"] = [primaryKey];\n            for (var _i = 0, _a = schema.indexes; _i < _a.length; _i++) {\n                var index = _a[_i];\n                addVirtualIndexes(index.keyPath, 0, index);\n            }\n            function findBestIndex(keyPath) {\n                var result = indexLookup[getKeyPathAlias(keyPath)];\n                return result && result[0];\n            }\n            function translateRange(range, keyTail) {\n                return {\n                    type: range.type === 1             ?\n                        2             :\n                        range.type,\n                    lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail),\n                    lowerOpen: true,\n                    upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail),\n                    upperOpen: true\n                };\n            }\n            function translateRequest(req) {\n                var index = req.query.index;\n                return index.isVirtual ? __assign({}, req, { query: {\n                        index: index,\n                        range: translateRange(req.query.range, index.keyTail)\n                    } }) : req;\n            }\n            var result = __assign({}, table, { schema: __assign({}, schema, { primaryKey: primaryKey, indexes: allVirtualIndexes, getIndexByKeyPath: findBestIndex }), count: function (req) {\n                    return table.count(translateRequest(req));\n                },\n                query: function (req) {\n                    return table.query(translateRequest(req));\n                },\n                openCursor: function (req) {\n                    var _a = req.query.index, keyTail = _a.keyTail, isVirtual = _a.isVirtual, keyLength = _a.keyLength;\n                    if (!isVirtual)\n                        return table.openCursor(req);\n                    function createVirtualCursor(cursor) {\n                        function _continue(key) {\n                            key != null ?\n                                cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) :\n                                req.unique ?\n                                    cursor.continue(pad(cursor.key, req.reverse ? down.MIN_KEY : down.MAX_KEY, keyTail)) :\n                                    cursor.continue();\n                        }\n                        return __assign({}, cursor, { continue: _continue, continuePrimaryKey: function (key, primaryKey) {\n                                cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey);\n                            }, get key() {\n                                var key = cursor.key;\n                                return keyLength === 1 ?\n                                    key[0] :\n                                    key.slice(0, keyLength);\n                            } });\n                    }\n                    return table.openCursor(translateRequest(req))\n                        .then(function (cursor) { return cursor && createVirtualCursor(cursor); });\n                } });\n            return result;\n        } });\n}\nvar virtualIndexMiddleware = {\n    stack: \"dbcore\",\n    name: \"VirtualIndexMiddleware\",\n    level: 1,\n    create: createVirtualIndexMiddleware\n};\n\nvar hooksMiddleware = {\n    stack: \"dbcore\",\n    name: \"HooksMiddleware\",\n    level: 2,\n    create: function (downCore) { return (__assign({}, downCore, { table: function (tableName) {\n            var downTable = downCore.table(tableName);\n            var primaryKey = downTable.schema.primaryKey;\n            var tableMiddleware = __assign({}, downTable, { mutate: function (req) {\n                    var dxTrans = PSD.trans;\n                    var _a = dxTrans.table(tableName).hook, deleting = _a.deleting, creating = _a.creating, updating = _a.updating;\n                    switch (req.type) {\n                        case 'add':\n                            if (creating.fire === nop)\n                                break;\n                            return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true);\n                        case 'put':\n                            if (creating.fire === nop && updating.fire === nop)\n                                break;\n                            return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true);\n                        case 'delete':\n                            if (deleting.fire === nop)\n                                break;\n                            return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true);\n                        case 'deleteRange':\n                            if (deleting.fire === nop)\n                                break;\n                            return dxTrans._promise('readwrite', function () { return deleteRange(req); }, true);\n                    }\n                    return downTable.mutate(req);\n                    function addPutOrDelete(req) {\n                        var dxTrans = PSD.trans;\n                        var keys$$1 = req.keys || getEffectiveKeys(primaryKey, req);\n                        if (!keys$$1)\n                            throw new Error(\"Keys missing\");\n                        req = req.type === 'add' || req.type === 'put' ? __assign({}, req, { keys: keys$$1, wantResults: true }) :\n                         __assign({}, req);\n                        if (req.type !== 'delete')\n                            req.values = req.values.slice();\n                        if (req.keys)\n                            req.keys = req.keys.slice();\n                        return getExistingValues(downTable, req, keys$$1).then(function (existingValues) {\n                            var contexts = keys$$1.map(function (key, i) {\n                                var existingValue = existingValues[i];\n                                var ctx = { onerror: null, onsuccess: null };\n                                if (req.type === 'delete') {\n                                    deleting.fire.call(ctx, key, existingValue, dxTrans);\n                                }\n                                else if (req.type === 'add' || existingValue === undefined) {\n                                    var generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans);\n                                    if (key == null && generatedPrimaryKey != null) {\n                                        key = generatedPrimaryKey;\n                                        req.keys[i] = key;\n                                        if (!primaryKey.outbound) {\n                                            setByKeyPath(req.values[i], primaryKey.keyPath, key);\n                                        }\n                                    }\n                                }\n                                else {\n                                    var objectDiff = getObjectDiff(existingValue, req.values[i]);\n                                    var additionalChanges_1 = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans);\n                                    if (additionalChanges_1) {\n                                        var requestedValue_1 = req.values[i];\n                                        Object.keys(additionalChanges_1).forEach(function (keyPath) {\n                                            setByKeyPath(requestedValue_1, keyPath, additionalChanges_1[keyPath]);\n                                        });\n                                    }\n                                }\n                                return ctx;\n                            });\n                            return downTable.mutate(req).then(function (_a) {\n                                var failures = _a.failures, results = _a.results, numFailures = _a.numFailures, lastResult = _a.lastResult;\n                                for (var i = 0; i < keys$$1.length; ++i) {\n                                    var primKey = results ? results[i] : keys$$1[i];\n                                    var ctx = contexts[i];\n                                    if (primKey == null) {\n                                        ctx.onerror && ctx.onerror(failures[i]);\n                                    }\n                                    else {\n                                        ctx.onsuccess && ctx.onsuccess(req.type === 'put' && existingValues[i] ?\n                                            req.values[i] :\n                                            primKey\n                                        );\n                                    }\n                                }\n                                return { failures: failures, results: results, numFailures: numFailures, lastResult: lastResult };\n                            }).catch(function (error) {\n                                contexts.forEach(function (ctx) { return ctx.onerror && ctx.onerror(error); });\n                                return Promise.reject(error);\n                            });\n                        });\n                    }\n                    function deleteRange(req) {\n                        return deleteNextChunk(req.trans, req.range, 10000);\n                    }\n                    function deleteNextChunk(trans, range, limit) {\n                        return downTable.query({ trans: trans, values: false, query: { index: primaryKey, range: range }, limit: limit })\n                            .then(function (_a) {\n                            var result = _a.result;\n                            return addPutOrDelete({ type: 'delete', keys: result, trans: trans }).then(function (res) {\n                                if (res.numFailures > 0)\n                                    return Promise.reject(res.failures[0]);\n                                if (result.length < limit) {\n                                    return { failures: [], numFailures: 0, lastResult: undefined };\n                                }\n                                else {\n                                    return deleteNextChunk(trans, __assign({}, range, { lower: result[result.length - 1], lowerOpen: true }), limit);\n                                }\n                            });\n                        });\n                    }\n                } });\n            return tableMiddleware;\n        } })); }\n};\n\nvar Dexie =               (function () {\n    function Dexie(name, options) {\n        var _this = this;\n        this._middlewares = {};\n        this.verno = 0;\n        var deps = Dexie.dependencies;\n        this._options = options = __assign({\n            addons: Dexie.addons, autoOpen: true,\n            indexedDB: deps.indexedDB, IDBKeyRange: deps.IDBKeyRange }, options);\n        this._deps = {\n            indexedDB: options.indexedDB,\n            IDBKeyRange: options.IDBKeyRange\n        };\n        var addons = options.addons;\n        this._dbSchema = {};\n        this._versions = [];\n        this._storeNames = [];\n        this._allTables = {};\n        this.idbdb = null;\n        var state = {\n            dbOpenError: null,\n            isBeingOpened: false,\n            onReadyBeingFired: null,\n            openComplete: false,\n            dbReadyResolve: nop,\n            dbReadyPromise: null,\n            cancelOpen: nop,\n            openCanceller: null,\n            autoSchema: true\n        };\n        state.dbReadyPromise = new Promise$1(function (resolve) {\n            state.dbReadyResolve = resolve;\n        });\n        state.openCanceller = new Promise$1(function (_, reject) {\n            state.cancelOpen = reject;\n        });\n        this._state = state;\n        this.name = name;\n        this.on = Events(this, \"populate\", \"blocked\", \"versionchange\", { ready: [promisableChain, nop] });\n        this.on.ready.subscribe = override(this.on.ready.subscribe, function (subscribe) {\n            return function (subscriber, bSticky) {\n                Dexie.vip(function () {\n                    var state = _this._state;\n                    if (state.openComplete) {\n                        if (!state.dbOpenError)\n                            Promise$1.resolve().then(subscriber);\n                        if (bSticky)\n                            subscribe(subscriber);\n                    }\n                    else if (state.onReadyBeingFired) {\n                        state.onReadyBeingFired.push(subscriber);\n                        if (bSticky)\n                            subscribe(subscriber);\n                    }\n                    else {\n                        subscribe(subscriber);\n                        var db_1 = _this;\n                        if (!bSticky)\n                            subscribe(function unsubscribe() {\n                                db_1.on.ready.unsubscribe(subscriber);\n                                db_1.on.ready.unsubscribe(unsubscribe);\n                            });\n                    }\n                });\n            };\n        });\n        this.Collection = createCollectionConstructor(this);\n        this.Table = createTableConstructor(this);\n        this.Transaction = createTransactionConstructor(this);\n        this.Version = createVersionConstructor(this);\n        this.WhereClause = createWhereClauseConstructor(this);\n        this.on(\"versionchange\", function (ev) {\n            if (ev.newVersion > 0)\n                console.warn(\"Another connection wants to upgrade database '\" + _this.name + \"'. Closing db now to resume the upgrade.\");\n            else\n                console.warn(\"Another connection wants to delete database '\" + _this.name + \"'. Closing db now to resume the delete request.\");\n            _this.close();\n        });\n        this.on(\"blocked\", function (ev) {\n            if (!ev.newVersion || ev.newVersion < ev.oldVersion)\n                console.warn(\"Dexie.delete('\" + _this.name + \"') was blocked\");\n            else\n                console.warn(\"Upgrade '\" + _this.name + \"' blocked by other connection holding version \" + ev.oldVersion / 10);\n        });\n        this._maxKey = getMaxKey(options.IDBKeyRange);\n        this._createTransaction = function (mode, storeNames, dbschema, parentTransaction) { return new _this.Transaction(mode, storeNames, dbschema, parentTransaction); };\n        this._fireOnBlocked = function (ev) {\n            _this.on(\"blocked\").fire(ev);\n            connections\n                .filter(function (c) { return c.name === _this.name && c !== _this && !c._state.vcFired; })\n                .map(function (c) { return c.on(\"versionchange\").fire(ev); });\n        };\n        this.use(virtualIndexMiddleware);\n        this.use(hooksMiddleware);\n        addons.forEach(function (addon) { return addon(_this); });\n    }\n    Dexie.prototype.version = function (versionNumber) {\n        versionNumber = Math.round(versionNumber * 10) / 10;\n        if (this.idbdb || this._state.isBeingOpened)\n            throw new exceptions.Schema(\"Cannot add version when database is open\");\n        this.verno = Math.max(this.verno, versionNumber);\n        var versions = this._versions;\n        var versionInstance = versions.filter(function (v) { return v._cfg.version === versionNumber; })[0];\n        if (versionInstance)\n            return versionInstance;\n        versionInstance = new this.Version(versionNumber);\n        versions.push(versionInstance);\n        versions.sort(lowerVersionFirst);\n        this._state.autoSchema = false;\n        return versionInstance;\n    };\n    Dexie.prototype._whenReady = function (fn) {\n        var _this = this;\n        return this._state.openComplete || PSD.letThrough ? fn() : new Promise$1(function (resolve, reject) {\n            if (!_this._state.isBeingOpened) {\n                if (!_this._options.autoOpen) {\n                    reject(new exceptions.DatabaseClosed());\n                    return;\n                }\n                _this.open().catch(nop);\n            }\n            _this._state.dbReadyPromise.then(resolve, reject);\n        }).then(fn);\n    };\n    Dexie.prototype.use = function (_a) {\n        var stack = _a.stack, create = _a.create, level = _a.level, name = _a.name;\n        if (name)\n            this.unuse({ stack: stack, name: name });\n        var middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);\n        middlewares.push({ stack: stack, create: create, level: level == null ? 10 : level, name: name });\n        middlewares.sort(function (a, b) { return a.level - b.level; });\n        return this;\n    };\n    Dexie.prototype.unuse = function (_a) {\n        var stack = _a.stack, name = _a.name, create = _a.create;\n        if (stack && this._middlewares[stack]) {\n            this._middlewares[stack] = this._middlewares[stack].filter(function (mw) {\n                return create ? mw.create !== create :\n                    name ? mw.name !== name :\n                        false;\n            });\n        }\n        return this;\n    };\n    Dexie.prototype.open = function () {\n        return dexieOpen(this);\n    };\n    Dexie.prototype.close = function () {\n        var idx = connections.indexOf(this), state = this._state;\n        if (idx >= 0)\n            connections.splice(idx, 1);\n        if (this.idbdb) {\n            try {\n                this.idbdb.close();\n            }\n            catch (e) { }\n            this.idbdb = null;\n        }\n        this._options.autoOpen = false;\n        state.dbOpenError = new exceptions.DatabaseClosed();\n        if (state.isBeingOpened)\n            state.cancelOpen(state.dbOpenError);\n        state.dbReadyPromise = new Promise$1(function (resolve) {\n            state.dbReadyResolve = resolve;\n        });\n        state.openCanceller = new Promise$1(function (_, reject) {\n            state.cancelOpen = reject;\n        });\n    };\n    Dexie.prototype.delete = function () {\n        var _this = this;\n        var hasArguments = arguments.length > 0;\n        var state = this._state;\n        return new Promise$1(function (resolve, reject) {\n            var doDelete = function () {\n                _this.close();\n                var req = _this._deps.indexedDB.deleteDatabase(_this.name);\n                req.onsuccess = wrap(function () {\n                    databaseEnumerator.remove(_this.name);\n                    resolve();\n                });\n                req.onerror = eventRejectHandler(reject);\n                req.onblocked = _this._fireOnBlocked;\n            };\n            if (hasArguments)\n                throw new exceptions.InvalidArgument(\"Arguments not allowed in db.delete()\");\n            if (state.isBeingOpened) {\n                state.dbReadyPromise.then(doDelete);\n            }\n            else {\n                doDelete();\n            }\n        });\n    };\n    Dexie.prototype.backendDB = function () {\n        return this.idbdb;\n    };\n    Dexie.prototype.isOpen = function () {\n        return this.idbdb !== null;\n    };\n    Dexie.prototype.hasBeenClosed = function () {\n        var dbOpenError = this._state.dbOpenError;\n        return dbOpenError && (dbOpenError.name === 'DatabaseClosed');\n    };\n    Dexie.prototype.hasFailed = function () {\n        return this._state.dbOpenError !== null;\n    };\n    Dexie.prototype.dynamicallyOpened = function () {\n        return this._state.autoSchema;\n    };\n    Object.defineProperty(Dexie.prototype, \"tables\", {\n        get: function () {\n            var _this = this;\n            return keys(this._allTables).map(function (name) { return _this._allTables[name]; });\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Dexie.prototype.transaction = function () {\n        var args = extractTransactionArgs.apply(this, arguments);\n        return this._transaction.apply(this, args);\n    };\n    Dexie.prototype._transaction = function (mode, tables, scopeFunc) {\n        var _this = this;\n        var parentTransaction = PSD.trans;\n        if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1)\n            parentTransaction = null;\n        var onlyIfCompatible = mode.indexOf('?') !== -1;\n        mode = mode.replace('!', '').replace('?', '');\n        var idbMode, storeNames;\n        try {\n            storeNames = tables.map(function (table) {\n                var storeName = table instanceof _this.Table ? table.name : table;\n                if (typeof storeName !== 'string')\n                    throw new TypeError(\"Invalid table argument to Dexie.transaction(). Only Table or String are allowed\");\n                return storeName;\n            });\n            if (mode == \"r\" || mode === READONLY)\n                idbMode = READONLY;\n            else if (mode == \"rw\" || mode == READWRITE)\n                idbMode = READWRITE;\n            else\n                throw new exceptions.InvalidArgument(\"Invalid transaction mode: \" + mode);\n            if (parentTransaction) {\n                if (parentTransaction.mode === READONLY && idbMode === READWRITE) {\n                    if (onlyIfCompatible) {\n                        parentTransaction = null;\n                    }\n                    else\n                        throw new exceptions.SubTransaction(\"Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY\");\n                }\n                if (parentTransaction) {\n                    storeNames.forEach(function (storeName) {\n                        if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) {\n                            if (onlyIfCompatible) {\n                                parentTransaction = null;\n                            }\n                            else\n                                throw new exceptions.SubTransaction(\"Table \" + storeName +\n                                    \" not included in parent transaction.\");\n                        }\n                    });\n                }\n                if (onlyIfCompatible && parentTransaction && !parentTransaction.active) {\n                    parentTransaction = null;\n                }\n            }\n        }\n        catch (e) {\n            return parentTransaction ?\n                parentTransaction._promise(null, function (_, reject) { reject(e); }) :\n                rejection(e);\n        }\n        var enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc);\n        return (parentTransaction ?\n            parentTransaction._promise(idbMode, enterTransaction, \"lock\") :\n            PSD.trans ?\n                usePSD(PSD.transless, function () { return _this._whenReady(enterTransaction); }) :\n                this._whenReady(enterTransaction));\n    };\n    Dexie.prototype.table = function (tableName) {\n        if (!hasOwn(this._allTables, tableName)) {\n            throw new exceptions.InvalidTable(\"Table \" + tableName + \" does not exist\");\n        }\n        return this._allTables[tableName];\n    };\n    return Dexie;\n}());\n\nvar Dexie$1 = Dexie;\nprops(Dexie$1, __assign({}, fullNameExceptions, {\n    delete: function (databaseName) {\n        var db = new Dexie$1(databaseName);\n        return db.delete();\n    },\n    exists: function (name) {\n        return new Dexie$1(name, { addons: [] }).open().then(function (db) {\n            db.close();\n            return true;\n        }).catch('NoSuchDatabaseError', function () { return false; });\n    },\n    getDatabaseNames: function (cb) {\n        return databaseEnumerator ?\n            databaseEnumerator.getDatabaseNames().then(cb) :\n            Promise$1.resolve([]);\n    },\n    defineClass: function () {\n        function Class(content) {\n            extend(this, content);\n        }\n        return Class;\n    },\n    ignoreTransaction: function (scopeFunc) {\n        return PSD.trans ?\n            usePSD(PSD.transless, scopeFunc) :\n            scopeFunc();\n    },\n    vip: vip, async: function (generatorFn) {\n        return function () {\n            try {\n                var rv = awaitIterator(generatorFn.apply(this, arguments));\n                if (!rv || typeof rv.then !== 'function')\n                    return Promise$1.resolve(rv);\n                return rv;\n            }\n            catch (e) {\n                return rejection(e);\n            }\n        };\n    }, spawn: function (generatorFn, args, thiz) {\n        try {\n            var rv = awaitIterator(generatorFn.apply(thiz, args || []));\n            if (!rv || typeof rv.then !== 'function')\n                return Promise$1.resolve(rv);\n            return rv;\n        }\n        catch (e) {\n            return rejection(e);\n        }\n    },\n    currentTransaction: {\n        get: function () { return PSD.trans || null; }\n    }, waitFor: function (promiseOrFunction, optionalTimeout) {\n        var promise = Promise$1.resolve(typeof promiseOrFunction === 'function' ?\n            Dexie$1.ignoreTransaction(promiseOrFunction) :\n            promiseOrFunction)\n            .timeout(optionalTimeout || 60000);\n        return PSD.trans ?\n            PSD.trans.waitFor(promise) :\n            promise;\n    },\n    Promise: Promise$1,\n    debug: {\n        get: function () { return debug; },\n        set: function (value) {\n            setDebug(value, value === 'dexie' ? function () { return true; } : dexieStackFrameFilter);\n        }\n    },\n    derive: derive, extend: extend, props: props, override: override,\n    Events: Events,\n    getByKeyPath: getByKeyPath, setByKeyPath: setByKeyPath, delByKeyPath: delByKeyPath, shallowClone: shallowClone, deepClone: deepClone, getObjectDiff: getObjectDiff, asap: asap,\n    minKey: minKey,\n    addons: [],\n    connections: connections,\n    errnames: errnames,\n    dependencies: (function () {\n        try {\n            return {\n                indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,\n                IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange\n            };\n        }\n        catch (e) {\n            return { indexedDB: null, IDBKeyRange: null };\n        }\n    })(),\n    semVer: DEXIE_VERSION, version: DEXIE_VERSION.split('.')\n        .map(function (n) { return parseInt(n); })\n        .reduce(function (p, c, i) { return p + (c / Math.pow(10, i * 2)); }),\n    default: Dexie$1,\n    Dexie: Dexie$1 }));\nDexie$1.maxKey = getMaxKey(Dexie$1.dependencies.IDBKeyRange);\n\ninitDatabaseEnumerator(Dexie.dependencies.indexedDB);\nPromise$1.rejectionMapper = mapError;\nsetDebug(debug, dexieStackFrameFilter);\n\nexport default Dexie;\n//# sourceMappingURL=dexie.mjs.map\n"],"sourceRoot":""}