@openmrs/esm-offline 3.2.1-pre.933 → 3.2.1-pre.947
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/openmrs-esm-offline.js +1 -1
- package/dist/openmrs-esm-offline.js.map +1 -1
- package/package.json +6 -6
- package/src/index.ts +1 -0
- package/src/mode.ts +79 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openmrs-esm-offline.js","mappings":"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","sources":["webpack://@openmrs/esm-offline/../../../node_modules/systemjs-webpack-interop/auto-public-path/auto-public-path.js","webpack://@openmrs/esm-offline/../../../node_modules/systemjs-webpack-interop/public-path.js","webpack://@openmrs/esm-offline/external system \"@openmrs/esm-api\"","webpack://@openmrs/esm-offline/external system \"@openmrs/esm-state\"","webpack://@openmrs/esm-offline/webpack/bootstrap","webpack://@openmrs/esm-offline/webpack/runtime/__system_context__","webpack://@openmrs/esm-offline/webpack/runtime/define property getters","webpack://@openmrs/esm-offline/webpack/runtime/global","webpack://@openmrs/esm-offline/webpack/runtime/hasOwnProperty shorthand","webpack://@openmrs/esm-offline/webpack/runtime/make namespace object","webpack://@openmrs/esm-offline/webpack/runtime/publicPath","webpack://@openmrs/esm-offline/../../../node_modules/systemjs-webpack-interop/auto-public-path/1.js","webpack://@openmrs/esm-offline/../../../node_modules/workbox-window/build/workbox-window.prod.es5.mjs","webpack://@openmrs/esm-offline/./src/service-worker.ts","webpack://@openmrs/esm-offline/./src/service-worker-http-headers.ts","webpack://@openmrs/esm-offline/./src/service-worker-messaging.ts","webpack://@openmrs/esm-offline/./src/events.ts","webpack://@openmrs/esm-offline/./src/patches.ts","webpack://@openmrs/esm-offline/../../../node_modules/dexie/dist/modern/dexie.mjs","webpack://@openmrs/esm-offline/./src/sync.ts","webpack://@openmrs/esm-offline/./node_modules/uuid/dist/esm-browser/rng.js","webpack://@openmrs/esm-offline/./node_modules/uuid/dist/esm-browser/regex.js","webpack://@openmrs/esm-offline/./node_modules/uuid/dist/esm-browser/validate.js","webpack://@openmrs/esm-offline/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://@openmrs/esm-offline/./node_modules/uuid/dist/esm-browser/v4.js","webpack://@openmrs/esm-offline/./src/uuid.ts","webpack://@openmrs/esm-offline/./src/offline-patient-data.ts"],"sourcesContent":["const resolveDirectory = require(\"../public-path\").resolveDirectory;\n\nexports.autoPublicPath = function autoPublicPath(rootDirLevel) {\n if (!rootDirLevel) {\n rootDirLevel = 1;\n }\n\n if (typeof __webpack_public_path__ !== \"undefined\") {\n if (typeof __system_context__ === \"undefined\") {\n throw Error(\n \"systemjs-webpack-interop requires webpack@>=5.0.0-beta.15 and output.libraryTarget set to 'system'\"\n );\n }\n\n if (!__system_context__.meta || !__system_context__.meta.url) {\n console.error(\"__system_context__\", __system_context__);\n throw Error(\n \"systemjs-webpack-interop was provided an unknown SystemJS context. Expected context.meta.url, but none was provided\"\n );\n }\n\n __webpack_public_path__ = resolveDirectory(\n __system_context__.meta.url,\n rootDirLevel\n );\n }\n};\n","exports.setPublicPath = function setPublicPath(\n systemjsModuleName,\n rootDirectoryLevel\n) {\n if (!rootDirectoryLevel) {\n rootDirectoryLevel = 1;\n }\n if (\n typeof systemjsModuleName !== \"string\" ||\n systemjsModuleName.trim().length === 0\n ) {\n throw Error(\n \"systemjs-webpack-interop: setPublicPath(systemjsModuleName) must be called with a non-empty string 'systemjsModuleName'\"\n );\n }\n\n if (\n typeof rootDirectoryLevel !== \"number\" ||\n rootDirectoryLevel <= 0 ||\n isNaN(rootDirectoryLevel) ||\n !isInteger(rootDirectoryLevel)\n ) {\n throw Error(\n \"systemjs-webpack-interop: setPublicPath(systemjsModuleName, rootDirectoryLevel) must be called with a positive integer 'rootDirectoryLevel'\"\n );\n }\n\n var moduleUrl;\n try {\n moduleUrl = window.System.resolve(systemjsModuleName);\n if (!moduleUrl) {\n throw Error();\n }\n } catch (err) {\n throw Error(\n \"systemjs-webpack-interop: There is no such module '\" +\n systemjsModuleName +\n \"' in the SystemJS registry. Did you misspell the name of your module?\"\n );\n }\n\n __webpack_public_path__ = resolveDirectory(moduleUrl, rootDirectoryLevel);\n};\n\nfunction resolveDirectory(urlString, rootDirectoryLevel) {\n // Our friend IE11 doesn't support new URL()\n // https://github.com/single-spa/single-spa/issues/612\n // https://gist.github.com/jlong/2428561\n\n var a = document.createElement(\"a\");\n a.href = urlString;\n\n var pathname = a.pathname[0] === \"/\" ? a.pathname : \"/\" + a.pathname;\n var numDirsProcessed = 0,\n index = pathname.length;\n while (numDirsProcessed !== rootDirectoryLevel && index >= 0) {\n var char = pathname[--index];\n if (char === \"/\") {\n numDirsProcessed++;\n }\n }\n\n if (numDirsProcessed !== rootDirectoryLevel) {\n throw Error(\n \"systemjs-webpack-interop: rootDirectoryLevel (\" +\n rootDirectoryLevel +\n \") is greater than the number of directories (\" +\n numDirsProcessed +\n \") in the URL path \" +\n urlString\n );\n }\n\n var finalPath = pathname.slice(0, index + 1);\n\n return a.protocol + \"//\" + a.host + finalPath;\n}\n\nexports.resolveDirectory = resolveDirectory;\n\n// borrowed from https://github.com/parshap/js-is-integer/blob/master/index.js\nvar isInteger =\n Number.isInteger ||\n function isInteger(val) {\n return typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n };\n","module.exports = __WEBPACK_EXTERNAL_MODULE__766__;","module.exports = __WEBPACK_EXTERNAL_MODULE__685__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.y = __system_context__;","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","const autoPublicPath = require(\"./auto-public-path\").autoPublicPath;\n\nautoPublicPath(1);\n","try{self[\"workbox:window:6.4.1\"]&&_()}catch(n){}function n(n,t){return new Promise((function(r){var e=new MessageChannel;e.port1.onmessage=function(n){r(n.data)},n.postMessage(t,[e.port2])}))}function t(n,t){for(var r=0;r<t.length;r++){var e=t[r];e.enumerable=e.enumerable||!1,e.configurable=!0,\"value\"in e&&(e.writable=!0),Object.defineProperty(n,e.key,e)}}function r(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=new Array(t);r<t;r++)e[r]=n[r];return e}function e(n,t){var e;if(\"undefined\"==typeof Symbol||null==n[Symbol.iterator]){if(Array.isArray(n)||(e=function(n,t){if(n){if(\"string\"==typeof n)return r(n,t);var e=Object.prototype.toString.call(n).slice(8,-1);return\"Object\"===e&&n.constructor&&(e=n.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(n):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?r(n,t):void 0}}(n))||t&&n&&\"number\"==typeof n.length){e&&(n=e);var i=0;return function(){return i>=n.length?{done:!0}:{done:!1,value:n[i++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}return(e=n[Symbol.iterator]()).next.bind(e)}try{self[\"workbox:core:6.4.1\"]&&_()}catch(n){}var i=function(){var n=this;this.promise=new Promise((function(t,r){n.resolve=t,n.reject=r}))};function o(n,t){var r=location.href;return new URL(n,r).href===new URL(t,r).href}var u=function(n,t){this.type=n,Object.assign(this,t)};function a(n,t,r){return r?t?t(n):n:(n&&n.then||(n=Promise.resolve(n)),t?n.then(t):n)}function c(){}var f={type:\"SKIP_WAITING\"};function s(n,t){if(!t)return n&&n.then?n.then(c):Promise.resolve()}var v=function(r){var e,c;function v(n,t){var e,c;return void 0===t&&(t={}),(e=r.call(this)||this).nn={},e.tn=0,e.rn=new i,e.en=new i,e.on=new i,e.un=0,e.an=new Set,e.cn=function(){var n=e.fn,t=n.installing;e.tn>0||!o(t.scriptURL,e.sn.toString())||performance.now()>e.un+6e4?(e.vn=t,n.removeEventListener(\"updatefound\",e.cn)):(e.hn=t,e.an.add(t),e.rn.resolve(t)),++e.tn,t.addEventListener(\"statechange\",e.ln)},e.ln=function(n){var t=e.fn,r=n.target,i=r.state,o=r===e.vn,a={sw:r,isExternal:o,originalEvent:n};!o&&e.mn&&(a.isUpdate=!0),e.dispatchEvent(new u(i,a)),\"installed\"===i?e.wn=self.setTimeout((function(){\"installed\"===i&&t.waiting===r&&e.dispatchEvent(new u(\"waiting\",a))}),200):\"activating\"===i&&(clearTimeout(e.wn),o||e.en.resolve(r))},e.dn=function(n){var t=e.hn,r=t!==navigator.serviceWorker.controller;e.dispatchEvent(new u(\"controlling\",{isExternal:r,originalEvent:n,sw:t,isUpdate:e.mn})),r||e.on.resolve(t)},e.gn=(c=function(n){var t=n.data,r=n.ports,i=n.source;return a(e.getSW(),(function(){e.an.has(i)&&e.dispatchEvent(new u(\"message\",{data:t,originalEvent:n,ports:r,sw:i}))}))},function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];try{return Promise.resolve(c.apply(this,n))}catch(n){return Promise.reject(n)}}),e.sn=n,e.nn=t,navigator.serviceWorker.addEventListener(\"message\",e.gn),e}c=r,(e=v).prototype=Object.create(c.prototype),e.prototype.constructor=e,e.__proto__=c;var h,l,m,w=v.prototype;return w.register=function(n){var t=(void 0===n?{}:n).immediate,r=void 0!==t&&t;try{var e=this;return function(n,t){var r=n();if(r&&r.then)return r.then(t);return t(r)}((function(){if(!r&&\"complete\"!==document.readyState)return s(new Promise((function(n){return window.addEventListener(\"load\",n)})))}),(function(){return e.mn=Boolean(navigator.serviceWorker.controller),e.yn=e.pn(),a(e.bn(),(function(n){e.fn=n,e.yn&&(e.hn=e.yn,e.en.resolve(e.yn),e.on.resolve(e.yn),e.yn.addEventListener(\"statechange\",e.ln,{once:!0}));var t=e.fn.waiting;return t&&o(t.scriptURL,e.sn.toString())&&(e.hn=t,Promise.resolve().then((function(){e.dispatchEvent(new u(\"waiting\",{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),e.hn&&(e.rn.resolve(e.hn),e.an.add(e.hn)),e.fn.addEventListener(\"updatefound\",e.cn),navigator.serviceWorker.addEventListener(\"controllerchange\",e.dn),e.fn}))}))}catch(n){return Promise.reject(n)}},w.update=function(){try{return this.fn?s(this.fn.update()):void 0}catch(n){return Promise.reject(n)}},w.getSW=function(){return void 0!==this.hn?Promise.resolve(this.hn):this.rn.promise},w.messageSW=function(t){try{return a(this.getSW(),(function(r){return n(r,t)}))}catch(n){return Promise.reject(n)}},w.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&n(this.fn.waiting,f)},w.pn=function(){var n=navigator.serviceWorker.controller;return n&&o(n.scriptURL,this.sn.toString())?n:void 0},w.bn=function(){try{var n=this;return function(n,t){try{var r=n()}catch(n){return t(n)}if(r&&r.then)return r.then(void 0,t);return r}((function(){return a(navigator.serviceWorker.register(n.sn,n.nn),(function(t){return n.un=performance.now(),t}))}),(function(n){throw n}))}catch(n){return Promise.reject(n)}},h=v,(l=[{key:\"active\",get:function(){return this.en.promise}},{key:\"controlling\",get:function(){return this.on.promise}}])&&t(h.prototype,l),m&&t(h,m),v}(function(){function n(){this.Pn=new Map}var t=n.prototype;return t.addEventListener=function(n,t){this.Sn(n).add(t)},t.removeEventListener=function(n,t){this.Sn(n).delete(t)},t.dispatchEvent=function(n){n.target=this;for(var t,r=e(this.Sn(n.type));!(t=r()).done;){(0,t.value)(n)}},t.Sn=function(n){return this.Pn.has(n)||this.Pn.set(n,new Set),this.Pn.get(n)},n}());export{v as Workbox,u as WorkboxEvent,n as messageSW};\n//# sourceMappingURL=workbox-window.prod.es5.mjs.map\n","import { Workbox } from \"workbox-window\";\n\nlet workboxRegistration: Promise<Workbox> | undefined = undefined;\n\n/**\n * If not yet registered, registers the application's global Service Worker.\n * Throws if registration is not possible.\n * @param scriptURL The service worker script associated with this instance.\n * @param [registerOptions] The service worker options associated with this instance.\n * @returns A promise which resolves to the registered {@link Workbox} instance which manages the SW.\n */\nexport function registerOmrsServiceWorker(\n scriptUrl: string,\n registerOptions?: object\n) {\n if (workboxRegistration !== undefined) {\n console.warn(\n `The application's Service Worker has already been registered. The new service worker at ${scriptUrl} will not be registered.`\n );\n return workboxRegistration;\n }\n\n if (!(\"serviceWorker\" in navigator)) {\n throw new Error(\n \"Registering the Service Worker is not possible due to missing browser capabilities.\"\n );\n }\n\n const wb = new Workbox(scriptUrl, registerOptions);\n workboxRegistration = wb.register().then(() => wb);\n return workboxRegistration;\n}\n\n/**\n * If a service worker has been registered, returns a promise that resolves to a {@link Workbox}\n * instance which is used by the application to manage that service worker.\n *\n * If no service worker has been registered (e.g. when the application is built without offline specific features),\n * returns a promise which immediately resolves to `undefined`.\n * @returns A promise which either resolves to `undefined` or to the app's {@link Workbox} instance.\n */\nexport function getOmrsServiceWorker(): Promise<Workbox | undefined> {\n return workboxRegistration ?? Promise.resolve(undefined);\n}\n","export const omrsOfflineResponseBodyHttpHeaderName =\n \"x-omrs-offline-response-body\";\nexport const omrsOfflineResponseStatusHttpHeaderName =\n \"x-omrs-offline-response-status\";\nexport const omrsOfflineCachingStrategyHttpHeaderName =\n \"x-omrs-offline-caching-strategy\";\n\n/**\n *\n *\n * * `cache-or-network`: The default strategy, equal to the absence of this header.\n * The SW attempts to resolve the request via the network, but falls back to the cache if required.\n * The service worker decides the strategy to be used.\n * * `network-first`: See https://developers.google.com/web/tools/workbox/modules/workbox-strategies#network_first_network_falling_back_to_cache.\n */\nexport type OmrsOfflineCachingStrategy =\n | \"network-only-or-cache-only\"\n | \"network-first\";\n\n/**\n * Defines the keys of the custom headers which can be appended to an HTTP request.\n * HTTP requests with these headers are handled in a special way by the SPA's service worker.\n */\nexport type OmrsOfflineHttpHeaders = {\n /**\n * If the client is offline and the request cannot be read from the cache (i.e. if there is no way\n * to receive any kind of data for this request), the service worker will return a response with\n * the body in this header.\n */\n [omrsOfflineResponseBodyHttpHeaderName]?: string;\n /**\n * If the client is offline and the request cannot be read from the cache (i.e. if there is no way\n * to receive any kind of data for this request), the service worker will return a response with\n * the status code defined in this header.\n */\n [omrsOfflineResponseStatusHttpHeaderName]?: `${number}`;\n /**\n * Instructs the service worker to use a specific caching strategy for this request.\n */\n [omrsOfflineCachingStrategyHttpHeaderName]?: OmrsOfflineCachingStrategy;\n};\n\nexport type OmrsOfflineHttpHeaderNames = keyof OmrsOfflineHttpHeaders;\n","import type { ImportMap } from \"@openmrs/esm-globals\";\nimport { OmrsOfflineCachingStrategy } from \"./service-worker-http-headers\";\nimport { getOmrsServiceWorker } from \"./service-worker\";\n\n/**\n * Sends the specified message to the application's service worker.\n * @param message The message to be sent.\n * @returns A promise which completes when the message has been successfully processed by the Service Worker.\n */\nexport async function messageOmrsServiceWorker(\n message: KnownOmrsServiceWorkerMessages\n): Promise<MessageServiceWorkerResult<any>> {\n const sw = await getOmrsServiceWorker();\n return sw\n ? await sw.messageSW(message)\n : {\n success: false,\n result: undefined,\n error:\n \"No service worker has been registered. This is typically the case when the application has been built without offline-related features.\",\n };\n}\n\nexport interface OmrsServiceWorkerMessage<\n MessageTypeTypeIdentifier extends string\n> {\n type: MessageTypeTypeIdentifier;\n}\n\nexport interface OnImportMapChangedMessage\n extends OmrsServiceWorkerMessage<\"onImportMapChanged\"> {\n importMap: ImportMap;\n}\n\nexport interface ClearDynamicRoutesMessage\n extends OmrsServiceWorkerMessage<\"clearDynamicRoutes\"> {}\n\nexport interface RegisterDynamicRouteMessage\n extends OmrsServiceWorkerMessage<\"registerDynamicRoute\"> {\n pattern?: string;\n url?: string;\n strategy?: OmrsOfflineCachingStrategy;\n}\n\nexport type KnownOmrsServiceWorkerMessages =\n | OnImportMapChangedMessage\n | ClearDynamicRoutesMessage\n | RegisterDynamicRouteMessage;\n\nexport interface MessageServiceWorkerResult<T> {\n success: boolean;\n result?: T;\n error?: string;\n}\n","import { NetworkRequestFailedEvent } from \"./service-worker-events\";\n\nconst networkRequestFailedEventName = \"openmrs:network-request-failed\";\n\nexport function dispatchNetworkRequestFailed(data: NetworkRequestFailedEvent) {\n window.dispatchEvent(\n new CustomEvent(networkRequestFailedEventName, { detail: data })\n );\n}\n\nexport function subscribeNetworkRequestFailed(\n cb: (data: NetworkRequestFailedEvent) => void\n) {\n const handler = (ev: CustomEvent) => cb(ev.detail);\n window.addEventListener(networkRequestFailedEventName, handler);\n return () =>\n window.removeEventListener(networkRequestFailedEventName, handler);\n}\n","export function patchXMLHttpRequest() {\n const send = XMLHttpRequest.prototype.send;\n\n XMLHttpRequest.prototype.send = function (...args) {\n return send.apply(this, args);\n };\n}\n","/*\n * Dexie.js - a minimalistic wrapper for IndexedDB\n * ===============================================\n *\n * By David Fahlander, david.fahlander@gmail.com\n *\n * Version 3.2.0, Thu Nov 18 2021\n *\n * http://dexie.org\n *\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/\n */\n \nconst _global = typeof globalThis !== 'undefined' ? globalThis :\n typeof self !== 'undefined' ? self :\n typeof window !== 'undefined' ? window :\n global;\n\nconst keys = Object.keys;\nconst isArray = Array.isArray;\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}\nconst getProto = Object.getPrototypeOf;\nconst _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 (typeof Reflect === \"undefined\" ? keys : Reflect.ownKeys)(extension).forEach(key => {\n setProp(proto, key, extension[key]);\n });\n}\nconst 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}\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nfunction getPropertyDescriptor(obj, prop) {\n const pd = getOwnPropertyDescriptor(obj, prop);\n let proto;\n return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop);\n}\nconst _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$1(fn) {\n if (_global.setImmediate)\n setImmediate(fn);\n else\n setTimeout(fn, 0);\n}\nfunction arrayToObject(array, extractor) {\n return array.reduce((result, item, i) => {\n var nameAndValue = extractor(item, i);\n if (nameAndValue)\n result[nameAndValue[0]] = nameAndValue[1];\n return result;\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}\nconst concat = [].concat;\nfunction flatten(a) {\n return concat.apply([], a);\n}\nconst intrinsicTypeNames = \"Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey\"\n .split(',').concat(flatten([8, 16, 32, 64].map(num => [\"Int\", \"Uint\", \"Float\"].map(t => t + num + \"Array\")))).filter(t => _global[t]);\nconst intrinsicTypes = intrinsicTypeNames.map(t => _global[t]);\narrayToObject(intrinsicTypeNames, x => [x, true]);\nlet circularRefs = null;\nfunction deepClone(any) {\n circularRefs = typeof WeakMap !== 'undefined' && new WeakMap();\n const rv = innerDeepClone(any);\n circularRefs = null;\n return rv;\n}\nfunction innerDeepClone(any) {\n if (!any || typeof any !== 'object')\n return any;\n let rv = circularRefs && circularRefs.get(any);\n if (rv)\n return rv;\n if (isArray(any)) {\n rv = [];\n circularRefs && circularRefs.set(any, rv);\n for (var i = 0, l = any.length; i < l; ++i) {\n rv.push(innerDeepClone(any[i]));\n }\n }\n else if (intrinsicTypes.indexOf(any.constructor) >= 0) {\n rv = any;\n }\n else {\n const proto = getProto(any);\n rv = proto === Object.prototype ? {} : Object.create(proto);\n circularRefs && circularRefs.set(any, rv);\n for (var prop in any) {\n if (hasOwn(any, prop)) {\n rv[prop] = innerDeepClone(any[prop]);\n }\n }\n }\n return rv;\n}\nconst { toString } = {};\nfunction toStringTag(o) {\n return toString.call(o).slice(8, -1);\n}\nconst iteratorSymbol = typeof Symbol !== 'undefined' ?\n Symbol.iterator :\n '@@iterator';\nconst getIteratorOf = typeof iteratorSymbol === \"symbol\" ? function (x) {\n var i;\n return x != null && (i = x[iteratorSymbol]) && i.apply(x);\n} : function () { return null; };\nconst 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}\nconst isAsyncFunction = typeof Symbol !== 'undefined'\n ? (fn) => fn[Symbol.toStringTag] === 'AsyncFunction'\n : () => false;\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 = () => true;\nconst NEEDS_THROW_FOR_STACK = !new Error(\"\").stack;\nfunction getErrorWithStack() {\n if (NEEDS_THROW_FOR_STACK)\n try {\n getErrorWithStack.arguments;\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(frame => \"\\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 MissingAPI: \"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb\"\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(key => failures[key].toString())\n .filter((v, i, s) => 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 = Object.keys(failures).map(pos => failures[pos]);\n this.failuresByPos = failures;\n this.message = getMultiErrorMessage(msg, failures);\n}\nderive(BulkError).from(DexieError);\nvar errnames = errorList.reduce((obj, name) => (obj[name] = name + \"Error\", obj), {});\nconst BaseException = DexieError;\nvar exceptions = errorList.reduce((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((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((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}\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 = {};\nconst LONG_STACKS_CLIP_LIMIT = 100,\nMAX_LONG_STACKS = 20, ZONE_ECHO_LIMIT = 100, [resolvedNativePromise, nativePromiseProto, resolvedGlobalPromise] = typeof Promise === 'undefined' ?\n [] :\n (() => {\n let globalP = Promise.resolve();\n if (typeof crypto === 'undefined' || !crypto.subtle)\n return [globalP, getProto(globalP), globalP];\n const nativeP = crypto.subtle.digest(\"SHA-512\", new Uint8Array([0]));\n return [\n nativeP,\n getProto(nativeP),\n globalP\n ];\n })(), nativePromiseThen = nativePromiseProto && nativePromiseProto.then;\nconst NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;\nconst patchGlobalPromise = !!resolvedGlobalPromise;\nvar stack_being_generated = false;\nvar schedulePhysicalTick = resolvedGlobalPromise ?\n () => { resolvedGlobalPromise.then(physicalTick); }\n :\n _global.setImmediate ?\n setImmediate.bind(null, physicalTick) :\n _global.MutationObserver ?\n () => {\n var hiddenDiv = document.createElement(\"div\");\n (new MutationObserver(() => {\n physicalTick();\n hiddenDiv = null;\n })).observe(hiddenDiv, { attributes: true });\n hiddenDiv.setAttribute('i', '1');\n } :\n () => { setTimeout(physicalTick, 0); };\nvar asap = function (callback, args) {\n microtickQueue.push([callback, args]);\n if (needsNewPhysicalTick) {\n schedulePhysicalTick();\n needsNewPhysicalTick = false;\n }\n};\nvar isOutsideMicroTick = true,\nneedsNewPhysicalTick = true,\nunhandledErrors = [],\nrejectingErrors = [],\ncurrentFulfiller = null, 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(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 DexiePromise(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}\nconst thenProp = {\n get: function () {\n var psd = PSD, microTaskId = totalEchoes;\n function then(onFulfilled, onRejected) {\n var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);\n const cleanup = possibleAwait && !decrementExpectedAwaits();\n var rv = new DexiePromise((resolve, reject) => {\n propagateToListener(this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup), 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(DexiePromise.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, err =>\n err instanceof type ? handler(err) : PromiseReject(err))\n : this.then(null, err =>\n err && err.name === type ? handler(err) : PromiseReject(err));\n },\n finally: function (onFinally) {\n return this.then(value => {\n onFinally();\n return value;\n }, 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 return ms < Infinity ?\n new DexiePromise((resolve, reject) => {\n var handle = setTimeout(() => 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(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.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(DexiePromise, {\n all: function () {\n var values = getArrayOf.apply(null, arguments)\n .map(onPossibleParallellAsync);\n return new DexiePromise(function (resolve, reject) {\n if (values.length === 0)\n resolve([]);\n var remaining = values.length;\n values.forEach((a, i) => DexiePromise.resolve(a).then(x => {\n values[i] = x;\n if (!--remaining)\n resolve(values);\n }, reject));\n });\n },\n resolve: value => {\n if (value instanceof DexiePromise)\n return value;\n if (value && typeof value.then === 'function')\n return new DexiePromise((resolve, reject) => {\n value.then(resolve, reject);\n });\n var rv = new DexiePromise(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 DexiePromise((resolve, reject) => {\n values.map(value => DexiePromise.resolve(value).then(resolve, reject));\n });\n },\n PSD: {\n get: () => PSD,\n set: value => PSD = value\n },\n totalEchoes: { get: () => totalEchoes },\n newPSD: newScope,\n usePSD: usePSD,\n scheduler: {\n get: () => asap,\n set: value => { asap = value; }\n },\n rejectionMapper: {\n get: () => rejectionMapper,\n set: value => { rejectionMapper = value; }\n },\n follow: (fn, zoneProps) => {\n return new DexiePromise((resolve, reject) => {\n return newScope((resolve, reject) => {\n var psd = PSD;\n psd.unhandleds = [];\n psd.onunhandled = reject;\n psd.finalize = callBoth(function () {\n run_at_end_of_this_or_next_physical_tick(() => {\n this.unhandleds.length === 0 ? resolve() : reject(this.unhandleds[0]);\n });\n }, psd.finalize);\n fn();\n }, zoneProps, resolve, reject);\n });\n }\n});\nif (NativePromise) {\n if (NativePromise.allSettled)\n setProp(DexiePromise, \"allSettled\", function () {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise(resolve => {\n if (possiblePromises.length === 0)\n resolve([]);\n let remaining = possiblePromises.length;\n const results = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(value => results[i] = { status: \"fulfilled\", value }, reason => results[i] = { status: \"rejected\", reason })\n .then(() => --remaining || resolve(results)));\n });\n });\n if (NativePromise.any && typeof AggregateError !== 'undefined')\n setProp(DexiePromise, \"any\", function () {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n if (possiblePromises.length === 0)\n reject(new AggregateError([]));\n let remaining = possiblePromises.length;\n const failures = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(value => resolve(value), failure => {\n failures[i] = failure;\n if (!--remaining)\n reject(new AggregateError(failures));\n }));\n });\n });\n}\nfunction executePromiseTask(promise, fn) {\n try {\n fn(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, (resolve, reject) => {\n value instanceof DexiePromise ?\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(() => {\n var origProp = getPropertyDescriptor(reason, \"stack\");\n reason._promise = promise;\n setProp(reason, \"stack\", {\n get: () => stack_being_generated ?\n origProp && (origProp.get ?\n origProp.get.apply(reason) :\n origProp.value) :\n promise.stack\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(() => {\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(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(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(() => {\n if (--numScheduledCalls === 0)\n finalizePhysicalTick();\n }, []);\n}\nfunction addPossiblyUnhandledError(promise) {\n if (!unhandledErrors.some(p => 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 DexiePromise(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}\nconst 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, 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: DexiePromise,\n PromiseProp: { value: DexiePromise, configurable: true, writable: true },\n all: DexiePromise.all,\n race: DexiePromise.race,\n allSettled: DexiePromise.allSettled,\n any: DexiePromise.any,\n resolve: DexiePromise.resolve,\n reject: DexiePromise.reject,\n nthen: getPatchedPromiseThen(globalEnv.nthen, psd),\n gthen: getPatchedPromiseThen(globalEnv.gthen, psd)\n } : {};\n if (props)\n extend(psd, props);\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() {\n if (!task.awaits)\n return false;\n if (--task.awaits === 0)\n task.id = 0;\n task.echoes = task.awaits * ZONE_ECHO_LIMIT;\n return true;\n}\nif (('' + nativePromiseThen).indexOf('[native code]') === -1) {\n incrementExpectedAwaits = decrementExpectedAwaits = nop;\n}\nfunction onPossibleParallellAsync(possiblePromise) {\n if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {\n incrementExpectedAwaits();\n return possiblePromise.then(x => {\n decrementExpectedAwaits();\n return x;\n }, 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 if (targetEnv.allSettled)\n GlobalPromise.allSettled = targetEnv.allSettled;\n if (targetEnv.any)\n GlobalPromise.any = targetEnv.any;\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 allSettled: GlobalPromise.allSettled,\n any: GlobalPromise.any,\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, cleanup) {\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 if (cleanup)\n enqueueNativeMicroTask(decrementExpectedAwaits);\n }\n };\n}\nfunction getPatchedPromiseThen(origThen, zone) {\n return function (onResolved, onRejected) {\n return origThen.call(this, nativeAwaitCompatibleWrap(onResolved, zone), nativeAwaitCompatibleWrap(onRejected, zone));\n };\n}\nconst 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 = DexiePromise.reject;\n\nfunction tempTransaction(db, mode, storeNames, fn) {\n if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) {\n if (db._state.openComplete) {\n return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError));\n }\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(() => 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, (resolve, reject) => {\n return newScope(() => {\n PSD.trans = trans;\n return fn(resolve, reject, trans);\n });\n }).then(result => {\n return trans._completion.then(() => result);\n });\n }\n}\n\nconst DEXIE_VERSION = '3.2.0';\nconst maxString = String.fromCharCode(65535);\nconst minKey = -Infinity;\nconst INVALID_KEY_ARGUMENT = \"Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.\";\nconst STRING_EXPECTED = \"String expected.\";\nconst connections = [];\nconst isIEOrEdge = typeof navigator !== 'undefined' && /(MSIE|Trident|Edge)/.test(navigator.userAgent);\nconst hasIEDeleteObjectStoreBug = isIEOrEdge;\nconst hangsOnDeleteLargeKeyRange = isIEOrEdge;\nconst dexieStackFrameFilter = frame => !/(dexie\\.js|dexie\\.min\\.js)/.test(frame);\nconst DBNAMES_DB = '__dbnames';\nconst READONLY = 'readonly';\nconst 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\nconst AnyRange = {\n type: 3 ,\n lower: -Infinity,\n lowerOpen: false,\n upper: [[]],\n upperOpen: false\n};\n\nfunction workaroundForUndefinedPrimKey(keyPath) {\n return typeof keyPath === \"string\" && !/\\./.test(keyPath)\n ? (obj) => {\n if (obj[keyPath] === undefined && (keyPath in obj)) {\n obj = deepClone(obj);\n delete obj[keyPath];\n }\n return obj;\n }\n : (obj) => obj;\n}\n\nclass Table {\n _trans(mode, fn, writeLocked) {\n const trans = this._tx || PSD.trans;\n const 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 const wasRootExec = beginMicroTickScope();\n try {\n return trans && trans.db === this.db ?\n trans === PSD.trans ?\n trans._promise(mode, checkTableInTransaction, writeLocked) :\n newScope(() => 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 get(keyOrCrit, cb) {\n if (keyOrCrit && keyOrCrit.constructor === Object)\n return this.where(keyOrCrit).first(cb);\n return this._trans('readonly', (trans) => {\n return this.core.get({ trans, key: keyOrCrit })\n .then(res => this.hook.reading.fire(res));\n }).then(cb);\n }\n where(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 const keyPaths = keys(indexOrCrit);\n if (keyPaths.length === 1)\n return this\n .where(keyPaths[0])\n .equals(indexOrCrit[keyPaths[0]]);\n const compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(ix => ix.compound &&\n keyPaths.every(keyPath => ix.keyPath.indexOf(keyPath) >= 0) &&\n ix.keyPath.every(keyPath => keyPaths.indexOf(keyPath) >= 0))[0];\n if (compoundIndex && this.db._maxKey !== maxString)\n return this\n .where(compoundIndex.name)\n .equals(compoundIndex.keyPath.map(kp => 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 const { idxByName } = this.schema;\n const 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 const [idx, filterFunction] = keyPaths.reduce(([prevIndex, prevFilterFn], keyPath) => {\n const index = idxByName[keyPath];\n const value = indexOrCrit[keyPath];\n return [\n prevIndex || index,\n prevIndex || !index ?\n combine(prevFilterFn, index && index.multi ?\n x => {\n const prop = getByKeyPath(x, keyPath);\n return isArray(prop) && prop.some(item => equals(value, item));\n } : x => equals(value, getByKeyPath(x, keyPath)))\n : prevFilterFn\n ];\n }, [null, null]);\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 filter(filterFunction) {\n return this.toCollection().and(filterFunction);\n }\n count(thenShortcut) {\n return this.toCollection().count(thenShortcut);\n }\n offset(offset) {\n return this.toCollection().offset(offset);\n }\n limit(numRows) {\n return this.toCollection().limit(numRows);\n }\n each(callback) {\n return this.toCollection().each(callback);\n }\n toArray(thenShortcut) {\n return this.toCollection().toArray(thenShortcut);\n }\n toCollection() {\n return new this.db.Collection(new this.db.WhereClause(this));\n }\n orderBy(index) {\n return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ?\n `[${index.join('+')}]` :\n index));\n }\n reverse() {\n return this.toCollection().reverse();\n }\n mapToClass(constructor) {\n this.schema.mappedClass = constructor;\n const readHook = obj => {\n if (!obj)\n return obj;\n const 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 defineClass() {\n function Class(content) {\n extend(this, content);\n }\n return this.mapToClass(Class);\n }\n add(obj, key) {\n const { auto, keyPath } = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans('readwrite', trans => {\n return this.core.mutate({ trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd] });\n }).then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n try {\n setByKeyPath(obj, keyPath, lastResult);\n }\n catch (_) { }\n }\n return lastResult;\n });\n }\n update(keyOrObject, modifications) {\n if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) {\n const 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 try {\n if (typeof modifications !== \"function\") {\n keys(modifications).forEach(keyPath => {\n setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);\n });\n }\n else {\n modifications(keyOrObject, { value: keyOrObject, primKey: key });\n }\n }\n catch (_a) {\n }\n return this.where(\":id\").equals(key).modify(modifications);\n }\n else {\n return this.where(\":id\").equals(keyOrObject).modify(modifications);\n }\n }\n put(obj, key) {\n const { auto, keyPath } = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null }))\n .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n try {\n setByKeyPath(obj, keyPath, lastResult);\n }\n catch (_) { }\n }\n return lastResult;\n });\n }\n delete(key) {\n return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'delete', keys: [key] }))\n .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined);\n }\n clear() {\n return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'deleteRange', range: AnyRange }))\n .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined);\n }\n bulkGet(keys) {\n return this._trans('readonly', trans => {\n return this.core.getMany({\n keys,\n trans\n }).then(result => result.map(res => this.hook.reading.fire(res)));\n });\n }\n bulkAdd(objects, keysOrOptions, options) {\n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions);\n const wantResults = options ? options.allKeys : undefined;\n return this._trans('readwrite', trans => {\n const { auto, keyPath } = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkAdd(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n const numObjects = objects.length;\n let objectsToAdd = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n return this.core.mutate({ trans, type: 'add', keys: keys, values: objectsToAdd, wantResults })\n .then(({ numFailures, results, lastResult, failures }) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0)\n return result;\n throw new BulkError(`${this.name}.bulkAdd(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n bulkPut(objects, keysOrOptions, options) {\n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions);\n const wantResults = options ? options.allKeys : undefined;\n return this._trans('readwrite', trans => {\n const { auto, keyPath } = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkPut(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n const numObjects = objects.length;\n let objectsToPut = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n return this.core.mutate({ trans, type: 'put', keys: keys, values: objectsToPut, wantResults })\n .then(({ numFailures, results, lastResult, failures }) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0)\n return result;\n throw new BulkError(`${this.name}.bulkPut(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n bulkDelete(keys) {\n const numKeys = keys.length;\n return this._trans('readwrite', trans => {\n return this.core.mutate({ trans, type: 'delete', keys: keys });\n }).then(({ numFailures, lastResult, failures }) => {\n if (numFailures === 0)\n return lastResult;\n throw new BulkError(`${this.name}.bulkDelete(): ${numFailures} of ${numKeys} operations failed`, failures);\n });\n }\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$1(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 });\n return constructor;\n}\n\nfunction createTableConstructor(db) {\n return makeClassConstructor(Table.prototype, function Table(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 ? () => 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 const 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 const index = getIndexOrStore(ctx, coreTable.schema);\n return coreTable.openCursor({\n trans,\n values: !ctx.keysOnly,\n reverse: ctx.dir === 'prev',\n unique: !!ctx.unique,\n query: {\n index,\n range: ctx.range\n }\n });\n}\nfunction iter(ctx, fn, coreTrans, coreTable) {\n const 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 const set = {};\n const union = (item, cursor, advance) => {\n if (!filter || filter(cursor, advance, result => cursor.stop(result), err => 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, key)) {\n set[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 ? (x, c, a) => fn(valueMapper(x), c, a) : fn;\n var wrappedFn = wrap(mappedFn);\n return cursorPromise.then(cursor => {\n if (cursor) {\n return cursor.start(() => {\n var c = () => cursor.continue();\n if (!filter || filter(cursor, advancer => c = advancer, val => { cursor.stop(val); c = nop; }, e => { cursor.fail(e); c = nop; }))\n wrappedFn(cursor.value, cursor, advancer => c = advancer);\n c();\n });\n }\n });\n}\n\nfunction cmp(a, b) {\n try {\n const ta = type(a);\n const tb = type(b);\n if (ta !== tb) {\n if (ta === 'Array')\n return 1;\n if (tb === 'Array')\n return -1;\n if (ta === 'binary')\n return 1;\n if (tb === 'binary')\n return -1;\n if (ta === 'string')\n return 1;\n if (tb === 'string')\n return -1;\n if (ta === 'Date')\n return 1;\n if (tb !== 'Date')\n return NaN;\n return -1;\n }\n switch (ta) {\n case 'number':\n case 'Date':\n case 'string':\n return a > b ? 1 : a < b ? -1 : 0;\n case 'binary': {\n return compareUint8Arrays(getUint8Array(a), getUint8Array(b));\n }\n case 'Array':\n return compareArrays(a, b);\n }\n }\n catch (_a) { }\n return NaN;\n}\nfunction compareArrays(a, b) {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n const res = cmp(a[i], b[i]);\n if (res !== 0)\n return res;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\nfunction compareUint8Arrays(a, b) {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n if (a[i] !== b[i])\n return a[i] < b[i] ? -1 : 1;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\nfunction type(x) {\n const t = typeof x;\n if (t !== 'object')\n return t;\n if (ArrayBuffer.isView(x))\n return 'binary';\n const tsTag = toStringTag(x);\n return tsTag === 'ArrayBuffer' ? 'binary' : tsTag;\n}\nfunction getUint8Array(a) {\n if (a instanceof Uint8Array)\n return a;\n if (ArrayBuffer.isView(a))\n return new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n return new Uint8Array(a);\n}\n\nclass Collection {\n _read(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 _write(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 _addAlgorithm(fn) {\n var ctx = this._ctx;\n ctx.algorithm = combine(ctx.algorithm, fn);\n }\n _iterate(fn, coreTrans) {\n return iter(this._ctx, fn, coreTrans, this._ctx.table.core);\n }\n clone(props) {\n var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx);\n if (props)\n extend(ctx, props);\n rv._ctx = ctx;\n return rv;\n }\n raw() {\n this._ctx.valueMapper = null;\n return this;\n }\n each(fn) {\n var ctx = this._ctx;\n return this._read(trans => iter(ctx, fn, trans, ctx.table.core));\n }\n count(cb) {\n return this._read(trans => {\n const ctx = this._ctx;\n const coreTable = ctx.table.core;\n if (isPlainKeyRange(ctx, true)) {\n return coreTable.count({\n trans,\n query: {\n index: getIndexOrStore(ctx, coreTable.schema),\n range: ctx.range\n }\n }).then(count => Math.min(count, ctx.limit));\n }\n else {\n var count = 0;\n return iter(ctx, () => { ++count; return false; }, trans, coreTable)\n .then(() => count);\n }\n }).then(cb);\n }\n sortBy(keyPath, cb) {\n const 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 toArray(cb) {\n return this._read(trans => {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n const { valueMapper } = ctx;\n const index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n limit: ctx.limit,\n values: true,\n query: {\n index,\n range: ctx.range\n }\n }).then(({ result }) => valueMapper ? result.map(valueMapper) : result);\n }\n else {\n const a = [];\n return iter(ctx, item => a.push(item), trans, ctx.table.core).then(() => a);\n }\n }, cb);\n }\n offset(offset) {\n var ctx = this._ctx;\n if (offset <= 0)\n return this;\n ctx.offset += offset;\n if (isPlainKeyRange(ctx)) {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return (cursor, advance) => {\n if (offsetLeft === 0)\n return true;\n if (offsetLeft === 1) {\n --offsetLeft;\n return false;\n }\n advance(() => {\n cursor.advance(offsetLeft);\n offsetLeft = 0;\n });\n return false;\n };\n });\n }\n else {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return () => (--offsetLeft < 0);\n });\n }\n return this;\n }\n limit(numRows) {\n this._ctx.limit = Math.min(this._ctx.limit, numRows);\n addReplayFilter(this._ctx, () => {\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 until(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 first(cb) {\n return this.limit(1).toArray(function (a) { return a[0]; }).then(cb);\n }\n last(cb) {\n return this.reverse().first(cb);\n }\n filter(filterFunction) {\n addFilter(this._ctx, function (cursor) {\n return filterFunction(cursor.value);\n });\n addMatchFilter(this._ctx, filterFunction);\n return this;\n }\n and(filter) {\n return this.filter(filter);\n }\n or(indexName) {\n return new this.db.WhereClause(this._ctx.table, indexName, this);\n }\n reverse() {\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 desc() {\n return this.reverse();\n }\n eachKey(cb) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.key, cursor); });\n }\n eachUniqueKey(cb) {\n this._ctx.unique = \"unique\";\n return this.eachKey(cb);\n }\n eachPrimaryKey(cb) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); });\n }\n keys(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 primaryKeys(cb) {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n return this._read(trans => {\n var index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n values: false,\n limit: ctx.limit,\n query: {\n index,\n range: ctx.range\n }\n });\n }).then(({ result }) => result).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 uniqueKeys(cb) {\n this._ctx.unique = \"unique\";\n return this.keys(cb);\n }\n firstKey(cb) {\n return this.limit(1).keys(function (a) { return a[0]; }).then(cb);\n }\n lastKey(cb) {\n return this.reverse().firstKey(cb);\n }\n distinct() {\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 modify(changes) {\n var ctx = this._ctx;\n return this._write(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 const coreTable = ctx.table.core;\n const { outbound, extractKey } = coreTable.schema.primaryKey;\n const limit = this.db._options.modifyChunkSize || 200;\n const totalFailures = [];\n let successCount = 0;\n const failedKeys = [];\n const applyMutateResult = (expectedCount, res) => {\n const { failures, numFailures } = res;\n successCount += expectedCount - numFailures;\n for (let pos of keys(failures)) {\n totalFailures.push(failures[pos]);\n }\n };\n return this.clone().primaryKeys().then(keys => {\n const nextChunk = (offset) => {\n const count = Math.min(limit, keys.length - offset);\n return coreTable.getMany({\n trans,\n keys: keys.slice(offset, offset + count),\n cache: \"immutable\"\n }).then(values => {\n const addValues = [];\n const putValues = [];\n const putKeys = outbound ? [] : null;\n const deleteKeys = [];\n for (let i = 0; i < count; ++i) {\n const origValue = values[i];\n const ctx = {\n value: deepClone(origValue),\n primKey: keys[offset + i]\n };\n if (modifyer.call(ctx, ctx.value, ctx) !== false) {\n if (ctx.value == null) {\n deleteKeys.push(keys[offset + i]);\n }\n else if (!outbound && cmp(extractKey(origValue), extractKey(ctx.value)) !== 0) {\n deleteKeys.push(keys[offset + i]);\n addValues.push(ctx.value);\n }\n else {\n putValues.push(ctx.value);\n if (outbound)\n putKeys.push(keys[offset + i]);\n }\n }\n }\n const criteria = isPlainKeyRange(ctx) &&\n ctx.limit === Infinity &&\n (typeof changes !== 'function' || changes === deleteCallback) && {\n index: ctx.index,\n range: ctx.range\n };\n return Promise.resolve(addValues.length > 0 &&\n coreTable.mutate({ trans, type: 'add', values: addValues })\n .then(res => {\n for (let pos in res.failures) {\n deleteKeys.splice(parseInt(pos), 1);\n }\n applyMutateResult(addValues.length, res);\n })).then(() => (putValues.length > 0 || (criteria && typeof changes === 'object')) &&\n coreTable.mutate({\n trans,\n type: 'put',\n keys: putKeys,\n values: putValues,\n criteria,\n changeSpec: typeof changes !== 'function'\n && changes\n }).then(res => applyMutateResult(putValues.length, res))).then(() => (deleteKeys.length > 0 || (criteria && changes === deleteCallback)) &&\n coreTable.mutate({\n trans,\n type: 'delete',\n keys: deleteKeys,\n criteria\n }).then(res => applyMutateResult(deleteKeys.length, res))).then(() => {\n return keys.length > offset + count && nextChunk(offset + limit);\n });\n });\n };\n return nextChunk(0).then(() => {\n if (totalFailures.length > 0)\n throw new ModifyError(\"Error modifying one or more objects\", totalFailures, successCount, failedKeys);\n return keys.length;\n });\n });\n });\n }\n delete() {\n var ctx = this._ctx, range = ctx.range;\n if (isPlainKeyRange(ctx) &&\n ((ctx.isPrimKey && !hangsOnDeleteLargeKeyRange) || range.type === 3 ))\n {\n return this._write(trans => {\n const { primaryKey } = ctx.table.core.schema;\n const coreRange = range;\n return ctx.table.core.count({ trans, query: { index: primaryKey, range: coreRange } }).then(count => {\n return ctx.table.core.mutate({ trans, type: 'deleteRange', range: coreRange })\n .then(({ failures, lastResult, results, numFailures }) => {\n if (numFailures)\n throw new ModifyError(\"Could not delete some values\", Object.keys(failures).map(pos => failures[pos]), count - numFailures);\n return count - numFailures;\n });\n });\n });\n }\n return this.modify(deleteCallback);\n }\n}\nconst deleteCallback = (value, ctx) => ctx.value = null;\n\nfunction createCollectionConstructor(db) {\n return makeClassConstructor(Collection.prototype, function Collection(whereClause, keyRangeGenerator) {\n this.db = db;\n let keyRange = AnyRange, error = null;\n if (keyRangeGenerator)\n try {\n keyRange = keyRangeGenerator();\n }\n catch (ex) {\n error = ex;\n }\n const whereCtx = whereClause._ctx;\n const table = whereCtx.table;\n const 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, () => rangeEqual(\"\")).limit(0);\n}\nfunction upperFactory(dir) {\n return dir === \"next\" ?\n (s) => s.toUpperCase() :\n (s) => s.toLowerCase();\n}\nfunction lowerFactory(dir) {\n return dir === \"next\" ?\n (s) => s.toLowerCase() :\n (s) => 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(s => 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, () => 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,\n upper,\n lowerOpen,\n upperOpen\n };\n}\nfunction rangeEqual(value) {\n return {\n type: 1 ,\n lower: value,\n upper: value\n };\n}\n\nclass WhereClause {\n get Collection() {\n return this._ctx.table.db.Collection;\n }\n between(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, () => createRange(lower, upper, !includeLower, !includeUpper));\n }\n catch (e) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n }\n equals(value) {\n if (value == null)\n return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => rangeEqual(value));\n }\n above(value) {\n if (value == null)\n return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, true));\n }\n aboveOrEqual(value) {\n if (value == null)\n return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, false));\n }\n below(value) {\n if (value == null)\n return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value, false, true));\n }\n belowOrEqual(value) {\n if (value == null)\n return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value));\n }\n startsWith(str) {\n if (typeof str !== 'string')\n return fail(this, STRING_EXPECTED);\n return this.between(str, str + maxString, true, true);\n }\n startsWithIgnoreCase(str) {\n if (str === \"\")\n return this.startsWith(str);\n return addIgnoreCaseAlgorithm(this, (x, a) => x.indexOf(a[0]) === 0, [str], maxString);\n }\n equalsIgnoreCase(str) {\n return addIgnoreCaseAlgorithm(this, (x, a) => x === a[0], [str], \"\");\n }\n anyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0)\n return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.indexOf(x) !== -1, set, \"\");\n }\n startsWithAnyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0)\n return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.some(n => x.indexOf(n) === 0), set, maxString);\n }\n anyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n let 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 const c = new this.Collection(this, () => createRange(set[0], set[set.length - 1]));\n c._ondirectionchange = direction => {\n compare = (direction === \"next\" ?\n this._ascending :\n this._descending);\n set.sort(compare);\n };\n let i = 0;\n c._addAlgorithm((cursor, advance, resolve) => {\n const 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(() => { cursor.continue(set[i]); });\n return false;\n }\n });\n return c;\n }\n notEqual(value) {\n return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false });\n }\n noneOf() {\n const 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 const ranges = set.reduce((res, val) => 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 inAnyRange(ranges, options) {\n const 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(range => range[0] !== undefined &&\n range[1] !== undefined &&\n ascending(range[0], range[1]) <= 0)) {\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 const includeLowers = !options || options.includeLowers !== false;\n const includeUppers = options && options.includeUppers === true;\n function addRange(ranges, newRange) {\n let i = 0, l = ranges.length;\n for (; i < l; ++i) {\n const 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 let sortDirection = ascending;\n function rangeSorter(a, b) { return sortDirection(a[0], b[0]); }\n let 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 let rangePos = 0;\n const keyIsBeyondCurrentEntry = includeUppers ?\n key => ascending(key, set[rangePos][1]) > 0 :\n key => ascending(key, set[rangePos][1]) >= 0;\n const keyIsBeforeCurrentEntry = includeLowers ?\n key => descending(key, set[rangePos][0]) > 0 :\n key => descending(key, set[rangePos][0]) >= 0;\n function keyWithinCurrentRange(key) {\n return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);\n }\n let checkKey = keyIsBeyondCurrentEntry;\n const c = new this.Collection(this, () => createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers));\n c._ondirectionchange = 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((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(() => {\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 startsWithAnyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (!set.every(s => 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((str) => [str, str + maxString]));\n }\n}\n\nfunction createWhereClauseConstructor(db) {\n return makeClassConstructor(WhereClause.prototype, function WhereClause(table, index, orCollection) {\n this.db = db;\n this._ctx = {\n table: table,\n index: index === \":id\" ? null : index,\n or: orCollection\n };\n const indexedDB = db._deps.indexedDB;\n if (!indexedDB)\n throw new exceptions.MissingAPI();\n this._cmp = this._ascending = indexedDB.cmp.bind(indexedDB);\n this._descending = (a, b) => indexedDB.cmp(b, a);\n this._max = (a, b) => indexedDB.cmp(a, b) > 0 ? a : b;\n this._min = (a, b) => indexedDB.cmp(a, b) < 0 ? a : b;\n this._IDBKeyRange = db._deps.IDBKeyRange;\n });\n}\n\nfunction eventRejectHandler(reject) {\n return wrap(function (event) {\n preventDefault(event);\n reject(event.target.error);\n return false;\n });\n}\nfunction preventDefault(event) {\n if (event.stopPropagation)\n event.stopPropagation();\n if (event.preventDefault)\n event.preventDefault();\n}\n\nconst DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated';\nconst STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1';\nconst globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME);\n\nclass Transaction {\n _lock() {\n assert(!PSD.global);\n ++this._reculock;\n if (this._reculock === 1 && !PSD.global)\n PSD.lockOwnerFor = this;\n return this;\n }\n _unlock() {\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 _locked() {\n return this._reculock && PSD.lockOwnerFor !== this;\n }\n create(idbtrans) {\n if (!this.mode)\n return this;\n const idbdb = this.db.idbdb;\n const 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 ||\n (this.db.core\n ? this.db.core.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })\n : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability }));\n idbtrans.onerror = wrap(ev => {\n preventDefault(ev);\n this._reject(idbtrans.error);\n });\n idbtrans.onabort = wrap(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(() => {\n this.active = false;\n this._resolve();\n if ('mutatedParts' in idbtrans) {\n globalEvents.storagemutated.fire(idbtrans[\"mutatedParts\"]);\n }\n });\n return this;\n }\n _promise(mode, fn, bWriteLock) {\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 DexiePromise((resolve, reject) => {\n this._blockedFuncs.push([() => {\n this._promise(mode, fn, bWriteLock).then(resolve, reject);\n }, PSD]);\n });\n }\n else if (bWriteLock) {\n return newScope(() => {\n var p = new DexiePromise((resolve, reject) => {\n this._lock();\n const rv = fn(resolve, reject, this);\n if (rv && rv.then)\n rv.then(resolve, reject);\n });\n p.finally(() => this._unlock());\n p._lib = true;\n return p;\n });\n }\n else {\n var p = new DexiePromise((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 _root() {\n return this.parent ? this.parent._root() : this;\n }\n waitFor(promiseLike) {\n var root = this._root();\n const promise = DexiePromise.resolve(promiseLike);\n if (root._waitingFor) {\n root._waitingFor = root._waitingFor.then(() => 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 DexiePromise((resolve, reject) => {\n promise.then(res => root._waitingQueue.push(wrap(resolve.bind(null, res))), err => root._waitingQueue.push(wrap(reject.bind(null, err)))).finally(() => {\n if (root._waitingFor === currentWaitPromise) {\n root._waitingFor = null;\n }\n });\n });\n }\n abort() {\n if (this.active) {\n this.active = false;\n if (this.idbtrans)\n this.idbtrans.abort();\n this._reject(new exceptions.Abort());\n }\n }\n table(tableName) {\n const memoizedTables = (this._memoizedTables || (this._memoizedTables = {}));\n if (hasOwn(memoizedTables, tableName))\n return memoizedTables[tableName];\n const tableSchema = this.schema[tableName];\n if (!tableSchema) {\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\");\n }\n const 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}\n\nfunction createTransactionConstructor(db) {\n return makeClassConstructor(Transaction.prototype, function Transaction(mode, storeNames, dbschema, chromeTransactionDurability, parent) {\n this.db = db;\n this.mode = mode;\n this.storeNames = storeNames;\n this.schema = dbschema;\n this.chromeTransactionDurability = chromeTransactionDurability;\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 DexiePromise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this._completion.then(() => {\n this.active = false;\n this.on.complete.fire();\n }, 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, isPrimKey) {\n return {\n name,\n keyPath,\n unique,\n multi,\n auto,\n compound,\n src: (unique && !isPrimKey ? '&' : '') + (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,\n primKey,\n indexes,\n mappedClass: null,\n idxByName: arrayToObject(indexes, index => [index.name, index])\n };\n}\n\nfunction safariMultiStoreFix(storeNames) {\n return storeNames.length === 1 ? storeNames[0] : storeNames;\n}\nlet getMaxKey = (IdbKeyRange) => {\n try {\n IdbKeyRange.only([[]]);\n getMaxKey = () => [[]];\n return [[]];\n }\n catch (e) {\n getMaxKey = () => maxString;\n return maxString;\n }\n};\n\nfunction getKeyExtractor(keyPath) {\n if (keyPath == null) {\n return () => undefined;\n }\n else if (typeof keyPath === 'string') {\n return getSinglePathKeyExtractor(keyPath);\n }\n else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\nfunction getSinglePathKeyExtractor(keyPath) {\n const split = keyPath.split('.');\n if (split.length === 1) {\n return obj => obj[keyPath];\n }\n else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n\nfunction arrayify(arrayLike) {\n return [].slice.call(arrayLike);\n}\nlet _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, IdbKeyRange, tmpTrans) {\n function extractSchema(db, trans) {\n const tables = arrayify(db.objectStoreNames);\n return {\n schema: {\n name: db.name,\n tables: tables.map(table => trans.objectStore(table)).map(store => {\n const { keyPath, autoIncrement } = store;\n const compound = isArray(keyPath);\n const outbound = keyPath == null;\n const indexByKeyPath = {};\n const result = {\n name: store.name,\n primaryKey: {\n name: null,\n isPrimaryKey: true,\n outbound,\n compound,\n keyPath,\n autoIncrement,\n unique: true,\n extractKey: getKeyExtractor(keyPath)\n },\n indexes: arrayify(store.indexNames).map(indexName => store.index(indexName))\n .map(index => {\n const { name, unique, multiEntry, keyPath } = index;\n const compound = isArray(keyPath);\n const result = {\n name,\n compound,\n keyPath,\n unique,\n multiEntry,\n extractKey: getKeyExtractor(keyPath)\n };\n indexByKeyPath[getKeyPathAlias(keyPath)] = result;\n return result;\n }),\n getIndexByKeyPath: (keyPath) => 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 const { lower, upper, lowerOpen, upperOpen } = range;\n const 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 const tableName = tableSchema.name;\n function mutate({ trans, type, keys, values, range }) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = trans.objectStore(tableName);\n const outbound = store.keyPath == null;\n const isAddOrPut = type === \"put\" || type === \"add\";\n if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange')\n throw new Error(\"Invalid operation type: \" + type);\n const { length } = keys || values || { length: 1 };\n if (keys && values && keys.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 let req;\n const reqs = [];\n const failures = [];\n let numFailures = 0;\n const errorHandler = event => {\n ++numFailures;\n preventDefault(event);\n };\n if (type === 'deleteRange') {\n if (range.type === 4 )\n return resolve({ numFailures, failures, results: [], lastResult: undefined });\n if (range.type === 3 )\n reqs.push(req = store.clear());\n else\n reqs.push(req = store.delete(makeIDBKeyRange(range)));\n }\n else {\n const [args1, args2] = isAddOrPut ?\n outbound ?\n [values, keys] :\n [values, null] :\n [keys, null];\n if (isAddOrPut) {\n for (let i = 0; i < length; ++i) {\n reqs.push(req = (args2 && args2[i] !== undefined ?\n store[type](args1[i], args2[i]) :\n store[type](args1[i])));\n req.onerror = errorHandler;\n }\n }\n else {\n for (let i = 0; i < length; ++i) {\n reqs.push(req = store[type](args1[i]));\n req.onerror = errorHandler;\n }\n }\n }\n const done = event => {\n const lastResult = event.target.result;\n reqs.forEach((req, i) => req.error != null && (failures[i] = req.error));\n resolve({\n numFailures,\n failures,\n results: type === \"delete\" ? keys : reqs.map(req => req.result),\n lastResult\n });\n };\n req.onerror = event => {\n errorHandler(event);\n done(event);\n };\n req.onsuccess = done;\n });\n }\n function openCursor({ trans, values, query, reverse, unique }) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const { index, range } = query;\n const store = trans.objectStore(tableName);\n const source = index.isPrimaryKey ?\n store :\n store.index(index.name);\n const direction = reverse ?\n unique ?\n \"prevunique\" :\n \"prev\" :\n unique ?\n \"nextunique\" :\n \"next\";\n const 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(ev => {\n const cursor = req.result;\n if (!cursor) {\n resolve(null);\n return;\n }\n cursor.___id = ++_id_counter;\n cursor.done = false;\n const _cursorContinue = cursor.continue.bind(cursor);\n let _cursorContinuePrimaryKey = cursor.continuePrimaryKey;\n if (_cursorContinuePrimaryKey)\n _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor);\n const _cursorAdvance = cursor.advance.bind(cursor);\n const doThrowCursorIsNotStarted = () => { throw new Error(\"Cursor not started\"); };\n const doThrowCursorIsStopped = () => { 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 let gotOne = 1;\n return this.start(() => gotOne-- ? this.continue() : this.stop()).then(() => this);\n };\n cursor.start = (callback) => {\n const iterationPromise = new Promise((resolveIteration, rejectIteration) => {\n resolveIteration = wrap(resolveIteration);\n req.onerror = eventRejectHandler(rejectIteration);\n cursor.fail = rejectIteration;\n cursor.stop = value => {\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped;\n resolveIteration(value);\n };\n });\n const guardedCallback = () => {\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 = () => { throw new Error(\"Cursor behind last entry\"); };\n cursor.stop();\n }\n };\n req.onsuccess = wrap(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 (request) => {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const { trans, values, limit, query } = request;\n const nonInfinitLimit = limit === Infinity ? undefined : limit;\n const { index, range } = query;\n const store = trans.objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n if (limit === 0)\n return resolve({ result: [] });\n if (hasGetAll) {\n const req = values ?\n source.getAll(idbKeyRange, nonInfinitLimit) :\n source.getAllKeys(idbKeyRange, nonInfinitLimit);\n req.onsuccess = event => resolve({ result: event.target.result });\n req.onerror = eventRejectHandler(reject);\n }\n else {\n let count = 0;\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(idbKeyRange) :\n source.openKeyCursor(idbKeyRange);\n const result = [];\n req.onsuccess = event => {\n const cursor = req.result;\n if (!cursor)\n return resolve({ result });\n result.push(values ? cursor.value : cursor.primaryKey);\n if (++count === limit)\n return resolve({ result });\n cursor.continue();\n };\n req.onerror = eventRejectHandler(reject);\n }\n });\n };\n }\n return {\n name: tableName,\n schema: tableSchema,\n mutate,\n getMany({ trans, keys }) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = trans.objectStore(tableName);\n const length = keys.length;\n const result = new Array(length);\n let keyCount = 0;\n let callbackCount = 0;\n let req;\n const successHandler = event => {\n const req = event.target;\n if ((result[req._pos] = req.result) != null)\n ;\n if (++callbackCount === keyCount)\n resolve(result);\n };\n const errorHandler = eventRejectHandler(reject);\n for (let i = 0; i < length; ++i) {\n const key = keys[i];\n if (key != null) {\n req = store.get(keys[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({ trans, key }) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = trans.objectStore(tableName);\n const req = store.get(key);\n req.onsuccess = event => resolve(event.target.result);\n req.onerror = eventRejectHandler(reject);\n });\n },\n query: query(hasGetAll),\n openCursor,\n count({ query, trans }) {\n const { index, range } = query;\n return new Promise((resolve, reject) => {\n const store = trans.objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n const req = idbKeyRange ? source.count(idbKeyRange) : source.count();\n req.onsuccess = wrap(ev => resolve(ev.target.result));\n req.onerror = eventRejectHandler(reject);\n });\n }\n };\n }\n const { schema, hasGetAll } = extractSchema(db, tmpTrans);\n const tables = schema.tables.map(tableSchema => createDbCoreTable(tableSchema));\n const tableMap = {};\n tables.forEach(table => tableMap[table.name] = table);\n return {\n stack: \"dbcore\",\n transaction: db.transaction.bind(db),\n table(name) {\n const result = tableMap[name];\n if (!result)\n throw new Error(`Table '${name}' not found`);\n return tableMap[name];\n },\n MIN_KEY: -Infinity,\n MAX_KEY: getMaxKey(IdbKeyRange),\n schema\n };\n}\n\nfunction createMiddlewareStack(stackImpl, middlewares) {\n return middlewares.reduce((down, { create }) => ({ ...down, ...create(down) }), stackImpl);\n}\nfunction createMiddlewareStacks(middlewares, idbdb, { IDBKeyRange, indexedDB }, tmpTrans) {\n const dbcore = createMiddlewareStack(createDBCore(idbdb, IDBKeyRange, tmpTrans), middlewares.dbcore);\n return {\n dbcore\n };\n}\nfunction generateMiddlewareStacks({ _novip: db }, tmpTrans) {\n const idbdb = tmpTrans.db;\n const stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans);\n db.core = stacks.dbcore;\n db.tables.forEach(table => {\n const tableName = table.name;\n if (db.core.schema.tables.some(tbl => 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({ _novip: db }, objs, tableNames, dbschema) {\n tableNames.forEach(tableName => {\n const schema = dbschema[tableName];\n objs.forEach(obj => {\n const propDesc = getPropertyDescriptor(obj, tableName);\n if (!propDesc || (\"value\" in propDesc && propDesc.value === undefined)) {\n if (obj === db.Transaction.prototype || obj instanceof db.Transaction) {\n setProp(obj, tableName, {\n get() { return this.table(tableName); },\n set(value) {\n defineProperty(this, tableName, { value, writable: true, configurable: true, enumerable: true });\n }\n });\n }\n else {\n obj[tableName] = new db.Table(tableName, schema);\n }\n }\n });\n });\n}\nfunction removeTablesApi({ _novip: db }, objs) {\n objs.forEach(obj => {\n for (let 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 const globalSchema = db._dbSchema;\n const trans = db._createTransaction('readwrite', db._storeNames, globalSchema);\n trans.create(idbUpgradeTrans);\n trans._completion.catch(reject);\n const rejectTransaction = trans._reject.bind(trans);\n const transless = PSD.transless || PSD;\n newScope(() => {\n PSD.trans = trans;\n PSD.transless = transless;\n if (oldVersion === 0) {\n keys(globalSchema).forEach(tableName => {\n createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);\n });\n generateMiddlewareStacks(db, idbUpgradeTrans);\n DexiePromise.follow(() => db.on.populate.fire(trans)).catch(rejectTransaction);\n }\n else\n updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans).catch(rejectTransaction);\n });\n}\nfunction updateTablesAndIndexes({ _novip: db }, oldVersion, trans, idbUpgradeTrans) {\n const queue = [];\n const versions = db._versions;\n let globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n let anyContentUpgraderHasRun = false;\n const versToRun = versions.filter(v => v._cfg.version >= oldVersion);\n versToRun.forEach(version => {\n queue.push(() => {\n const oldSchema = globalSchema;\n const newSchema = version._cfg.dbschema;\n adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans);\n adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans);\n globalSchema = db._dbSchema = newSchema;\n const diff = getSchemaDiff(oldSchema, newSchema);\n diff.add.forEach(tuple => {\n createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes);\n });\n diff.change.forEach(change => {\n if (change.recreate) {\n throw new exceptions.Upgrade(\"Not yet support for changing primary key\");\n }\n else {\n const store = idbUpgradeTrans.objectStore(change.name);\n change.add.forEach(idx => addIndex(store, idx));\n change.change.forEach(idx => {\n store.deleteIndex(idx.name);\n addIndex(store, idx);\n });\n change.del.forEach(idxName => store.deleteIndex(idxName));\n }\n });\n const contentUpgrade = version._cfg.contentUpgrade;\n if (contentUpgrade && version._cfg.version > oldVersion) {\n generateMiddlewareStacks(db, idbUpgradeTrans);\n trans._memoizedTables = {};\n anyContentUpgraderHasRun = true;\n let upgradeSchema = shallowClone(newSchema);\n diff.del.forEach(table => {\n upgradeSchema[table] = oldSchema[table];\n });\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema), upgradeSchema);\n trans.schema = upgradeSchema;\n const contentUpgradeIsAsync = isAsyncFunction(contentUpgrade);\n if (contentUpgradeIsAsync) {\n incrementExpectedAwaits();\n }\n let returnValue;\n const promiseFollowed = DexiePromise.follow(() => {\n returnValue = contentUpgrade(trans);\n if (returnValue) {\n if (contentUpgradeIsAsync) {\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n }\n }\n });\n return (returnValue && typeof returnValue.then === 'function' ?\n DexiePromise.resolve(returnValue) : promiseFollowed.then(() => returnValue));\n }\n });\n queue.push(idbtrans => {\n if (!anyContentUpgraderHasRun || !hasIEDeleteObjectStoreBug) {\n const 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 ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) :\n DexiePromise.resolve();\n }\n return runQueue().then(() => {\n createMissingTables(globalSchema, idbUpgradeTrans);\n });\n}\nfunction getSchemaDiff(oldSchema, newSchema) {\n const diff = {\n del: [],\n add: [],\n change: []\n };\n let table;\n for (table in oldSchema) {\n if (!newSchema[table])\n diff.del.push(table);\n }\n for (table in newSchema) {\n const oldDef = oldSchema[table], newDef = newSchema[table];\n if (!oldDef) {\n diff.add.push([table, newDef]);\n }\n else {\n const change = {\n name: table,\n def: newDef,\n recreate: false,\n del: [],\n add: [],\n change: []\n };\n if ((\n '' + (oldDef.primKey.keyPath || '')) !== ('' + (newDef.primKey.keyPath || '')) ||\n (oldDef.primKey.auto !== newDef.primKey.auto && !isIEOrEdge))\n {\n change.recreate = true;\n diff.change.push(change);\n }\n else {\n const oldIndexes = oldDef.idxByName;\n const newIndexes = newDef.idxByName;\n let idxName;\n for (idxName in oldIndexes) {\n if (!newIndexes[idxName])\n change.del.push(idxName);\n }\n for (idxName in newIndexes) {\n const 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 const store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ?\n { keyPath: primKey.keyPath, autoIncrement: primKey.auto } :\n { autoIncrement: primKey.auto });\n indexes.forEach(idx => addIndex(store, idx));\n return store;\n}\nfunction createMissingTables(newSchema, idbtrans) {\n keys(newSchema).forEach(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 [].slice.call(idbtrans.db.objectStoreNames).forEach(storeName => newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName));\n}\nfunction addIndex(store, idx) {\n store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi });\n}\nfunction buildGlobalSchema(db, idbdb, tmpTrans) {\n const globalSchema = {};\n const dbStoreNames = slice(idbdb.objectStoreNames, 0);\n dbStoreNames.forEach(storeName => {\n const store = tmpTrans.objectStore(storeName);\n let keyPath = store.keyPath;\n const primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || \"\", false, false, !!store.autoIncrement, keyPath && typeof keyPath !== \"string\", true);\n const indexes = [];\n for (let j = 0; j < store.indexNames.length; ++j) {\n const 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\", false);\n indexes.push(index);\n }\n globalSchema[storeName] = createTableSchema(storeName, primKey, indexes);\n });\n return globalSchema;\n}\nfunction readGlobalSchema({ _novip: db }, idbdb, tmpTrans) {\n db.verno = idbdb.version / 10;\n const globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans);\n db._storeNames = slice(idbdb.objectStoreNames, 0);\n setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema);\n}\nfunction verifyInstalledSchema(db, tmpTrans) {\n const installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans);\n const diff = getSchemaDiff(installedSchema, db._dbSchema);\n return !(diff.add.length || diff.change.some(ch => ch.add.length || ch.change.length));\n}\nfunction adjustToExistingIndexNames({ _novip: db }, schema, idbtrans) {\n const storeNames = idbtrans.db.objectStoreNames;\n for (let i = 0; i < storeNames.length; ++i) {\n const storeName = storeNames[i];\n const store = idbtrans.objectStore(storeName);\n db._hasGetAll = 'getAll' in store;\n for (let j = 0; j < store.indexNames.length; ++j) {\n const indexName = store.indexNames[j];\n const keyPath = store.index(indexName).keyPath;\n const dexieName = typeof keyPath === 'string' ? keyPath : \"[\" + slice(keyPath).join('+') + \"]\";\n if (schema[storeName]) {\n const indexSpec = schema[storeName].idxByName[dexieName];\n if (indexSpec) {\n indexSpec.name = indexName;\n delete schema[storeName].idxByName[dexieName];\n schema[storeName].idxByName[indexName] = indexSpec;\n }\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(primKeyAndIndexes) {\n return primKeyAndIndexes.split(',').map((index, indexNum) => {\n index = index.trim();\n const name = index.replace(/([&*]|\\+\\+)/g, \"\");\n const keyPath = /^\\[/.test(name) ? name.match(/^\\[(.*)\\]$/)[1].split('+') : name;\n return createIndexSpec(name, keyPath || null, /\\&/.test(index), /\\*/.test(index), /\\+\\+/.test(index), isArray(keyPath), indexNum === 0);\n });\n}\n\nclass Version {\n _parseStoresSpec(stores, outSchema) {\n keys(stores).forEach(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(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 stores(stores) {\n const db = this.db;\n this._cfg.storesSource = this._cfg.storesSource ?\n extend(this._cfg.storesSource, stores) :\n stores;\n const versions = db._versions;\n const storesSpec = {};\n let dbschema = {};\n versions.forEach(version => {\n extend(storesSpec, version._cfg.storesSource);\n dbschema = (version._cfg.dbschema = {});\n version._parseStoresSpec(storesSpec, dbschema);\n });\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 upgrade(upgradeFunction) {\n this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction);\n return this;\n }\n}\n\nfunction createVersionConstructor(db) {\n return makeClassConstructor(Version.prototype, function Version(versionNumber) {\n this.db = db;\n this._cfg = {\n version: versionNumber,\n storesSource: null,\n dbschema: {},\n tables: {},\n contentUpgrade: null\n };\n });\n}\n\nfunction getDbNamesTable(indexedDB, IDBKeyRange) {\n let dbNamesDB = indexedDB[\"_dbNamesDB\"];\n if (!dbNamesDB) {\n dbNamesDB = indexedDB[\"_dbNamesDB\"] = new Dexie$1(DBNAMES_DB, {\n addons: [],\n indexedDB,\n IDBKeyRange,\n });\n dbNamesDB.version(1).stores({ dbnames: \"name\" });\n }\n return dbNamesDB.table(\"dbnames\");\n}\nfunction hasDatabasesNative(indexedDB) {\n return indexedDB && typeof indexedDB.databases === \"function\";\n}\nfunction getDatabaseNames({ indexedDB, IDBKeyRange, }) {\n return hasDatabasesNative(indexedDB)\n ? Promise.resolve(indexedDB.databases()).then((infos) => infos\n .map((info) => info.name)\n .filter((name) => name !== DBNAMES_DB))\n : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys();\n}\nfunction _onDatabaseCreated({ indexedDB, IDBKeyRange }, name) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).put({ name }).catch(nop);\n}\nfunction _onDatabaseDeleted({ indexedDB, IDBKeyRange }, name) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop);\n}\n\nfunction vip(fn) {\n return newScope(function () {\n PSD.letThrough = true;\n return fn();\n });\n}\n\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nfunction dexieOpen(db) {\n const state = db._state;\n const { indexedDB } = db._deps;\n if (state.isBeingOpened || db.idbdb)\n return state.dbReadyPromise.then(() => 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 const openCanceller = state.openCanceller;\n function throwIfCancelled() {\n if (state.openCanceller !== openCanceller)\n throw new exceptions.DatabaseClosed('db.open() was cancelled');\n }\n let resolveDbReady = state.dbReadyResolve,\n upgradeTransaction = null, wasCreated = false;\n return DexiePromise.race([openCanceller, (typeof navigator === 'undefined' ? DexiePromise.resolve() : idbReady()).then(() => new DexiePromise((resolve, reject) => {\n throwIfCancelled();\n if (!indexedDB)\n throw new exceptions.MissingAPI();\n const dbName = db.name;\n const req = state.autoSchema ?\n indexedDB.open(dbName) :\n indexedDB.open(dbName, Math.round(db.verno * 10));\n if (!req)\n throw new exceptions.MissingAPI();\n req.onerror = eventRejectHandler(reject);\n req.onblocked = wrap(db._fireOnBlocked);\n req.onupgradeneeded = wrap(e => {\n upgradeTransaction = req.transaction;\n if (state.autoSchema && !db._options.allowEmptyDB) {\n req.onerror = preventDefault;\n upgradeTransaction.abort();\n req.result.close();\n const delreq = indexedDB.deleteDatabase(dbName);\n delreq.onsuccess = delreq.onerror = wrap(() => {\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 wasCreated = oldVer < 1;\n db._novip.idbdb = req.result;\n runUpgraders(db, oldVer / 10, upgradeTransaction, reject);\n }\n }, reject);\n req.onsuccess = wrap(() => {\n upgradeTransaction = null;\n const idbdb = db._novip.idbdb = req.result;\n const objectStoreNames = slice(idbdb.objectStoreNames);\n if (objectStoreNames.length > 0)\n try {\n const tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly');\n if (state.autoSchema)\n readGlobalSchema(db, idbdb, tmpTrans);\n else {\n adjustToExistingIndexNames(db, db._dbSchema, tmpTrans);\n if (!verifyInstalledSchema(db, tmpTrans)) {\n console.warn(`Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Some queries may fail.`);\n }\n }\n generateMiddlewareStacks(db, tmpTrans);\n }\n catch (e) {\n }\n connections.push(db);\n idbdb.onversionchange = wrap(ev => {\n state.vcFired = true;\n db.on(\"versionchange\").fire(ev);\n });\n idbdb.onclose = wrap(ev => {\n db.on(\"close\").fire(ev);\n });\n if (wasCreated)\n _onDatabaseCreated(db._deps, dbName);\n resolve();\n }, reject);\n }))]).then(() => {\n throwIfCancelled();\n state.onReadyBeingFired = [];\n return DexiePromise.resolve(vip(() => db.on.ready.fire(db.vip))).then(function fireRemainders() {\n if (state.onReadyBeingFired.length > 0) {\n let remainders = state.onReadyBeingFired.reduce(promisableChain, nop);\n state.onReadyBeingFired = [];\n return DexiePromise.resolve(vip(() => remainders(db.vip))).then(fireRemainders);\n }\n });\n }).finally(() => {\n state.onReadyBeingFired = null;\n state.isBeingOpened = false;\n }).then(() => {\n return db;\n }).catch(err => {\n state.dbOpenError = err;\n try {\n upgradeTransaction && upgradeTransaction.abort();\n }\n catch (_a) { }\n if (openCanceller === state.openCanceller) {\n db._close();\n }\n return rejection(err);\n }).finally(() => {\n state.openComplete = true;\n resolveDbReady();\n });\n}\n\nfunction awaitIterator(iterator) {\n var callNext = result => iterator.next(result), doThrow = error => iterator.throw(error), onSuccess = step(callNext), onError = step(doThrow);\n function step(getNext) {\n return (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 DexiePromise.resolve().then(() => {\n const transless = PSD.transless || PSD;\n const trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction);\n const zoneProps = {\n trans: trans,\n transless: transless\n };\n if (parentTransaction) {\n trans.idbtrans = parentTransaction.idbtrans;\n }\n else {\n trans.create();\n }\n const scopeFuncIsAsync = isAsyncFunction(scopeFunc);\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n let returnValue;\n const promiseFollowed = DexiePromise.follow(() => {\n returnValue = scopeFunc.call(trans, trans);\n if (returnValue) {\n if (scopeFuncIsAsync) {\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 DexiePromise.resolve(returnValue).then(x => trans.active ?\n x\n : rejection(new exceptions.PrematureCommit(\"Transaction committed too early. See http://bit.ly/2kdckMn\")))\n : promiseFollowed.then(() => returnValue)).then(x => {\n if (parentTransaction)\n trans._resolve();\n return trans._completion.then(() => x);\n }).catch(e => {\n trans._reject(e);\n return rejection(e);\n });\n });\n}\n\nfunction pad(a, value, count) {\n const result = isArray(a) ? a.slice() : [a];\n for (let i = 0; i < count; ++i)\n result.push(value);\n return result;\n}\nfunction createVirtualIndexMiddleware(down) {\n return {\n ...down,\n table(tableName) {\n const table = down.table(tableName);\n const { schema } = table;\n const indexLookup = {};\n const allVirtualIndexes = [];\n function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) {\n const keyPathAlias = getKeyPathAlias(keyPath);\n const indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []);\n const keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length;\n const isVirtual = keyTail > 0;\n const virtualIndex = {\n ...lowLevelIndex,\n isVirtual,\n keyTail,\n keyLength,\n extractKey: getKeyExtractor(keyPath),\n unique: !isVirtual && lowLevelIndex.unique\n };\n indexList.push(virtualIndex);\n if (!virtualIndex.isPrimaryKey) {\n allVirtualIndexes.push(virtualIndex);\n }\n if (keyLength > 1) {\n const virtualKeyPath = keyLength === 2 ?\n keyPath[0] :\n keyPath.slice(0, keyLength - 1);\n addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex);\n }\n indexList.sort((a, b) => a.keyTail - b.keyTail);\n return virtualIndex;\n }\n const primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey);\n indexLookup[\":id\"] = [primaryKey];\n for (const index of schema.indexes) {\n addVirtualIndexes(index.keyPath, 0, index);\n }\n function findBestIndex(keyPath) {\n const 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 const index = req.query.index;\n return index.isVirtual ? {\n ...req,\n query: {\n index,\n range: translateRange(req.query.range, index.keyTail)\n }\n } : req;\n }\n const result = {\n ...table,\n schema: {\n ...schema,\n primaryKey,\n indexes: allVirtualIndexes,\n getIndexByKeyPath: findBestIndex\n },\n count(req) {\n return table.count(translateRequest(req));\n },\n query(req) {\n return table.query(translateRequest(req));\n },\n openCursor(req) {\n const { keyTail, isVirtual, keyLength } = req.query.index;\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(cursor.key.slice(0, keyLength)\n .concat(req.reverse\n ? down.MIN_KEY\n : down.MAX_KEY, keyTail)) :\n cursor.continue();\n }\n const virtualCursor = Object.create(cursor, {\n continue: { value: _continue },\n continuePrimaryKey: {\n value(key, primaryKey) {\n cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey);\n }\n },\n primaryKey: {\n get() {\n return cursor.primaryKey;\n }\n },\n key: {\n get() {\n const key = cursor.key;\n return keyLength === 1 ?\n key[0] :\n key.slice(0, keyLength);\n }\n },\n value: {\n get() {\n return cursor.value;\n }\n }\n });\n return virtualCursor;\n }\n return table.openCursor(translateRequest(req))\n .then(cursor => cursor && createVirtualCursor(cursor));\n }\n };\n return result;\n }\n };\n}\nconst virtualIndexMiddleware = {\n stack: \"dbcore\",\n name: \"VirtualIndexMiddleware\",\n level: 1,\n create: createVirtualIndexMiddleware\n};\n\nfunction getObjectDiff(a, b, rv, prfx) {\n rv = rv || {};\n prfx = prfx || '';\n keys(a).forEach((prop) => {\n if (!hasOwn(b, prop)) {\n rv[prfx + prop] = undefined;\n }\n else {\n var ap = a[prop], bp = b[prop];\n if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) {\n const apTypeName = toStringTag(ap);\n const bpTypeName = toStringTag(bp);\n if (apTypeName !== bpTypeName) {\n rv[prfx + prop] = b[prop];\n }\n else if (apTypeName === 'Object') {\n getObjectDiff(ap, bp, rv, prfx + prop + '.');\n }\n else if (ap !== bp) {\n rv[prfx + prop] = b[prop];\n }\n }\n else if (ap !== bp)\n rv[prfx + prop] = b[prop];\n }\n });\n keys(b).forEach((prop) => {\n if (!hasOwn(a, prop)) {\n rv[prfx + prop] = b[prop];\n }\n });\n return rv;\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}\n\nconst hooksMiddleware = {\n stack: \"dbcore\",\n name: \"HooksMiddleware\",\n level: 2,\n create: (downCore) => ({\n ...downCore,\n table(tableName) {\n const downTable = downCore.table(tableName);\n const { primaryKey } = downTable.schema;\n const tableMiddleware = {\n ...downTable,\n mutate(req) {\n const dxTrans = PSD.trans;\n const { deleting, creating, updating } = dxTrans.table(tableName).hook;\n switch (req.type) {\n case 'add':\n if (creating.fire === nop)\n break;\n return dxTrans._promise('readwrite', () => addPutOrDelete(req), true);\n case 'put':\n if (creating.fire === nop && updating.fire === nop)\n break;\n return dxTrans._promise('readwrite', () => addPutOrDelete(req), true);\n case 'delete':\n if (deleting.fire === nop)\n break;\n return dxTrans._promise('readwrite', () => addPutOrDelete(req), true);\n case 'deleteRange':\n if (deleting.fire === nop)\n break;\n return dxTrans._promise('readwrite', () => deleteRange(req), true);\n }\n return downTable.mutate(req);\n function addPutOrDelete(req) {\n const dxTrans = PSD.trans;\n const keys = req.keys || getEffectiveKeys(primaryKey, req);\n if (!keys)\n throw new Error(\"Keys missing\");\n req = req.type === 'add' || req.type === 'put' ?\n { ...req, keys } :\n { ...req };\n if (req.type !== 'delete')\n req.values = [...req.values];\n if (req.keys)\n req.keys = [...req.keys];\n return getExistingValues(downTable, req, keys).then(existingValues => {\n const contexts = keys.map((key, i) => {\n const existingValue = existingValues[i];\n const 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 const 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 const objectDiff = getObjectDiff(existingValue, req.values[i]);\n const additionalChanges = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans);\n if (additionalChanges) {\n const requestedValue = req.values[i];\n Object.keys(additionalChanges).forEach(keyPath => {\n if (hasOwn(requestedValue, keyPath)) {\n requestedValue[keyPath] = additionalChanges[keyPath];\n }\n else {\n setByKeyPath(requestedValue, keyPath, additionalChanges[keyPath]);\n }\n });\n }\n }\n return ctx;\n });\n return downTable.mutate(req).then(({ failures, results, numFailures, lastResult }) => {\n for (let i = 0; i < keys.length; ++i) {\n const primKey = results ? results[i] : keys[i];\n const 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, results, numFailures, lastResult };\n }).catch(error => {\n contexts.forEach(ctx => 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, values: false, query: { index: primaryKey, range }, limit })\n .then(({ result }) => {\n return addPutOrDelete({ type: 'delete', keys: result, trans }).then(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, { ...range, lower: result[result.length - 1], lowerOpen: true }, limit);\n }\n });\n });\n }\n }\n };\n return tableMiddleware;\n },\n })\n};\nfunction getExistingValues(table, req, effectiveKeys) {\n return req.type === \"add\"\n ? Promise.resolve([])\n : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: \"immutable\" });\n}\n\nfunction getFromTransactionCache(keys, cache, clone) {\n try {\n if (!cache)\n return null;\n if (cache.keys.length < keys.length)\n return null;\n const result = [];\n for (let i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) {\n if (cmp(cache.keys[i], keys[j]) !== 0)\n continue;\n result.push(clone ? deepClone(cache.values[i]) : cache.values[i]);\n ++j;\n }\n return result.length === keys.length ? result : null;\n }\n catch (_a) {\n return null;\n }\n}\nconst cacheExistingValuesMiddleware = {\n stack: \"dbcore\",\n level: -1,\n create: (core) => {\n return {\n table: (tableName) => {\n const table = core.table(tableName);\n return {\n ...table,\n getMany: (req) => {\n if (!req.cache) {\n return table.getMany(req);\n }\n const cachedResult = getFromTransactionCache(req.keys, req.trans[\"_cache\"], req.cache === \"clone\");\n if (cachedResult) {\n return DexiePromise.resolve(cachedResult);\n }\n return table.getMany(req).then((res) => {\n req.trans[\"_cache\"] = {\n keys: req.keys,\n values: req.cache === \"clone\" ? deepClone(res) : res,\n };\n return res;\n });\n },\n mutate: (req) => {\n if (req.type !== \"add\")\n req.trans[\"_cache\"] = null;\n return table.mutate(req);\n },\n };\n },\n };\n },\n};\n\nfunction isEmptyRange(node) {\n return !(\"from\" in node);\n}\nconst RangeSet = function (fromOrTree, to) {\n if (this) {\n extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 });\n }\n else {\n const rv = new RangeSet();\n if (fromOrTree && (\"d\" in fromOrTree)) {\n extend(rv, fromOrTree);\n }\n return rv;\n }\n};\nprops(RangeSet.prototype, {\n add(rangeSet) {\n mergeRanges(this, rangeSet);\n return this;\n },\n addKey(key) {\n addRange(this, key, key);\n return this;\n },\n addKeys(keys) {\n keys.forEach(key => addRange(this, key, key));\n return this;\n },\n [iteratorSymbol]() {\n return getRangeSetIterator(this);\n }\n});\nfunction addRange(target, from, to) {\n const diff = cmp(from, to);\n if (isNaN(diff))\n return;\n if (diff > 0)\n throw RangeError();\n if (isEmptyRange(target))\n return extend(target, { from, to, d: 1 });\n const left = target.l;\n const right = target.r;\n if (cmp(to, target.from) < 0) {\n left\n ? addRange(left, from, to)\n : (target.l = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n if (cmp(from, target.to) > 0) {\n right\n ? addRange(right, from, to)\n : (target.r = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n if (cmp(from, target.from) < 0) {\n target.from = from;\n target.l = null;\n target.d = right ? right.d + 1 : 1;\n }\n if (cmp(to, target.to) > 0) {\n target.to = to;\n target.r = null;\n target.d = target.l ? target.l.d + 1 : 1;\n }\n const rightWasCutOff = !target.r;\n if (left && !target.l) {\n mergeRanges(target, left);\n }\n if (right && rightWasCutOff) {\n mergeRanges(target, right);\n }\n}\nfunction mergeRanges(target, newSet) {\n function _addRangeSet(target, { from, to, l, r }) {\n addRange(target, from, to);\n if (l)\n _addRangeSet(target, l);\n if (r)\n _addRangeSet(target, r);\n }\n if (!isEmptyRange(newSet))\n _addRangeSet(target, newSet);\n}\nfunction rangesOverlap(rangeSet1, rangeSet2) {\n const i1 = getRangeSetIterator(rangeSet2);\n let nextResult1 = i1.next();\n if (nextResult1.done)\n return false;\n let a = nextResult1.value;\n const i2 = getRangeSetIterator(rangeSet1);\n let nextResult2 = i2.next(a.from);\n let b = nextResult2.value;\n while (!nextResult1.done && !nextResult2.done) {\n if (cmp(b.from, a.to) <= 0 && cmp(b.to, a.from) >= 0)\n return true;\n cmp(a.from, b.from) < 0\n ? (a = (nextResult1 = i1.next(b.from)).value)\n : (b = (nextResult2 = i2.next(a.from)).value);\n }\n return false;\n}\nfunction getRangeSetIterator(node) {\n let state = isEmptyRange(node) ? null : { s: 0, n: node };\n return {\n next(key) {\n const keyProvided = arguments.length > 0;\n while (state) {\n switch (state.s) {\n case 0:\n state.s = 1;\n if (keyProvided) {\n while (state.n.l && cmp(key, state.n.from) < 0)\n state = { up: state, n: state.n.l, s: 1 };\n }\n else {\n while (state.n.l)\n state = { up: state, n: state.n.l, s: 1 };\n }\n case 1:\n state.s = 2;\n if (!keyProvided || cmp(key, state.n.to) <= 0)\n return { value: state.n, done: false };\n case 2:\n if (state.n.r) {\n state.s = 3;\n state = { up: state, n: state.n.r, s: 0 };\n continue;\n }\n case 3:\n state = state.up;\n }\n }\n return { done: true };\n },\n };\n}\nfunction rebalance(target) {\n var _a, _b;\n const diff = (((_a = target.r) === null || _a === void 0 ? void 0 : _a.d) || 0) - (((_b = target.l) === null || _b === void 0 ? void 0 : _b.d) || 0);\n const r = diff > 1 ? \"r\" : diff < -1 ? \"l\" : \"\";\n if (r) {\n const l = r === \"r\" ? \"l\" : \"r\";\n const rootClone = { ...target };\n const oldRootRight = target[r];\n target.from = oldRootRight.from;\n target.to = oldRootRight.to;\n target[r] = oldRootRight[r];\n rootClone[r] = oldRootRight[l];\n target[l] = rootClone;\n rootClone.d = computeDepth(rootClone);\n }\n target.d = computeDepth(target);\n}\nfunction computeDepth({ r, l }) {\n return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1;\n}\n\nconst observabilityMiddleware = {\n stack: \"dbcore\",\n level: 0,\n create: (core) => {\n const dbName = core.schema.name;\n const FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY);\n return {\n ...core,\n table: (tableName) => {\n const table = core.table(tableName);\n const { schema } = table;\n const { primaryKey } = schema;\n const { extractKey, outbound } = primaryKey;\n const tableClone = {\n ...table,\n mutate: (req) => {\n const trans = req.trans;\n const mutatedParts = trans.mutatedParts || (trans.mutatedParts = {});\n const getRangeSet = (indexName) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (mutatedParts[part] ||\n (mutatedParts[part] = new RangeSet()));\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n const { type } = req;\n let [keys, newObjs] = req.type === \"deleteRange\"\n ? [req.range]\n : req.type === \"delete\"\n ? [req.keys]\n : req.values.length < 50\n ? [[], req.values]\n : [];\n const oldCache = req.trans[\"_cache\"];\n return table.mutate(req).then((res) => {\n if (isArray(keys)) {\n if (type !== \"delete\")\n keys = res.results;\n pkRangeSet.addKeys(keys);\n const oldObjs = getFromTransactionCache(keys, oldCache);\n if (!oldObjs && type !== \"add\") {\n delsRangeSet.addKeys(keys);\n }\n if (oldObjs || newObjs) {\n trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs);\n }\n }\n else if (keys) {\n const range = { from: keys.lower, to: keys.upper };\n delsRangeSet.add(range);\n pkRangeSet.add(range);\n }\n else {\n pkRangeSet.add(FULL_RANGE);\n delsRangeSet.add(FULL_RANGE);\n schema.indexes.forEach(idx => getRangeSet(idx.name).add(FULL_RANGE));\n }\n return res;\n });\n },\n };\n const getRange = ({ query: { index, range }, }) => {\n var _a, _b;\n return [\n index,\n new RangeSet((_a = range.lower) !== null && _a !== void 0 ? _a : core.MIN_KEY, (_b = range.upper) !== null && _b !== void 0 ? _b : core.MAX_KEY),\n ];\n };\n const readSubscribers = {\n get: (req) => [primaryKey, new RangeSet(req.key)],\n getMany: (req) => [primaryKey, new RangeSet().addKeys(req.keys)],\n count: getRange,\n query: getRange,\n openCursor: getRange,\n };\n keys(readSubscribers).forEach(method => {\n tableClone[method] = function (req) {\n const { subscr } = PSD;\n if (subscr) {\n const getRangeSet = (indexName) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (subscr[part] ||\n (subscr[part] = new RangeSet()));\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n const [queriedIndex, queriedRanges] = readSubscribers[method](req);\n getRangeSet(queriedIndex.name || \"\").add(queriedRanges);\n if (!queriedIndex.isPrimaryKey) {\n if (method === \"count\") {\n delsRangeSet.add(FULL_RANGE);\n }\n else {\n const keysPromise = method === \"query\" &&\n outbound &&\n req.values &&\n table.query({\n ...req,\n values: false,\n });\n return table[method].apply(this, arguments).then((res) => {\n if (method === \"query\") {\n if (outbound && req.values) {\n return keysPromise.then(({ result: resultingKeys }) => {\n pkRangeSet.addKeys(resultingKeys);\n return res;\n });\n }\n const pKeys = req.values\n ? res.result.map(extractKey)\n : res.result;\n if (req.values) {\n pkRangeSet.addKeys(pKeys);\n }\n else {\n delsRangeSet.addKeys(pKeys);\n }\n }\n else if (method === \"openCursor\") {\n const cursor = res;\n const wantValues = req.values;\n return (cursor &&\n Object.create(cursor, {\n key: {\n get() {\n delsRangeSet.addKey(cursor.primaryKey);\n return cursor.key;\n },\n },\n primaryKey: {\n get() {\n const pkey = cursor.primaryKey;\n delsRangeSet.addKey(pkey);\n return pkey;\n },\n },\n value: {\n get() {\n wantValues && pkRangeSet.addKey(cursor.primaryKey);\n return cursor.value;\n },\n },\n }));\n }\n return res;\n });\n }\n }\n }\n return table[method].apply(this, arguments);\n };\n });\n return tableClone;\n },\n };\n },\n};\nfunction trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs) {\n function addAffectedIndex(ix) {\n const rangeSet = getRangeSet(ix.name || \"\");\n function extractKey(obj) {\n return obj != null ? ix.extractKey(obj) : null;\n }\n const addKeyOrKeys = (key) => ix.multiEntry && isArray(key)\n ? key.forEach(key => rangeSet.addKey(key))\n : rangeSet.addKey(key);\n (oldObjs || newObjs).forEach((_, i) => {\n const oldKey = oldObjs && extractKey(oldObjs[i]);\n const newKey = newObjs && extractKey(newObjs[i]);\n if (cmp(oldKey, newKey) !== 0) {\n if (oldKey != null)\n addKeyOrKeys(oldKey);\n if (newKey != null)\n addKeyOrKeys(newKey);\n }\n });\n }\n schema.indexes.forEach(addAffectedIndex);\n}\n\nclass Dexie$1 {\n constructor(name, options) {\n this._middlewares = {};\n this.verno = 0;\n const deps = Dexie$1.dependencies;\n this._options = options = {\n addons: Dexie$1.addons,\n autoOpen: true,\n indexedDB: deps.indexedDB,\n IDBKeyRange: deps.IDBKeyRange,\n ...options\n };\n this._deps = {\n indexedDB: options.indexedDB,\n IDBKeyRange: options.IDBKeyRange\n };\n const { addons, } = options;\n this._dbSchema = {};\n this._versions = [];\n this._storeNames = [];\n this._allTables = {};\n this.idbdb = null;\n this._novip = this;\n const 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 DexiePromise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new DexiePromise((_, reject) => {\n state.cancelOpen = reject;\n });\n this._state = state;\n this.name = name;\n this.on = Events(this, \"populate\", \"blocked\", \"versionchange\", \"close\", { ready: [promisableChain, nop] });\n this.on.ready.subscribe = override(this.on.ready.subscribe, subscribe => {\n return (subscriber, bSticky) => {\n Dexie$1.vip(() => {\n const state = this._state;\n if (state.openComplete) {\n if (!state.dbOpenError)\n DexiePromise.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 const db = this;\n if (!bSticky)\n subscribe(function unsubscribe() {\n db.on.ready.unsubscribe(subscriber);\n db.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\", 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\", 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 = (mode, storeNames, dbschema, parentTransaction) => new this.Transaction(mode, storeNames, dbschema, this._options.chromeTransactionDurability, parentTransaction);\n this._fireOnBlocked = ev => {\n this.on(\"blocked\").fire(ev);\n connections\n .filter(c => c.name === this.name && c !== this && !c._state.vcFired)\n .map(c => c.on(\"versionchange\").fire(ev));\n };\n this.use(virtualIndexMiddleware);\n this.use(hooksMiddleware);\n this.use(observabilityMiddleware);\n this.use(cacheExistingValuesMiddleware);\n this.vip = Object.create(this, { _vip: { value: true } });\n addons.forEach(addon => addon(this));\n }\n version(versionNumber) {\n if (isNaN(versionNumber) || versionNumber < 0.1)\n throw new exceptions.Type(`Given version is not a positive number`);\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 const versions = this._versions;\n var versionInstance = versions.filter(v => 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 versionInstance.stores({});\n this._state.autoSchema = false;\n return versionInstance;\n }\n _whenReady(fn) {\n return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new DexiePromise((resolve, reject) => {\n if (this._state.openComplete) {\n return reject(new exceptions.DatabaseClosed(this._state.dbOpenError));\n }\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 use({ stack, create, level, name }) {\n if (name)\n this.unuse({ stack, name });\n const middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);\n middlewares.push({ stack, create, level: level == null ? 10 : level, name });\n middlewares.sort((a, b) => a.level - b.level);\n return this;\n }\n unuse({ stack, name, create }) {\n if (stack && this._middlewares[stack]) {\n this._middlewares[stack] = this._middlewares[stack].filter(mw => create ? mw.create !== create :\n name ? mw.name !== name :\n false);\n }\n return this;\n }\n open() {\n return dexieOpen(this);\n }\n _close() {\n const state = this._state;\n const idx = connections.indexOf(this);\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._novip.idbdb = null;\n }\n state.dbReadyPromise = new DexiePromise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new DexiePromise((_, reject) => {\n state.cancelOpen = reject;\n });\n }\n close() {\n this._close();\n const state = this._state;\n this._options.autoOpen = false;\n state.dbOpenError = new exceptions.DatabaseClosed();\n if (state.isBeingOpened)\n state.cancelOpen(state.dbOpenError);\n }\n delete() {\n const hasArguments = arguments.length > 0;\n const state = this._state;\n return new DexiePromise((resolve, reject) => {\n const doDelete = () => {\n this.close();\n var req = this._deps.indexedDB.deleteDatabase(this.name);\n req.onsuccess = wrap(() => {\n _onDatabaseDeleted(this._deps, 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 backendDB() {\n return this.idbdb;\n }\n isOpen() {\n return this.idbdb !== null;\n }\n hasBeenClosed() {\n const dbOpenError = this._state.dbOpenError;\n return dbOpenError && (dbOpenError.name === 'DatabaseClosed');\n }\n hasFailed() {\n return this._state.dbOpenError !== null;\n }\n dynamicallyOpened() {\n return this._state.autoSchema;\n }\n get tables() {\n return keys(this._allTables).map(name => this._allTables[name]);\n }\n transaction() {\n const args = extractTransactionArgs.apply(this, arguments);\n return this._transaction.apply(this, args);\n }\n _transaction(mode, tables, scopeFunc) {\n let parentTransaction = PSD.trans;\n if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1)\n parentTransaction = null;\n const onlyIfCompatible = mode.indexOf('?') !== -1;\n mode = mode.replace('!', '').replace('?', '');\n let idbMode, storeNames;\n try {\n storeNames = tables.map(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(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, (_, reject) => { reject(e); }) :\n rejection(e);\n }\n const 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, () => this._whenReady(enterTransaction)) :\n this._whenReady(enterTransaction));\n }\n table(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}\n\nconst symbolObservable = typeof Symbol !== \"undefined\" && \"observable\" in Symbol\n ? Symbol.observable\n : \"@@observable\";\nclass Observable {\n constructor(subscribe) {\n this._subscribe = subscribe;\n }\n subscribe(x, error, complete) {\n return this._subscribe(!x || typeof x === \"function\" ? { next: x, error, complete } : x);\n }\n [symbolObservable]() {\n return this;\n }\n}\n\nfunction extendObservabilitySet(target, newSet) {\n keys(newSet).forEach(part => {\n const rangeSet = target[part] || (target[part] = new RangeSet());\n mergeRanges(rangeSet, newSet[part]);\n });\n return target;\n}\n\nfunction liveQuery(querier) {\n return new Observable((observer) => {\n const scopeFuncIsAsync = isAsyncFunction(querier);\n function execute(subscr) {\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n const exec = () => newScope(querier, { subscr, trans: null });\n const rv = PSD.trans\n ?\n usePSD(PSD.transless, exec)\n : exec();\n if (scopeFuncIsAsync) {\n rv.then(decrementExpectedAwaits, decrementExpectedAwaits);\n }\n return rv;\n }\n let closed = false;\n let accumMuts = {};\n let currentObs = {};\n const subscription = {\n get closed() {\n return closed;\n },\n unsubscribe: () => {\n closed = true;\n globalEvents.storagemutated.unsubscribe(mutationListener);\n },\n };\n observer.start && observer.start(subscription);\n let querying = false, startedListening = false;\n function shouldNotify() {\n return keys(currentObs).some((key) => accumMuts[key] && rangesOverlap(accumMuts[key], currentObs[key]));\n }\n const mutationListener = (parts) => {\n extendObservabilitySet(accumMuts, parts);\n if (shouldNotify()) {\n doQuery();\n }\n };\n const doQuery = () => {\n if (querying || closed)\n return;\n accumMuts = {};\n const subscr = {};\n const ret = execute(subscr);\n if (!startedListening) {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener);\n startedListening = true;\n }\n querying = true;\n Promise.resolve(ret).then((result) => {\n querying = false;\n if (closed)\n return;\n if (shouldNotify()) {\n doQuery();\n }\n else {\n accumMuts = {};\n currentObs = subscr;\n observer.next && observer.next(result);\n }\n }, (err) => {\n querying = false;\n observer.error && observer.error(err);\n subscription.unsubscribe();\n });\n };\n doQuery();\n return subscription;\n });\n}\n\nlet domDeps;\ntry {\n domDeps = {\n indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,\n IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange\n };\n}\ncatch (e) {\n domDeps = { indexedDB: null, IDBKeyRange: null };\n}\n\nconst Dexie = Dexie$1;\nprops(Dexie, {\n ...fullNameExceptions,\n delete(databaseName) {\n const db = new Dexie(databaseName, { addons: [] });\n return db.delete();\n },\n exists(name) {\n return new Dexie(name, { addons: [] }).open().then(db => {\n db.close();\n return true;\n }).catch('NoSuchDatabaseError', () => false);\n },\n getDatabaseNames(cb) {\n try {\n return getDatabaseNames(Dexie.dependencies).then(cb);\n }\n catch (_a) {\n return rejection(new exceptions.MissingAPI());\n }\n },\n defineClass() {\n function Class(content) {\n extend(this, content);\n }\n return Class;\n },\n ignoreTransaction(scopeFunc) {\n return PSD.trans ?\n usePSD(PSD.transless, scopeFunc) :\n scopeFunc();\n },\n vip,\n 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 DexiePromise.resolve(rv);\n return rv;\n }\n catch (e) {\n return rejection(e);\n }\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 DexiePromise.resolve(rv);\n return rv;\n }\n catch (e) {\n return rejection(e);\n }\n },\n currentTransaction: {\n get: () => PSD.trans || null\n },\n waitFor: function (promiseOrFunction, optionalTimeout) {\n const promise = DexiePromise.resolve(typeof promiseOrFunction === 'function' ?\n Dexie.ignoreTransaction(promiseOrFunction) :\n promiseOrFunction)\n .timeout(optionalTimeout || 60000);\n return PSD.trans ?\n PSD.trans.waitFor(promise) :\n promise;\n },\n Promise: DexiePromise,\n debug: {\n get: () => debug,\n set: value => {\n setDebug(value, value === 'dexie' ? () => true : dexieStackFrameFilter);\n }\n },\n derive: derive,\n extend: extend,\n props: props,\n override: override,\n Events: Events,\n on: globalEvents,\n liveQuery,\n extendObservabilitySet,\n getByKeyPath: getByKeyPath,\n setByKeyPath: setByKeyPath,\n delByKeyPath: delByKeyPath,\n shallowClone: shallowClone,\n deepClone: deepClone,\n getObjectDiff: getObjectDiff,\n cmp,\n asap: asap$1,\n minKey: minKey,\n addons: [],\n connections: connections,\n errnames: errnames,\n dependencies: domDeps,\n semVer: DEXIE_VERSION,\n version: DEXIE_VERSION.split('.')\n .map(n => parseInt(n))\n .reduce((p, c, i) => p + (c / Math.pow(10, i * 2))),\n});\nDexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange);\n\nif (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, updatedParts => {\n if (!propagatingLocally) {\n let event;\n if (isIEOrEdge) {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, true, true, updatedParts);\n }\n else {\n event = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, {\n detail: updatedParts\n });\n }\n propagatingLocally = true;\n dispatchEvent(event);\n propagatingLocally = false;\n }\n });\n addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, ({ detail }) => {\n if (!propagatingLocally) {\n propagateLocally(detail);\n }\n });\n}\nfunction propagateLocally(updateParts) {\n let wasMe = propagatingLocally;\n try {\n propagatingLocally = true;\n globalEvents.storagemutated.fire(updateParts);\n }\n finally {\n propagatingLocally = wasMe;\n }\n}\nlet propagatingLocally = false;\n\nif (typeof BroadcastChannel !== 'undefined') {\n const bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME);\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => {\n if (!propagatingLocally) {\n bc.postMessage(changedParts);\n }\n });\n bc.onmessage = (ev) => {\n if (ev.data)\n propagateLocally(ev.data);\n };\n}\nelse if (typeof self !== 'undefined' && typeof navigator !== 'undefined') {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => {\n try {\n if (!propagatingLocally) {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(STORAGE_MUTATED_DOM_EVENT_NAME, JSON.stringify({\n trig: Math.random(),\n changedParts,\n }));\n }\n if (typeof self['clients'] === 'object') {\n [...self['clients'].matchAll({ includeUncontrolled: true })].forEach((client) => client.postMessage({\n type: STORAGE_MUTATED_DOM_EVENT_NAME,\n changedParts,\n }));\n }\n }\n }\n catch (_a) { }\n });\n addEventListener('storage', (ev) => {\n if (ev.key === STORAGE_MUTATED_DOM_EVENT_NAME) {\n const data = JSON.parse(ev.newValue);\n if (data)\n propagateLocally(data.changedParts);\n }\n });\n const swContainer = self.document && navigator.serviceWorker;\n if (swContainer) {\n swContainer.addEventListener('message', propagateMessageLocally);\n }\n}\nfunction propagateMessageLocally({ data }) {\n if (data && data.type === STORAGE_MUTATED_DOM_EVENT_NAME) {\n propagateLocally(data.changedParts);\n }\n}\n\nDexiePromise.rejectionMapper = mapError;\nsetDebug(debug, dexieStackFrameFilter);\n\nexport { Dexie$1 as Dexie, RangeSet, Dexie$1 as default, liveQuery, mergeRanges, rangesOverlap };\n//# sourceMappingURL=dexie.mjs.map\n","import Dexie, { Table } from \"dexie\";\nimport { getLoggedInUser } from \"@openmrs/esm-api\";\nimport { createGlobalStore } from \"@openmrs/esm-state\";\n\n/**\n * Defines an item queued up in the offline synchronization queue.\n * A `SyncItem` contains both meta information about the item in the sync queue, as well as the\n * actual data to be synchronized (i.e. the item's `content`).\n */\nexport interface SyncItem<T = any> {\n id?: number;\n userId: string;\n type: string;\n content: T;\n createdOn: Date;\n descriptor: QueueItemDescriptor;\n lastError?: {\n name?: string;\n message?: string;\n };\n}\n\n/**\n * Contains information about the sync item which has been provided externally by the caller\n * who added the item to the queue.\n * This information is all optional, but, when provided while enqueuing the item, can be used in other\n * locations to better represent the sync item, e.g. in the UI.\n */\nexport interface QueueItemDescriptor {\n id?: string;\n dependencies?: Array<{\n id: string;\n type: string;\n }>;\n patientUuid?: string;\n displayName?: string;\n}\n\n/**\n * A function which, when invoked, performs the actual client-server synchronization of the given\n * `item` (which is the actual data to be synchronized).\n * The function receives additional `options` which provide additional data that can be used\n * for synchronizing.\n */\nexport type ProcessSyncItem<T> = (\n item: T,\n options: SyncProcessOptions<T>\n) => Promise<any>;\n\n/**\n * Additional data which can be used for synchronizing data in a {@link ProcessSyncItem} function.\n */\nexport interface SyncProcessOptions<T> {\n abort: AbortController;\n userId: string;\n index: number;\n items: Array<T>;\n dependencies: Array<any>;\n}\n\n/**\n * Defines additional options which can optionally be provided when setting up a synchronization callback\n * for a specific synchronization item type.\n * These are not required, but, when set, allow further\n */\ninterface SetupOfflineSyncOptions<T> {\n /**\n * Invoked when the user requests to edit a sync item.\n * The typical behavior for such a callback is to launch a UI which allows editing the content\n * encapsulated by the sync item.\n * @param syncItem The sync item to be edited.\n */\n onBeginEditSyncItem?(syncItem: SyncItem<T>): void;\n}\n\n/**\n * Represents a synchronization handler which has been globally registered by the\n * {@link setupOfflineSync} function.\n * These handlers are used for synchronizing queued data.\n */\ninterface SyncHandler {\n readonly type: string;\n readonly dependsOn: ReadonlyArray<string>;\n readonly process: ProcessSyncItem<unknown>;\n readonly options: Readonly<SetupOfflineSyncOptions<any>>;\n}\n\n/**\n * Represents the data inside the global offline synchronization store.\n * Provides information about a currently ongoing synchronization.\n */\nexport interface OfflineSynchronizationStore {\n synchronization?: {\n totalCount: number;\n pendingCount: number;\n abortController: AbortController;\n };\n}\n\ninterface SyncResultBag {\n [type: string]: Record<string, any>;\n}\n\nclass OfflineDb extends Dexie {\n syncQueue: Table<SyncItem, number>;\n\n constructor() {\n super(\"EsmOffline\");\n\n this.version(3).stores({\n syncQueue: \"++id,userId,type,[userId+type]\",\n });\n\n this.syncQueue = this.table(\"syncQueue\");\n }\n}\n\nconst db = new OfflineDb();\nconst handlers: Record<string, SyncHandler> = {};\n\n/**\n * @internal Temporarily added for esm-offline-tools-app. Please don't use elsewhere.\n */\nexport function getOfflineDb() {\n return db;\n}\n\nconst syncStore = createGlobalStore<OfflineSynchronizationStore>(\n \"offline-synchronization\",\n {}\n);\n\nexport function getOfflineSynchronizationStore() {\n return syncStore;\n}\n\n/**\n * Runs a full synchronization of **all** queued synchronization items.\n */\nexport async function runSynchronization() {\n if (syncStore.getState().synchronization) {\n return;\n }\n\n const totalCount = await db.syncQueue.count();\n const promises: Record<string, Promise<void>> = {};\n const handlerQueue = Object.entries(handlers);\n const maxIter = handlerQueue.length;\n const results: SyncResultBag = {};\n const abortController = new AbortController();\n const notifySyncProgress = () => {\n const synchronization = syncStore.getState().synchronization!;\n\n syncStore.setState({\n synchronization: {\n ...synchronization,\n pendingCount: synchronization!.pendingCount - 1,\n },\n });\n };\n\n try {\n syncStore.setState({\n synchronization: {\n totalCount,\n pendingCount: totalCount,\n abortController,\n },\n });\n\n // we try until the queue is depleted, but no more than queue.length tries.\n for (let iter = 0; iter < maxIter && handlerQueue.length > 0; iter++) {\n for (let i = handlerQueue.length; i--; ) {\n const [name, handler] = handlerQueue[i];\n const deps = handler.dependsOn.map((dep) => promises[dep]);\n\n if (deps.every(Boolean)) {\n results[name] = {};\n await Promise.all(deps);\n\n promises[name] = processHandler(\n handler,\n results,\n abortController,\n notifySyncProgress\n );\n handlerQueue.splice(i, 1);\n }\n }\n }\n\n await Promise.allSettled(Object.values(promises));\n } finally {\n syncStore.setState({ synchronization: undefined });\n }\n}\n\nasync function processHandler(\n { type, dependsOn, process }: SyncHandler,\n results: SyncResultBag,\n abortController: AbortController,\n notifySyncProgress: () => void\n) {\n const table = db.syncQueue;\n const items: Array<[number, unknown, QueueItemDescriptor]> = [];\n const contents: Array<unknown> = [];\n const userId = await getUserId();\n\n await table.where({ type, userId }).each((item, cursor) => {\n items.push([cursor.primaryKey, item.content, item.descriptor]);\n contents.push(item.content);\n });\n\n for (let i = 0; i < items.length; i++) {\n const [key, item, { id, dependencies = [] }] = items[i];\n\n try {\n const result = await process(item, {\n abort: abortController,\n index: i,\n items: contents,\n userId,\n dependencies: dependencies.map(({ id, type }) =>\n dependsOn.includes(type) ? results[type][id] : undefined\n ),\n });\n\n if (id !== undefined) {\n results[type][id] = result;\n }\n\n await table.delete(key);\n } catch (e) {\n await table.update(key, {\n lastError: {\n name: e?.name,\n message: e?.message ?? e?.toString(),\n },\n });\n } finally {\n notifySyncProgress();\n }\n }\n}\n\nasync function getUserId() {\n const user = await getLoggedInUser();\n return user?.uuid || \"*\";\n}\n\n/**\n * Enqueues a new item in the sync queue for a specific user.\n * @param userId The user with whom the sync item should be associated with.\n * @param type The identifying type of the synchronization item.\n * @param content The actual data to be synchronized.\n * @param descriptor An optional descriptor providing additional metadata about the sync item.\n */\nexport async function queueSynchronizationItemFor<T>(\n userId: string,\n type: string,\n content: T,\n descriptor?: QueueItemDescriptor\n) {\n const table = db.syncQueue;\n const targetId = descriptor && descriptor.id;\n\n if (targetId !== undefined) {\n // in case of replacement (i.e., used same ID) we just remove the existing item\n await table\n .where({ type, userId })\n .filter((item) => item?.descriptor.id === targetId)\n .delete();\n }\n\n const id = await table.add({\n type,\n content,\n userId,\n descriptor: descriptor || {},\n createdOn: new Date(),\n });\n\n return id;\n}\n\n/**\n * Enqueues a new item in the sync queue and associates the item with the currently signed in user.\n * @param type The identifying type of the synchronization item.\n * @param content The actual data to be synchronized.\n * @param descriptor An optional descriptor providing additional metadata about the sync item.\n */\nexport async function queueSynchronizationItem<T>(\n type: string,\n content: T,\n descriptor?: QueueItemDescriptor\n) {\n const userId = await getUserId();\n return await queueSynchronizationItemFor(userId, type, content, descriptor);\n}\n\n/**\n * Returns all currently queued up sync items of a given user.\n * @param userId The ID of the user whose synchronization items should be returned.\n * @param type The identifying type of the synchronization items to be returned..\n */\nexport async function getSynchronizationItemsFor<T>(\n userId: string,\n type: string\n) {\n const table = db.syncQueue;\n const items: Array<T> = [];\n\n await table.where({ type, userId }).each((item) => {\n items.push(item.content);\n });\n\n return items;\n}\n\n/**\n * Returns all currently queued up sync items of the currently signed in user.\n * @param type The identifying type of the synchronization items to be returned.\n */\nexport async function getSynchronizationItems<T>(type: string) {\n const userId = await getUserId();\n return await getSynchronizationItemsFor<T>(userId, type);\n}\n\n/**\n * Returns a queued sync item with the given ID or `undefined` if no such item exists.\n * @param id The ID of the requested sync item.\n */\nexport async function getSynchronizationItem<T = any>(\n id: number\n): Promise<SyncItem<T> | undefined> {\n return await db.syncQueue.get(id);\n}\n\n/**\n * Returns whether editing synchronization items of the given type is supported by the currently\n * registered synchronization handlers.\n * @param type The identifying type of the synchronization item which should be edited.\n */\nexport function canBeginEditSynchronizationItemsOfType(type: string) {\n // Editing an item can be requested as long as callback for this flow exists on the associated handler.\n return !!handlers[type]?.options.onBeginEditSyncItem;\n}\n\n/**\n * Triggers an edit flow for the given synchronization item.\n * If this is not possible, throws an error.\n * @param id The ID of the synchronization item to be edited.\n */\nexport async function beginEditSynchronizationItem(id: number) {\n const item = await getSynchronizationItem(id);\n if (!item) {\n throw new Error(`No sync item with the ID ${id} exists.`);\n }\n\n const editCallback = handlers[item.type]?.options.onBeginEditSyncItem;\n if (!editCallback) {\n throw new Error(\n `A sync item with the ID ${id} exists, but the associated handler (if one exists) doesn't support editing the item. You can avoid this error by either verifying that sync items of this type can be edited via the \"canEditSynchronizationItemsOfType(type: string)\" function or alternatively ensure that the synchronizaton handler for sync items of type \"${item.type}\" supports editing items.`\n );\n }\n\n editCallback(item);\n}\n\n/**\n * Deletes a queued up sync item with the given ID.\n * @param id The ID of the synchronization item to be deleted.\n */\nexport async function deleteSynchronizationItem(id: number) {\n await db.syncQueue.delete(id);\n}\n\n/**\n * Registers a new synchronization handler which is able to synchronize data of a specific type.\n * @param type The identifying type of the synchronization items which can be handled by this handler.\n * @param dependsOn An array of other sync item types which must be synchronized before this handler\n * can synchronize its own data. Items of these types are effectively dependencies of the data\n * synchronized by this handler.\n * @param process A function which, when invoked, performs the actual client-server synchronization of the given\n * `item` (which is the actual data to be synchronized).\n * @param options Additional options which can optionally be provided when setting up a synchronization callback\n * for a specific synchronization item type.\n */\nexport function setupOfflineSync<T>(\n type: string,\n dependsOn: Array<string>,\n process: ProcessSyncItem<T>,\n options: SetupOfflineSyncOptions<T> = {}\n) {\n handlers[type] = {\n type,\n dependsOn,\n process,\n options,\n };\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import { v4 } from \"uuid\";\n\nexport const offlineUuidPrefix = \"OFFLINE+\";\n\n/** Generates a UUID-like string which is used for uniquely identifying objects while offline. */\nexport function generateOfflineUuid() {\n return offlineUuidPrefix + v4();\n}\n\n/** Checks whether the given string has the format of an offline UUID generated by {@link generateOfflineUuid} */\nexport function isOfflineUuid(uuid: string) {\n return uuid.startsWith(offlineUuidPrefix);\n}\n","import Dexie, { Table } from \"dexie\";\nimport { createGlobalStore } from \"@openmrs/esm-state\";\n\nexport interface OfflinePatientDataSyncStore {\n /**\n * For each patient ID of the patients whose data is currently made available offline, provides\n * the current data synchronizaton state.\n */\n offlinePatientDataSyncState: Record<string, OfflinePatientDataSyncState>;\n /**\n * Holds the list of currently registered handlers which deal with patients that should be available offline.\n * The key is a unique identifier which, once defined, should never change as it gives identity to\n * the handler registration.\n */\n handlers: Record<string, OfflinePatientDataSyncHandler>;\n}\n\nexport interface OfflinePatientDataSyncState {\n /**\n * The time when this state snapshot was initially created.\n */\n readonly timestamp: Date;\n /**\n * A list of the data sync handler registration identifiers which are still in the process\n * of synchronizing the patient's data.\n */\n readonly syncingHandlers: Array<string>;\n /**\n * A list of the data sync handler registration identifiers which successfully synchronized the\n * patient's data.\n */\n readonly syncedHandlers: Array<string>;\n /**\n * A list of the data sync handler registration identifiers which failed to synchronize the\n * patient's data.\n */\n readonly failedHandlers: Array<string>;\n /**\n * A set of error messages associated with the identifers of the failed handlers.\n */\n readonly errors: Record<string, string>;\n /**\n * Aborts the process of downloading data.\n * @returns `true` if the cancellation could be triggered (that is, if there were any syncing handlers);\n * `false` if not.\n */\n abort(): boolean;\n}\n\nexport interface OfflinePatientDataSyncHandler {\n /**\n * A name of the handler registration which can be displayed to the user.\n * This is ideally translated.\n */\n readonly displayName: string;\n /**\n * A function which is invoked when a patient is added to the app's offline patient cache.\n * Signals to the handler that the patient's data must be made available offline.\n * @param args Arguments which provide data about the patient to be made available offline.\n * @returns A promise which should resolve if all data could be cached and reject when there was an issue\n * caching the data.\n */\n onOfflinePatientAdded(args: OfflinePatientArgs): Promise<void>;\n}\n\nexport interface OfflinePatientArgs {\n /**\n * The UUID of the patient that should be made available offline.\n */\n patientUuid: string;\n /**\n * An {@link AbortSignal} which notifies about the cancellation of the operation.\n */\n signal: AbortSignal;\n}\n\nconst store = createGlobalStore<OfflinePatientDataSyncStore>(\n \"offline-patients\",\n {\n offlinePatientDataSyncState: {},\n handlers: {},\n }\n);\n\nexport function getOfflinePatientDataStore() {\n return store;\n}\n\n/**\n * Attempts to add the specified patient handler registration to the list of offline patient handlers.\n * @param identifier A key which uniquely identifies the registration.\n * @param handler The patient handler registration to be registered.\n * @returns `true` if the registration was successfully made; `false` if another registration with\n * the same identifier has already been registered before.\n */\nexport function registerOfflinePatientHandler(\n identifier: string,\n handler: OfflinePatientDataSyncHandler\n) {\n const state = store.getState();\n store.setState({\n handlers: { ...state.handlers, [identifier]: handler },\n });\n}\n\n/**\n * Notifies all registered offline patient handlers that a new patient must be made available offline.\n * @param args Arguments which provide data about the patient to be made available offline.\n * @returns A promise which resolves once all registered handlers have finished synchronizing.\n */\nexport async function syncOfflinePatientData(patientUuid: string) {\n const handlers = Object.entries(store.getState().handlers);\n const handlerIdentifiers = handlers.map(([identifier]) => identifier);\n const syncedHandlers: Array<string> = [];\n const failedHandlers: Array<string> = [];\n const errors = {};\n const abortController = new AbortController();\n\n await setPatientDataSyncState(patientUuid, {\n timestamp: new Date(),\n syncingHandlers: handlerIdentifiers,\n syncedHandlers,\n failedHandlers,\n errors,\n abort: () => {\n abortController.abort();\n return true;\n },\n });\n\n await Promise.all(\n handlers.map(async ([identifier, handler]) => {\n try {\n await handler.onOfflinePatientAdded({\n patientUuid,\n signal: abortController.signal,\n });\n // eslint-disable-next-line no-console\n console.debug(\n `Offline patient handler ${identifier} successfully synchronized patient data.`\n );\n\n syncedHandlers.push(identifier);\n } catch (e) {\n console.error(\n `Offline patient handler ${identifier} failed. Error: `,\n e\n );\n\n failedHandlers.push(identifier);\n errors[identifier] = e?.message ?? e?.toString() ?? \"\";\n }\n })\n );\n\n await setPatientDataSyncState(patientUuid, {\n timestamp: new Date(),\n syncingHandlers: [],\n syncedHandlers,\n failedHandlers,\n errors,\n abort: () => false,\n });\n}\n\nasync function setPatientDataSyncState(\n patientUuid: string,\n nextState: OfflinePatientDataSyncState\n) {\n const state = store.getState();\n store.setState({\n offlinePatientDataSyncState: {\n ...state.offlinePatientDataSyncState,\n [patientUuid]: nextState,\n },\n });\n\n const db = new OfflinePatientDataDb();\n const existingEntry = await db.offlinePatientDataSyncStates.get({\n patientUuid,\n });\n const nextEntry: OfflinePatientDataSyncStateEntry = {\n id: existingEntry?.id,\n patientUuid,\n state: {\n timestamp: nextState.timestamp,\n syncedHandlers: nextState.syncedHandlers,\n failedHandlers: [\n ...nextState.failedHandlers,\n ...nextState.syncingHandlers,\n ],\n errors: nextState.errors,\n },\n };\n\n await db.offlinePatientDataSyncStates.put(nextEntry);\n}\n\nexport async function loadPersistedPatientDataSyncState() {\n const db = new OfflinePatientDataDb();\n const persistedStates = await db.offlinePatientDataSyncStates.toArray();\n const nextState = store.getState().offlinePatientDataSyncState;\n\n for (const entry of persistedStates) {\n nextState[entry.patientUuid] = {\n ...entry.state,\n syncingHandlers: [],\n abort: () => false,\n };\n }\n\n store.setState({ offlinePatientDataSyncState: nextState });\n}\n\nclass OfflinePatientDataDb extends Dexie {\n offlinePatientDataSyncStates: Table<OfflinePatientDataSyncStateEntry, number>;\n\n constructor() {\n super(\"EsmOfflinePatientData\");\n\n this.version(1).stores({\n offlinePatientDataSyncStates: \"++id,&patientUuid\",\n });\n\n this.offlinePatientDataSyncStates = this.table(\n \"offlinePatientDataSyncStates\"\n );\n }\n}\n\ntype PersistedOfflinePatientDataSyncState = Omit<\n Omit<OfflinePatientDataSyncState, \"syncingHandlers\">,\n \"abort\"\n>;\n\ninterface OfflinePatientDataSyncStateEntry {\n id?: number;\n patientUuid: string;\n state: PersistedOfflinePatientDataSyncState;\n}\n"],"names":["resolveDirectory","exports","rootDirLevel","meta","url","console","error","Error","urlString","rootDirectoryLevel","a","document","createElement","href","pathname","numDirsProcessed","index","length","finalPath","slice","protocol","host","Number","isInteger","module","__WEBPACK_EXTERNAL_MODULE__766__","__WEBPACK_EXTERNAL_MODULE__685__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","y","__system_context__","d","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","this","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","scriptUrl","importScripts","location","currentScript","src","scripts","getElementsByTagName","replace","p","autoPublicPath","self","_","n","t","Promise","MessageChannel","port1","onmessage","data","postMessage","port2","Array","iterator","isArray","toString","constructor","name","from","test","i","done","TypeError","next","bind","promise","resolve","reject","URL","u","type","assign","then","c","f","s","v","nn","tn","rn","en","on","un","an","Set","cn","fn","installing","scriptURL","sn","performance","now","vn","removeEventListener","hn","add","addEventListener","ln","target","state","sw","isExternal","originalEvent","mn","isUpdate","dispatchEvent","wn","setTimeout","waiting","clearTimeout","dn","navigator","serviceWorker","controller","gn","ports","source","getSW","has","arguments","apply","create","__proto__","l","w","register","immediate","readyState","Boolean","yn","pn","bn","once","wasWaitingBeforeRegister","update","messageSW","messageSkipWaiting","configurable","writable","Pn","Map","Sn","delete","set","workboxRegistration","registerOmrsServiceWorker","registerOptions","warn","wb","Workbox","getOmrsServiceWorker","omrsOfflineResponseBodyHttpHeaderName","omrsOfflineResponseStatusHttpHeaderName","omrsOfflineCachingStrategyHttpHeaderName","async","messageOmrsServiceWorker","message","success","result","networkRequestFailedEventName","dispatchNetworkRequestFailed","CustomEvent","detail","subscribeNetworkRequestFailed","cb","handler","ev","patchXMLHttpRequest","send","XMLHttpRequest","args","_global","global","keys","extend","extension","forEach","getProto","getPrototypeOf","_hasOwn","hasOwn","props","proto","Reflect","ownKeys","setProp","functionOrGetSet","options","derive","Child","Parent","getOwnPropertyDescriptor","getPropertyDescriptor","_slice","start","end","override","origFunc","overridedFactory","assert","b","asap$1","setImmediate","arrayToObject","array","extractor","reduce","item","nameAndValue","getByKeyPath","keyPath","rv","val","push","period","indexOf","innerObj","substr","setByKeyPath","isFrozen","currentKeyPath","remainingKeyPath","isNaN","parseInt","splice","shallowClone","m","concat","flatten","intrinsicTypeNames","split","map","num","filter","intrinsicTypes","x","circularRefs","deepClone","any","WeakMap","innerDeepClone","iteratorSymbol","getIteratorOf","NO_CHAR_ARRAY","getArrayOf","arrayLike","it","isAsyncFunction","debug","setDebug","libraryFilter","NEEDS_THROW_FOR_STACK","stack","getErrorWithStack","prettyStack","exception","numIgnoredFrames","frame","join","idbDomErrorNames","errorList","defaultTexts","VersionChanged","DatabaseClosed","Abort","TransactionInactive","MissingAPI","DexieError","msg","_e","getMultiErrorMessage","failures","ModifyError","successCount","failedKeys","BulkError","pos","failuresByPos","_stack","errnames","BaseException","exceptions","fullName","msgOrInner","inner","Syntax","SyntaxError","Type","Range","RangeError","exceptionMap","fullNameExceptions","nop","mirror","pureFunctionChain","f1","f2","callBoth","on1","on2","hookCreatingChain","res","onsuccess","onerror","res2","hookDeletingChain","hookUpdatingChain","modifications","reverseStoppableEventChain","promisableChain","thiz","INTERNAL","resolvedNativePromise","nativePromiseProto","resolvedGlobalPromise","globalP","crypto","subtle","nativeP","digest","Uint8Array","nativePromiseThen","NativePromise","patchGlobalPromise","stack_being_generated","schedulePhysicalTick","physicalTick","MutationObserver","hiddenDiv","observe","attributes","setAttribute","asap","callback","microtickQueue","needsNewPhysicalTick","isOutsideMicroTick","unhandledErrors","rejectingErrors","currentFulfiller","rejectionMapper","globalPSD","id","ref","unhandleds","onunhandled","globalError","pgp","env","finalize","uh","PSD","numScheduledCalls","tickFinalizers","DexiePromise","_listeners","onuncatched","_lib","psd","_PSD","_stackHolder","_prev","_numPrev","_state","_value","handleRejection","executePromiseTask","thenProp","microTaskId","totalEchoes","onFulfilled","onRejected","possibleAwait","cleanup","decrementExpectedAwaits","propagateToListener","Listener","nativeAwaitCompatibleWrap","linkToPreviousPromise","zone","shouldExecuteTick","beginMicroTickScope","_then","propagateAllListeners","endMicroTickScope","ex","reason","_promise","origProp","tryCatch","some","addPossiblyUnhandledError","listeners","len","finalizePhysicalTick","listener","callListener","ret","markErrorAsHandled","getStack","stacks","limit","errorName","failure","prev","numPrev","wasRootExec","callbacks","unhandledErrs","finalizers","PromiseReject","wrap","errorCatcher","outerScope","switchToZone","catch","err","finally","onFinally","timeout","ms","Infinity","handle","Timeout","snapShot","all","values","onPossibleParallellAsync","remaining","race","newPSD","newScope","usePSD","scheduler","follow","zoneProps","finalizer","run_at_end_of_this_or_next_physical_tick","allSettled","possiblePromises","results","status","AggregateError","task","awaits","echoes","taskCounter","zoneStack","zoneEchoes","zone_id_counter","a1","a2","parent","globalEnv","PromiseProp","nthen","getPatchedPromiseThen","gthen","incrementExpectedAwaits","possiblePromise","rejection","zoneEnterEcho","targetZone","zoneLeaveEcho","pop","bEnteringZone","currentZone","enqueueNativeMicroTask","GlobalPromise","targetEnv","a3","job","outerZone","origThen","onResolved","UNHANDLEDREJECTION","event","eventData","createEvent","initEvent","PromiseRejectionEvent","onunhandledrejection","defaultPrevented","tempTransaction","db","mode","storeNames","idbdb","openComplete","letThrough","_vip","trans","_createTransaction","_dbSchema","_completion","dbOpenError","isBeingOpened","_options","autoOpen","open","dbReadyPromise","DEXIE_VERSION","maxString","String","fromCharCode","minKey","INVALID_KEY_ARGUMENT","STRING_EXPECTED","connections","isIEOrEdge","userAgent","hasIEDeleteObjectStoreBug","hangsOnDeleteLargeKeyRange","dexieStackFrameFilter","DBNAMES_DB","READONLY","READWRITE","combine","filter1","filter2","AnyRange","lower","lowerOpen","upper","upperOpen","workaroundForUndefinedPrimKey","Table","_trans","writeLocked","_tx","tableName","checkTableInTransaction","schema","NotFound","idbtrans","transless","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","idx","filterFunction","prevIndex","prevFilterFn","multi","toCollection","and","count","thenShortcut","offset","numRows","each","toArray","Collection","orderBy","reverse","mapToClass","mappedClass","readHook","unsubscribe","defineClass","content","auto","objToAdd","mutate","numFailures","lastResult","keyOrObject","modify","InvalidArgument","_a","put","clear","range","bulkGet","getMany","bulkAdd","objects","keysOrOptions","wantResults","allKeys","numObjects","objectsToAdd","bulkPut","objectsToPut","bulkDelete","numKeys","Events","ctx","evs","eventName","subscriber","subscribe","addEventType","chainFunction","defaultFunction","addConfiguredEvents","context","subscribers","cfg","makeClassConstructor","isPlainKeyRange","ignoreLimitFilter","algorithm","or","justLimit","replayFilter","addFilter","addReplayFilter","factory","isLimitFilter","curr","getIndexOrStore","coreSchema","isPrimKey","primaryKey","getIndexByKeyPath","Schema","openCursor","coreTable","keysOnly","dir","unique","query","iter","coreTrans","union","cursor","advance","stop","fail","_iterate","iterate","valueMapper","cursorPromise","mappedFn","wrappedFn","continue","advancer","ta","tb","NaN","al","bl","compareUint8Arrays","getUint8Array","compareArrays","ArrayBuffer","isView","tsTag","buffer","byteOffset","byteLength","_read","_ctx","table","_write","_addAlgorithm","clone","raw","Math","min","sortBy","parts","lastPart","lastIndex","getval","order","sorter","aVal","bVal","sort","offsetLeft","rowsLeft","until","bIncludeStopEntry","last","isMatch","indexName","_ondirectionchange","desc","eachKey","eachUniqueKey","eachPrimaryKey","primaryKeys","uniqueKeys","firstKey","lastKey","distinct","strKey","found","changes","modifyer","anythingModified","outbound","extractKey","modifyChunkSize","totalFailures","applyMutateResult","expectedCount","nextChunk","cache","addValues","putValues","putKeys","deleteKeys","origValue","criteria","deleteCallback","changeSpec","coreRange","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","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","eventRejectHandler","preventDefault","stopPropagation","DEXIE_STORAGE_MUTATED_EVENT_NAME","STORAGE_MUTATED_DOM_EVENT_NAME","globalEvents","Transaction","_lock","_reculock","lockOwnerFor","_unlock","_blockedFuncs","_locked","fnAndPSD","shift","OpenFailed","active","transaction","durability","chromeTransactionDurability","_reject","onabort","oncomplete","_resolve","storagemutated","bWriteLock","ReadOnly","_root","waitFor","promiseLike","root","_waitingFor","_waitingQueue","store","objectStore","spin","_spinCount","currentWaitPromise","abort","memoizedTables","_memoizedTables","tableSchema","transactionBoundTable","createIndexSpec","nameFromKeyPath","createTableSchema","getMaxKey","IdbKeyRange","only","getKeyExtractor","getSinglePathKeyExtractor","arrayify","_id_counter","getKeyPathAlias","generateMiddlewareStacks","_novip","tmpTrans","middlewares","IDBKeyRange","dbcore","stackImpl","down","createMiddlewareStack","makeIDBKeyRange","upperBound","lowerBound","bound","hasGetAll","tables","objectStoreNames","autoIncrement","indexByKeyPath","isPrimaryKey","indexNames","multiEntry","extractSchema","isAddOrPut","req","reqs","errorHandler","args1","args2","keyCount","callbackCount","successHandler","_pos","request","nonInfinitLimit","idbKeyRange","getAll","getAllKeys","openKeyCursor","___id","_cursorContinue","_cursorContinuePrimaryKey","continuePrimaryKey","_cursorAdvance","doThrowCursorIsStopped","gotOne","iterationPromise","resolveIteration","rejectIteration","guardedCallback","createDbCoreTable","tableMap","MIN_KEY","MAX_KEY","createDBCore","createMiddlewareStacks","_middlewares","tbl","setApiOnPlace","objs","tableNames","dbschema","propDesc","removeTablesApi","lowerVersionFirst","_cfg","version","getSchemaDiff","oldSchema","newSchema","diff","del","change","oldDef","newDef","def","recreate","oldIndexes","newIndexes","idxName","oldIdx","newIdx","createTable","createObjectStore","addIndex","createIndex","buildGlobalSchema","globalSchema","storeName","j","idbindex","adjustToExistingIndexNames","_hasGetAll","dexieName","indexSpec","WorkerGlobalScope","Version","_parseStoresSpec","stores","outSchema","indexNum","trim","storesSource","versions","_versions","storesSpec","_allTables","_storeNames","upgrade","upgradeFunction","contentUpgrade","getDbNamesTable","dbNamesDB","Dexie$1","addons","dbnames","hasDatabasesNative","databases","vip","idbReady","intervalId","userAgentData","tryIdb","setInterval","clearInterval","dexieOpen","openCanceller","throwIfCancelled","resolveDbReady","dbReadyResolve","upgradeTransaction","wasCreated","dbName","autoSchema","round","verno","onblocked","_fireOnBlocked","onupgradeneeded","allowEmptyDB","close","delreq","deleteDatabase","NoSuchDatabase","oldVer","oldVersion","pow","idbUpgradeTrans","rejectTransaction","populate","queue","anyContentUpgraderHasRun","versToRun","tuple","Upgrade","deleteIndex","upgradeSchema","contentUpgradeIsAsync","returnValue","promiseFollowed","decrementor","deleteObjectStore","deleteRemovedTables","runQueue","contains","updateTablesAndIndexes","runUpgraders","readGlobalSchema","ch","verifyInstalledSchema","onversionchange","vcFired","onclose","_onDatabaseCreated","onReadyBeingFired","ready","fireRemainders","remainders","_close","awaitIterator","callNext","onSuccess","step","onError","throw","getNext","extractTransactionArgs","_tableArgs_","scopeFunc","enterTransactionScope","parentTransaction","scopeFuncIsAsync","PrematureCommit","pad","virtualIndexMiddleware","level","indexLookup","allVirtualIndexes","addVirtualIndexes","keyTail","lowLevelIndex","keyPathAlias","indexList","keyLength","isVirtual","virtualIndex","translateRequest","virtualCursor","createVirtualCursor","getObjectDiff","prfx","ap","bp","apTypeName","hooksMiddleware","downCore","downTable","tableMiddleware","dxTrans","deleting","creating","updating","addPutOrDelete","deleteNextChunk","deleteRange","getEffectiveKeys","effectiveKeys","getExistingValues","existingValues","contexts","existingValue","generatedPrimaryKey","objectDiff","additionalChanges","requestedValue","getFromTransactionCache","cacheExistingValuesMiddleware","cachedResult","isEmptyRange","node","RangeSet","fromOrTree","to","addRange","left","right","rebalance","rightWasCutOff","mergeRanges","newSet","_addRangeSet","getRangeSetIterator","keyProvided","up","_b","rootClone","oldRootRight","computeDepth","rangeSet","addKey","addKeys","observabilityMiddleware","FULL_RANGE","tableClone","mutatedParts","getRangeSet","part","pkRangeSet","delsRangeSet","newObjs","oldCache","oldObjs","addKeyOrKeys","oldKey","newKey","trackAffectedIndexes","getRange","readSubscribers","method","subscr","queriedIndex","queriedRanges","keysPromise","resultingKeys","pKeys","wantValues","pkey","deps","dependencies","cancelOpen","bSticky","keyRangeGenerator","keyRange","whereCtx","readingHook","createCollectionConstructor","createTableConstructor","complete","wasActive","createTransactionConstructor","versionNumber","createVersionConstructor","orCollection","_IDBKeyRange","createWhereClauseConstructor","newVersion","use","addon","versionInstance","_whenReady","unuse","mw","hasArguments","doDelete","_onDatabaseDeleted","backendDB","isOpen","hasBeenClosed","hasFailed","dynamicallyOpened","_transaction","onlyIfCompatible","idbMode","SubTransaction","enterTransaction","InvalidTable","symbolObservable","observable","Observable","_subscribe","extendObservabilitySet","domDeps","mozIndexedDB","webkitIndexedDB","msIndexedDB","webkitIDBKeyRange","Dexie","propagateLocally","updateParts","wasMe","propagatingLocally","databaseName","exists","getDatabaseNames","infos","info","ignoreTransaction","generatorFn","spawn","currentTransaction","promiseOrFunction","optionalTimeout","liveQuery","querier","observer","closed","accumMuts","currentObs","subscription","mutationListener","querying","startedListening","shouldNotify","rangeSet1","rangeSet2","i1","nextResult1","i2","nextResult2","rangesOverlap","doQuery","exec","execute","delByKeyPath","semVer","maxKey","updatedParts","initCustomEvent","BroadcastChannel","bc","changedParts","localStorage","setItem","trig","random","matchAll","includeUncontrolled","client","parse","newValue","swContainer","domError","super","syncQueue","handlers","getOfflineDb","syncStore","createGlobalStore","getOfflineSynchronizationStore","runSynchronization","getState","synchronization","totalCount","promises","handlerQueue","entries","maxIter","abortController","AbortController","notifySyncProgress","setState","pendingCount","dependsOn","dep","processHandler","process","items","contents","userId","getUserId","descriptor","includes","lastError","getLoggedInUser","uuid","queueSynchronizationItemFor","targetId","createdOn","Date","queueSynchronizationItem","getSynchronizationItemsFor","getSynchronizationItems","getSynchronizationItem","canBeginEditSynchronizationItemsOfType","onBeginEditSyncItem","beginEditSynchronizationItem","editCallback","deleteSynchronizationItem","setupOfflineSync","getRandomValues","rnds8","rng","msCrypto","byteToHex","buf","rnds","arr","offlineUuidPrefix","generateOfflineUuid","v4","isOfflineUuid","offlinePatientDataSyncState","getOfflinePatientDataStore","registerOfflinePatientHandler","identifier","syncOfflinePatientData","patientUuid","handlerIdentifiers","syncedHandlers","failedHandlers","errors","setPatientDataSyncState","timestamp","syncingHandlers","onOfflinePatientAdded","signal","nextState","OfflinePatientDataDb","nextEntry","offlinePatientDataSyncStates","loadPersistedPatientDataSyncState","persistedStates","entry"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"openmrs-esm-offline.js","mappings":"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","sources":["webpack://@openmrs/esm-offline/../../../node_modules/systemjs-webpack-interop/auto-public-path/auto-public-path.js","webpack://@openmrs/esm-offline/../../../node_modules/systemjs-webpack-interop/public-path.js","webpack://@openmrs/esm-offline/external system \"@openmrs/esm-api\"","webpack://@openmrs/esm-offline/external system \"@openmrs/esm-state\"","webpack://@openmrs/esm-offline/webpack/bootstrap","webpack://@openmrs/esm-offline/webpack/runtime/__system_context__","webpack://@openmrs/esm-offline/webpack/runtime/define property getters","webpack://@openmrs/esm-offline/webpack/runtime/global","webpack://@openmrs/esm-offline/webpack/runtime/hasOwnProperty shorthand","webpack://@openmrs/esm-offline/webpack/runtime/make namespace object","webpack://@openmrs/esm-offline/webpack/runtime/publicPath","webpack://@openmrs/esm-offline/../../../node_modules/systemjs-webpack-interop/auto-public-path/1.js","webpack://@openmrs/esm-offline/../../../node_modules/workbox-window/build/workbox-window.prod.es5.mjs","webpack://@openmrs/esm-offline/./src/service-worker.ts","webpack://@openmrs/esm-offline/./src/service-worker-http-headers.ts","webpack://@openmrs/esm-offline/./src/service-worker-messaging.ts","webpack://@openmrs/esm-offline/./src/events.ts","webpack://@openmrs/esm-offline/./src/mode.ts","webpack://@openmrs/esm-offline/./src/patches.ts","webpack://@openmrs/esm-offline/../../../node_modules/dexie/dist/modern/dexie.mjs","webpack://@openmrs/esm-offline/./src/sync.ts","webpack://@openmrs/esm-offline/./node_modules/uuid/dist/esm-browser/rng.js","webpack://@openmrs/esm-offline/./node_modules/uuid/dist/esm-browser/regex.js","webpack://@openmrs/esm-offline/./node_modules/uuid/dist/esm-browser/validate.js","webpack://@openmrs/esm-offline/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://@openmrs/esm-offline/./node_modules/uuid/dist/esm-browser/v4.js","webpack://@openmrs/esm-offline/./src/uuid.ts","webpack://@openmrs/esm-offline/./src/offline-patient-data.ts"],"sourcesContent":["const resolveDirectory = require(\"../public-path\").resolveDirectory;\n\nexports.autoPublicPath = function autoPublicPath(rootDirLevel) {\n if (!rootDirLevel) {\n rootDirLevel = 1;\n }\n\n if (typeof __webpack_public_path__ !== \"undefined\") {\n if (typeof __system_context__ === \"undefined\") {\n throw Error(\n \"systemjs-webpack-interop requires webpack@>=5.0.0-beta.15 and output.libraryTarget set to 'system'\"\n );\n }\n\n if (!__system_context__.meta || !__system_context__.meta.url) {\n console.error(\"__system_context__\", __system_context__);\n throw Error(\n \"systemjs-webpack-interop was provided an unknown SystemJS context. Expected context.meta.url, but none was provided\"\n );\n }\n\n __webpack_public_path__ = resolveDirectory(\n __system_context__.meta.url,\n rootDirLevel\n );\n }\n};\n","exports.setPublicPath = function setPublicPath(\n systemjsModuleName,\n rootDirectoryLevel\n) {\n if (!rootDirectoryLevel) {\n rootDirectoryLevel = 1;\n }\n if (\n typeof systemjsModuleName !== \"string\" ||\n systemjsModuleName.trim().length === 0\n ) {\n throw Error(\n \"systemjs-webpack-interop: setPublicPath(systemjsModuleName) must be called with a non-empty string 'systemjsModuleName'\"\n );\n }\n\n if (\n typeof rootDirectoryLevel !== \"number\" ||\n rootDirectoryLevel <= 0 ||\n isNaN(rootDirectoryLevel) ||\n !isInteger(rootDirectoryLevel)\n ) {\n throw Error(\n \"systemjs-webpack-interop: setPublicPath(systemjsModuleName, rootDirectoryLevel) must be called with a positive integer 'rootDirectoryLevel'\"\n );\n }\n\n var moduleUrl;\n try {\n moduleUrl = window.System.resolve(systemjsModuleName);\n if (!moduleUrl) {\n throw Error();\n }\n } catch (err) {\n throw Error(\n \"systemjs-webpack-interop: There is no such module '\" +\n systemjsModuleName +\n \"' in the SystemJS registry. Did you misspell the name of your module?\"\n );\n }\n\n __webpack_public_path__ = resolveDirectory(moduleUrl, rootDirectoryLevel);\n};\n\nfunction resolveDirectory(urlString, rootDirectoryLevel) {\n // Our friend IE11 doesn't support new URL()\n // https://github.com/single-spa/single-spa/issues/612\n // https://gist.github.com/jlong/2428561\n\n var a = document.createElement(\"a\");\n a.href = urlString;\n\n var pathname = a.pathname[0] === \"/\" ? a.pathname : \"/\" + a.pathname;\n var numDirsProcessed = 0,\n index = pathname.length;\n while (numDirsProcessed !== rootDirectoryLevel && index >= 0) {\n var char = pathname[--index];\n if (char === \"/\") {\n numDirsProcessed++;\n }\n }\n\n if (numDirsProcessed !== rootDirectoryLevel) {\n throw Error(\n \"systemjs-webpack-interop: rootDirectoryLevel (\" +\n rootDirectoryLevel +\n \") is greater than the number of directories (\" +\n numDirsProcessed +\n \") in the URL path \" +\n urlString\n );\n }\n\n var finalPath = pathname.slice(0, index + 1);\n\n return a.protocol + \"//\" + a.host + finalPath;\n}\n\nexports.resolveDirectory = resolveDirectory;\n\n// borrowed from https://github.com/parshap/js-is-integer/blob/master/index.js\nvar isInteger =\n Number.isInteger ||\n function isInteger(val) {\n return typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n };\n","module.exports = __WEBPACK_EXTERNAL_MODULE__766__;","module.exports = __WEBPACK_EXTERNAL_MODULE__685__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.y = __system_context__;","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","const autoPublicPath = require(\"./auto-public-path\").autoPublicPath;\n\nautoPublicPath(1);\n","try{self[\"workbox:window:6.4.1\"]&&_()}catch(n){}function n(n,t){return new Promise((function(r){var e=new MessageChannel;e.port1.onmessage=function(n){r(n.data)},n.postMessage(t,[e.port2])}))}function t(n,t){for(var r=0;r<t.length;r++){var e=t[r];e.enumerable=e.enumerable||!1,e.configurable=!0,\"value\"in e&&(e.writable=!0),Object.defineProperty(n,e.key,e)}}function r(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=new Array(t);r<t;r++)e[r]=n[r];return e}function e(n,t){var e;if(\"undefined\"==typeof Symbol||null==n[Symbol.iterator]){if(Array.isArray(n)||(e=function(n,t){if(n){if(\"string\"==typeof n)return r(n,t);var e=Object.prototype.toString.call(n).slice(8,-1);return\"Object\"===e&&n.constructor&&(e=n.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(n):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?r(n,t):void 0}}(n))||t&&n&&\"number\"==typeof n.length){e&&(n=e);var i=0;return function(){return i>=n.length?{done:!0}:{done:!1,value:n[i++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}return(e=n[Symbol.iterator]()).next.bind(e)}try{self[\"workbox:core:6.4.1\"]&&_()}catch(n){}var i=function(){var n=this;this.promise=new Promise((function(t,r){n.resolve=t,n.reject=r}))};function o(n,t){var r=location.href;return new URL(n,r).href===new URL(t,r).href}var u=function(n,t){this.type=n,Object.assign(this,t)};function a(n,t,r){return r?t?t(n):n:(n&&n.then||(n=Promise.resolve(n)),t?n.then(t):n)}function c(){}var f={type:\"SKIP_WAITING\"};function s(n,t){if(!t)return n&&n.then?n.then(c):Promise.resolve()}var v=function(r){var e,c;function v(n,t){var e,c;return void 0===t&&(t={}),(e=r.call(this)||this).nn={},e.tn=0,e.rn=new i,e.en=new i,e.on=new i,e.un=0,e.an=new Set,e.cn=function(){var n=e.fn,t=n.installing;e.tn>0||!o(t.scriptURL,e.sn.toString())||performance.now()>e.un+6e4?(e.vn=t,n.removeEventListener(\"updatefound\",e.cn)):(e.hn=t,e.an.add(t),e.rn.resolve(t)),++e.tn,t.addEventListener(\"statechange\",e.ln)},e.ln=function(n){var t=e.fn,r=n.target,i=r.state,o=r===e.vn,a={sw:r,isExternal:o,originalEvent:n};!o&&e.mn&&(a.isUpdate=!0),e.dispatchEvent(new u(i,a)),\"installed\"===i?e.wn=self.setTimeout((function(){\"installed\"===i&&t.waiting===r&&e.dispatchEvent(new u(\"waiting\",a))}),200):\"activating\"===i&&(clearTimeout(e.wn),o||e.en.resolve(r))},e.dn=function(n){var t=e.hn,r=t!==navigator.serviceWorker.controller;e.dispatchEvent(new u(\"controlling\",{isExternal:r,originalEvent:n,sw:t,isUpdate:e.mn})),r||e.on.resolve(t)},e.gn=(c=function(n){var t=n.data,r=n.ports,i=n.source;return a(e.getSW(),(function(){e.an.has(i)&&e.dispatchEvent(new u(\"message\",{data:t,originalEvent:n,ports:r,sw:i}))}))},function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];try{return Promise.resolve(c.apply(this,n))}catch(n){return Promise.reject(n)}}),e.sn=n,e.nn=t,navigator.serviceWorker.addEventListener(\"message\",e.gn),e}c=r,(e=v).prototype=Object.create(c.prototype),e.prototype.constructor=e,e.__proto__=c;var h,l,m,w=v.prototype;return w.register=function(n){var t=(void 0===n?{}:n).immediate,r=void 0!==t&&t;try{var e=this;return function(n,t){var r=n();if(r&&r.then)return r.then(t);return t(r)}((function(){if(!r&&\"complete\"!==document.readyState)return s(new Promise((function(n){return window.addEventListener(\"load\",n)})))}),(function(){return e.mn=Boolean(navigator.serviceWorker.controller),e.yn=e.pn(),a(e.bn(),(function(n){e.fn=n,e.yn&&(e.hn=e.yn,e.en.resolve(e.yn),e.on.resolve(e.yn),e.yn.addEventListener(\"statechange\",e.ln,{once:!0}));var t=e.fn.waiting;return t&&o(t.scriptURL,e.sn.toString())&&(e.hn=t,Promise.resolve().then((function(){e.dispatchEvent(new u(\"waiting\",{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),e.hn&&(e.rn.resolve(e.hn),e.an.add(e.hn)),e.fn.addEventListener(\"updatefound\",e.cn),navigator.serviceWorker.addEventListener(\"controllerchange\",e.dn),e.fn}))}))}catch(n){return Promise.reject(n)}},w.update=function(){try{return this.fn?s(this.fn.update()):void 0}catch(n){return Promise.reject(n)}},w.getSW=function(){return void 0!==this.hn?Promise.resolve(this.hn):this.rn.promise},w.messageSW=function(t){try{return a(this.getSW(),(function(r){return n(r,t)}))}catch(n){return Promise.reject(n)}},w.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&n(this.fn.waiting,f)},w.pn=function(){var n=navigator.serviceWorker.controller;return n&&o(n.scriptURL,this.sn.toString())?n:void 0},w.bn=function(){try{var n=this;return function(n,t){try{var r=n()}catch(n){return t(n)}if(r&&r.then)return r.then(void 0,t);return r}((function(){return a(navigator.serviceWorker.register(n.sn,n.nn),(function(t){return n.un=performance.now(),t}))}),(function(n){throw n}))}catch(n){return Promise.reject(n)}},h=v,(l=[{key:\"active\",get:function(){return this.en.promise}},{key:\"controlling\",get:function(){return this.on.promise}}])&&t(h.prototype,l),m&&t(h,m),v}(function(){function n(){this.Pn=new Map}var t=n.prototype;return t.addEventListener=function(n,t){this.Sn(n).add(t)},t.removeEventListener=function(n,t){this.Sn(n).delete(t)},t.dispatchEvent=function(n){n.target=this;for(var t,r=e(this.Sn(n.type));!(t=r()).done;){(0,t.value)(n)}},t.Sn=function(n){return this.Pn.has(n)||this.Pn.set(n,new Set),this.Pn.get(n)},n}());export{v as Workbox,u as WorkboxEvent,n as messageSW};\n//# sourceMappingURL=workbox-window.prod.es5.mjs.map\n","import { Workbox } from \"workbox-window\";\n\nlet workboxRegistration: Promise<Workbox> | undefined = undefined;\n\n/**\n * If not yet registered, registers the application's global Service Worker.\n * Throws if registration is not possible.\n * @param scriptURL The service worker script associated with this instance.\n * @param [registerOptions] The service worker options associated with this instance.\n * @returns A promise which resolves to the registered {@link Workbox} instance which manages the SW.\n */\nexport function registerOmrsServiceWorker(\n scriptUrl: string,\n registerOptions?: object\n) {\n if (workboxRegistration !== undefined) {\n console.warn(\n `The application's Service Worker has already been registered. The new service worker at ${scriptUrl} will not be registered.`\n );\n return workboxRegistration;\n }\n\n if (!(\"serviceWorker\" in navigator)) {\n throw new Error(\n \"Registering the Service Worker is not possible due to missing browser capabilities.\"\n );\n }\n\n const wb = new Workbox(scriptUrl, registerOptions);\n workboxRegistration = wb.register().then(() => wb);\n return workboxRegistration;\n}\n\n/**\n * If a service worker has been registered, returns a promise that resolves to a {@link Workbox}\n * instance which is used by the application to manage that service worker.\n *\n * If no service worker has been registered (e.g. when the application is built without offline specific features),\n * returns a promise which immediately resolves to `undefined`.\n * @returns A promise which either resolves to `undefined` or to the app's {@link Workbox} instance.\n */\nexport function getOmrsServiceWorker(): Promise<Workbox | undefined> {\n return workboxRegistration ?? Promise.resolve(undefined);\n}\n","export const omrsOfflineResponseBodyHttpHeaderName =\n \"x-omrs-offline-response-body\";\nexport const omrsOfflineResponseStatusHttpHeaderName =\n \"x-omrs-offline-response-status\";\nexport const omrsOfflineCachingStrategyHttpHeaderName =\n \"x-omrs-offline-caching-strategy\";\n\n/**\n *\n *\n * * `cache-or-network`: The default strategy, equal to the absence of this header.\n * The SW attempts to resolve the request via the network, but falls back to the cache if required.\n * The service worker decides the strategy to be used.\n * * `network-first`: See https://developers.google.com/web/tools/workbox/modules/workbox-strategies#network_first_network_falling_back_to_cache.\n */\nexport type OmrsOfflineCachingStrategy =\n | \"network-only-or-cache-only\"\n | \"network-first\";\n\n/**\n * Defines the keys of the custom headers which can be appended to an HTTP request.\n * HTTP requests with these headers are handled in a special way by the SPA's service worker.\n */\nexport type OmrsOfflineHttpHeaders = {\n /**\n * If the client is offline and the request cannot be read from the cache (i.e. if there is no way\n * to receive any kind of data for this request), the service worker will return a response with\n * the body in this header.\n */\n [omrsOfflineResponseBodyHttpHeaderName]?: string;\n /**\n * If the client is offline and the request cannot be read from the cache (i.e. if there is no way\n * to receive any kind of data for this request), the service worker will return a response with\n * the status code defined in this header.\n */\n [omrsOfflineResponseStatusHttpHeaderName]?: `${number}`;\n /**\n * Instructs the service worker to use a specific caching strategy for this request.\n */\n [omrsOfflineCachingStrategyHttpHeaderName]?: OmrsOfflineCachingStrategy;\n};\n\nexport type OmrsOfflineHttpHeaderNames = keyof OmrsOfflineHttpHeaders;\n","import type { ImportMap } from \"@openmrs/esm-globals\";\nimport { OmrsOfflineCachingStrategy } from \"./service-worker-http-headers\";\nimport { getOmrsServiceWorker } from \"./service-worker\";\n\n/**\n * Sends the specified message to the application's service worker.\n * @param message The message to be sent.\n * @returns A promise which completes when the message has been successfully processed by the Service Worker.\n */\nexport async function messageOmrsServiceWorker(\n message: KnownOmrsServiceWorkerMessages\n): Promise<MessageServiceWorkerResult<any>> {\n const sw = await getOmrsServiceWorker();\n return sw\n ? await sw.messageSW(message)\n : {\n success: false,\n result: undefined,\n error:\n \"No service worker has been registered. This is typically the case when the application has been built without offline-related features.\",\n };\n}\n\nexport interface OmrsServiceWorkerMessage<\n MessageTypeTypeIdentifier extends string\n> {\n type: MessageTypeTypeIdentifier;\n}\n\nexport interface OnImportMapChangedMessage\n extends OmrsServiceWorkerMessage<\"onImportMapChanged\"> {\n importMap: ImportMap;\n}\n\nexport interface ClearDynamicRoutesMessage\n extends OmrsServiceWorkerMessage<\"clearDynamicRoutes\"> {}\n\nexport interface RegisterDynamicRouteMessage\n extends OmrsServiceWorkerMessage<\"registerDynamicRoute\"> {\n pattern?: string;\n url?: string;\n strategy?: OmrsOfflineCachingStrategy;\n}\n\nexport type KnownOmrsServiceWorkerMessages =\n | OnImportMapChangedMessage\n | ClearDynamicRoutesMessage\n | RegisterDynamicRouteMessage;\n\nexport interface MessageServiceWorkerResult<T> {\n success: boolean;\n result?: T;\n error?: string;\n}\n","import { NetworkRequestFailedEvent } from \"./service-worker-events\";\n\nconst networkRequestFailedEventName = \"openmrs:network-request-failed\";\n\nexport function dispatchNetworkRequestFailed(data: NetworkRequestFailedEvent) {\n window.dispatchEvent(\n new CustomEvent(networkRequestFailedEventName, { detail: data })\n );\n}\n\nexport function subscribeNetworkRequestFailed(\n cb: (data: NetworkRequestFailedEvent) => void\n) {\n const handler = (ev: CustomEvent) => cb(ev.detail);\n window.addEventListener(networkRequestFailedEventName, handler);\n return () =>\n window.removeEventListener(networkRequestFailedEventName, handler);\n}\n","async function isSafariPrivateBrowsing() {\n const storage = window.sessionStorage;\n\n try {\n storage.setItem(\"someKeyHere\", \"test\");\n storage.removeItem(\"someKeyHere\");\n } catch (e) {\n if (e.code === DOMException.QUOTA_EXCEEDED_ERR && storage.length === 0) {\n return true;\n }\n }\n\n return false;\n}\n\nasync function isEdgePrivateBrowsing() {\n return !window.indexedDB;\n}\n\nasync function isFirefoxPrivateBrowsing() {\n return new Promise<boolean>((resolve) => {\n const db = indexedDB.open(\"test\");\n db.onerror = () => resolve(true);\n db.onsuccess = () => resolve(false);\n });\n}\n\nasync function isPrivateBrowsing() {\n return (\n (await isFirefoxPrivateBrowsing()) ||\n (await isEdgePrivateBrowsing()) ||\n (await isSafariPrivateBrowsing())\n );\n}\n\nexport type OfflineMode = \"on\" | \"off\" | \"unavailable\";\n\nexport interface OfflineModeResult {\n current: OfflineMode;\n notAvailable: boolean;\n active: boolean;\n}\n\nconst offlineModeStorageKey = \"openmrs3:offline-mode\";\nlet offlineMode: OfflineMode = \"unavailable\";\n\nexport function getCurrentOfflineMode(): OfflineModeResult {\n return {\n current: offlineMode,\n notAvailable: offlineMode === \"unavailable\",\n active: offlineMode === \"on\",\n };\n}\n\nexport function setCurrentOfflineMode(mode: OfflineMode) {\n if (offlineMode !== \"unavailable\" && mode !== \"unavailable\") {\n localStorage.setItem(\n offlineModeStorageKey,\n mode === \"on\" ? \"active\" : \"disabled\"\n );\n offlineMode = mode;\n }\n}\n\nexport async function activateOfflineCapability() {\n const isPrivate = await isPrivateBrowsing();\n\n if (!isPrivate) {\n if (localStorage.getItem(offlineModeStorageKey) === \"active\") {\n offlineMode = \"on\";\n } else {\n offlineMode = \"off\";\n }\n }\n\n if (navigator.onLine && offlineMode === \"on\") {\n //TODO trigger here --> update cycle\n }\n}\n","export function patchXMLHttpRequest() {\n const send = XMLHttpRequest.prototype.send;\n\n XMLHttpRequest.prototype.send = function (...args) {\n return send.apply(this, args);\n };\n}\n","/*\n * Dexie.js - a minimalistic wrapper for IndexedDB\n * ===============================================\n *\n * By David Fahlander, david.fahlander@gmail.com\n *\n * Version 3.2.0, Thu Nov 18 2021\n *\n * http://dexie.org\n *\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/\n */\n \nconst _global = typeof globalThis !== 'undefined' ? globalThis :\n typeof self !== 'undefined' ? self :\n typeof window !== 'undefined' ? window :\n global;\n\nconst keys = Object.keys;\nconst isArray = Array.isArray;\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}\nconst getProto = Object.getPrototypeOf;\nconst _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 (typeof Reflect === \"undefined\" ? keys : Reflect.ownKeys)(extension).forEach(key => {\n setProp(proto, key, extension[key]);\n });\n}\nconst 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}\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nfunction getPropertyDescriptor(obj, prop) {\n const pd = getOwnPropertyDescriptor(obj, prop);\n let proto;\n return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop);\n}\nconst _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$1(fn) {\n if (_global.setImmediate)\n setImmediate(fn);\n else\n setTimeout(fn, 0);\n}\nfunction arrayToObject(array, extractor) {\n return array.reduce((result, item, i) => {\n var nameAndValue = extractor(item, i);\n if (nameAndValue)\n result[nameAndValue[0]] = nameAndValue[1];\n return result;\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}\nconst concat = [].concat;\nfunction flatten(a) {\n return concat.apply([], a);\n}\nconst intrinsicTypeNames = \"Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey\"\n .split(',').concat(flatten([8, 16, 32, 64].map(num => [\"Int\", \"Uint\", \"Float\"].map(t => t + num + \"Array\")))).filter(t => _global[t]);\nconst intrinsicTypes = intrinsicTypeNames.map(t => _global[t]);\narrayToObject(intrinsicTypeNames, x => [x, true]);\nlet circularRefs = null;\nfunction deepClone(any) {\n circularRefs = typeof WeakMap !== 'undefined' && new WeakMap();\n const rv = innerDeepClone(any);\n circularRefs = null;\n return rv;\n}\nfunction innerDeepClone(any) {\n if (!any || typeof any !== 'object')\n return any;\n let rv = circularRefs && circularRefs.get(any);\n if (rv)\n return rv;\n if (isArray(any)) {\n rv = [];\n circularRefs && circularRefs.set(any, rv);\n for (var i = 0, l = any.length; i < l; ++i) {\n rv.push(innerDeepClone(any[i]));\n }\n }\n else if (intrinsicTypes.indexOf(any.constructor) >= 0) {\n rv = any;\n }\n else {\n const proto = getProto(any);\n rv = proto === Object.prototype ? {} : Object.create(proto);\n circularRefs && circularRefs.set(any, rv);\n for (var prop in any) {\n if (hasOwn(any, prop)) {\n rv[prop] = innerDeepClone(any[prop]);\n }\n }\n }\n return rv;\n}\nconst { toString } = {};\nfunction toStringTag(o) {\n return toString.call(o).slice(8, -1);\n}\nconst iteratorSymbol = typeof Symbol !== 'undefined' ?\n Symbol.iterator :\n '@@iterator';\nconst getIteratorOf = typeof iteratorSymbol === \"symbol\" ? function (x) {\n var i;\n return x != null && (i = x[iteratorSymbol]) && i.apply(x);\n} : function () { return null; };\nconst 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}\nconst isAsyncFunction = typeof Symbol !== 'undefined'\n ? (fn) => fn[Symbol.toStringTag] === 'AsyncFunction'\n : () => false;\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 = () => true;\nconst NEEDS_THROW_FOR_STACK = !new Error(\"\").stack;\nfunction getErrorWithStack() {\n if (NEEDS_THROW_FOR_STACK)\n try {\n getErrorWithStack.arguments;\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(frame => \"\\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 MissingAPI: \"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb\"\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(key => failures[key].toString())\n .filter((v, i, s) => 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 = Object.keys(failures).map(pos => failures[pos]);\n this.failuresByPos = failures;\n this.message = getMultiErrorMessage(msg, failures);\n}\nderive(BulkError).from(DexieError);\nvar errnames = errorList.reduce((obj, name) => (obj[name] = name + \"Error\", obj), {});\nconst BaseException = DexieError;\nvar exceptions = errorList.reduce((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((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((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}\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 = {};\nconst LONG_STACKS_CLIP_LIMIT = 100,\nMAX_LONG_STACKS = 20, ZONE_ECHO_LIMIT = 100, [resolvedNativePromise, nativePromiseProto, resolvedGlobalPromise] = typeof Promise === 'undefined' ?\n [] :\n (() => {\n let globalP = Promise.resolve();\n if (typeof crypto === 'undefined' || !crypto.subtle)\n return [globalP, getProto(globalP), globalP];\n const nativeP = crypto.subtle.digest(\"SHA-512\", new Uint8Array([0]));\n return [\n nativeP,\n getProto(nativeP),\n globalP\n ];\n })(), nativePromiseThen = nativePromiseProto && nativePromiseProto.then;\nconst NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;\nconst patchGlobalPromise = !!resolvedGlobalPromise;\nvar stack_being_generated = false;\nvar schedulePhysicalTick = resolvedGlobalPromise ?\n () => { resolvedGlobalPromise.then(physicalTick); }\n :\n _global.setImmediate ?\n setImmediate.bind(null, physicalTick) :\n _global.MutationObserver ?\n () => {\n var hiddenDiv = document.createElement(\"div\");\n (new MutationObserver(() => {\n physicalTick();\n hiddenDiv = null;\n })).observe(hiddenDiv, { attributes: true });\n hiddenDiv.setAttribute('i', '1');\n } :\n () => { setTimeout(physicalTick, 0); };\nvar asap = function (callback, args) {\n microtickQueue.push([callback, args]);\n if (needsNewPhysicalTick) {\n schedulePhysicalTick();\n needsNewPhysicalTick = false;\n }\n};\nvar isOutsideMicroTick = true,\nneedsNewPhysicalTick = true,\nunhandledErrors = [],\nrejectingErrors = [],\ncurrentFulfiller = null, 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(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 DexiePromise(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}\nconst thenProp = {\n get: function () {\n var psd = PSD, microTaskId = totalEchoes;\n function then(onFulfilled, onRejected) {\n var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);\n const cleanup = possibleAwait && !decrementExpectedAwaits();\n var rv = new DexiePromise((resolve, reject) => {\n propagateToListener(this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup), 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(DexiePromise.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, err =>\n err instanceof type ? handler(err) : PromiseReject(err))\n : this.then(null, err =>\n err && err.name === type ? handler(err) : PromiseReject(err));\n },\n finally: function (onFinally) {\n return this.then(value => {\n onFinally();\n return value;\n }, 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 return ms < Infinity ?\n new DexiePromise((resolve, reject) => {\n var handle = setTimeout(() => 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(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.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(DexiePromise, {\n all: function () {\n var values = getArrayOf.apply(null, arguments)\n .map(onPossibleParallellAsync);\n return new DexiePromise(function (resolve, reject) {\n if (values.length === 0)\n resolve([]);\n var remaining = values.length;\n values.forEach((a, i) => DexiePromise.resolve(a).then(x => {\n values[i] = x;\n if (!--remaining)\n resolve(values);\n }, reject));\n });\n },\n resolve: value => {\n if (value instanceof DexiePromise)\n return value;\n if (value && typeof value.then === 'function')\n return new DexiePromise((resolve, reject) => {\n value.then(resolve, reject);\n });\n var rv = new DexiePromise(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 DexiePromise((resolve, reject) => {\n values.map(value => DexiePromise.resolve(value).then(resolve, reject));\n });\n },\n PSD: {\n get: () => PSD,\n set: value => PSD = value\n },\n totalEchoes: { get: () => totalEchoes },\n newPSD: newScope,\n usePSD: usePSD,\n scheduler: {\n get: () => asap,\n set: value => { asap = value; }\n },\n rejectionMapper: {\n get: () => rejectionMapper,\n set: value => { rejectionMapper = value; }\n },\n follow: (fn, zoneProps) => {\n return new DexiePromise((resolve, reject) => {\n return newScope((resolve, reject) => {\n var psd = PSD;\n psd.unhandleds = [];\n psd.onunhandled = reject;\n psd.finalize = callBoth(function () {\n run_at_end_of_this_or_next_physical_tick(() => {\n this.unhandleds.length === 0 ? resolve() : reject(this.unhandleds[0]);\n });\n }, psd.finalize);\n fn();\n }, zoneProps, resolve, reject);\n });\n }\n});\nif (NativePromise) {\n if (NativePromise.allSettled)\n setProp(DexiePromise, \"allSettled\", function () {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise(resolve => {\n if (possiblePromises.length === 0)\n resolve([]);\n let remaining = possiblePromises.length;\n const results = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(value => results[i] = { status: \"fulfilled\", value }, reason => results[i] = { status: \"rejected\", reason })\n .then(() => --remaining || resolve(results)));\n });\n });\n if (NativePromise.any && typeof AggregateError !== 'undefined')\n setProp(DexiePromise, \"any\", function () {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n if (possiblePromises.length === 0)\n reject(new AggregateError([]));\n let remaining = possiblePromises.length;\n const failures = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(value => resolve(value), failure => {\n failures[i] = failure;\n if (!--remaining)\n reject(new AggregateError(failures));\n }));\n });\n });\n}\nfunction executePromiseTask(promise, fn) {\n try {\n fn(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, (resolve, reject) => {\n value instanceof DexiePromise ?\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(() => {\n var origProp = getPropertyDescriptor(reason, \"stack\");\n reason._promise = promise;\n setProp(reason, \"stack\", {\n get: () => stack_being_generated ?\n origProp && (origProp.get ?\n origProp.get.apply(reason) :\n origProp.value) :\n promise.stack\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(() => {\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(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(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(() => {\n if (--numScheduledCalls === 0)\n finalizePhysicalTick();\n }, []);\n}\nfunction addPossiblyUnhandledError(promise) {\n if (!unhandledErrors.some(p => 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 DexiePromise(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}\nconst 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, 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: DexiePromise,\n PromiseProp: { value: DexiePromise, configurable: true, writable: true },\n all: DexiePromise.all,\n race: DexiePromise.race,\n allSettled: DexiePromise.allSettled,\n any: DexiePromise.any,\n resolve: DexiePromise.resolve,\n reject: DexiePromise.reject,\n nthen: getPatchedPromiseThen(globalEnv.nthen, psd),\n gthen: getPatchedPromiseThen(globalEnv.gthen, psd)\n } : {};\n if (props)\n extend(psd, props);\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() {\n if (!task.awaits)\n return false;\n if (--task.awaits === 0)\n task.id = 0;\n task.echoes = task.awaits * ZONE_ECHO_LIMIT;\n return true;\n}\nif (('' + nativePromiseThen).indexOf('[native code]') === -1) {\n incrementExpectedAwaits = decrementExpectedAwaits = nop;\n}\nfunction onPossibleParallellAsync(possiblePromise) {\n if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {\n incrementExpectedAwaits();\n return possiblePromise.then(x => {\n decrementExpectedAwaits();\n return x;\n }, 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 if (targetEnv.allSettled)\n GlobalPromise.allSettled = targetEnv.allSettled;\n if (targetEnv.any)\n GlobalPromise.any = targetEnv.any;\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 allSettled: GlobalPromise.allSettled,\n any: GlobalPromise.any,\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, cleanup) {\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 if (cleanup)\n enqueueNativeMicroTask(decrementExpectedAwaits);\n }\n };\n}\nfunction getPatchedPromiseThen(origThen, zone) {\n return function (onResolved, onRejected) {\n return origThen.call(this, nativeAwaitCompatibleWrap(onResolved, zone), nativeAwaitCompatibleWrap(onRejected, zone));\n };\n}\nconst 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 = DexiePromise.reject;\n\nfunction tempTransaction(db, mode, storeNames, fn) {\n if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) {\n if (db._state.openComplete) {\n return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError));\n }\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(() => 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, (resolve, reject) => {\n return newScope(() => {\n PSD.trans = trans;\n return fn(resolve, reject, trans);\n });\n }).then(result => {\n return trans._completion.then(() => result);\n });\n }\n}\n\nconst DEXIE_VERSION = '3.2.0';\nconst maxString = String.fromCharCode(65535);\nconst minKey = -Infinity;\nconst INVALID_KEY_ARGUMENT = \"Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.\";\nconst STRING_EXPECTED = \"String expected.\";\nconst connections = [];\nconst isIEOrEdge = typeof navigator !== 'undefined' && /(MSIE|Trident|Edge)/.test(navigator.userAgent);\nconst hasIEDeleteObjectStoreBug = isIEOrEdge;\nconst hangsOnDeleteLargeKeyRange = isIEOrEdge;\nconst dexieStackFrameFilter = frame => !/(dexie\\.js|dexie\\.min\\.js)/.test(frame);\nconst DBNAMES_DB = '__dbnames';\nconst READONLY = 'readonly';\nconst 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\nconst AnyRange = {\n type: 3 ,\n lower: -Infinity,\n lowerOpen: false,\n upper: [[]],\n upperOpen: false\n};\n\nfunction workaroundForUndefinedPrimKey(keyPath) {\n return typeof keyPath === \"string\" && !/\\./.test(keyPath)\n ? (obj) => {\n if (obj[keyPath] === undefined && (keyPath in obj)) {\n obj = deepClone(obj);\n delete obj[keyPath];\n }\n return obj;\n }\n : (obj) => obj;\n}\n\nclass Table {\n _trans(mode, fn, writeLocked) {\n const trans = this._tx || PSD.trans;\n const 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 const wasRootExec = beginMicroTickScope();\n try {\n return trans && trans.db === this.db ?\n trans === PSD.trans ?\n trans._promise(mode, checkTableInTransaction, writeLocked) :\n newScope(() => 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 get(keyOrCrit, cb) {\n if (keyOrCrit && keyOrCrit.constructor === Object)\n return this.where(keyOrCrit).first(cb);\n return this._trans('readonly', (trans) => {\n return this.core.get({ trans, key: keyOrCrit })\n .then(res => this.hook.reading.fire(res));\n }).then(cb);\n }\n where(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 const keyPaths = keys(indexOrCrit);\n if (keyPaths.length === 1)\n return this\n .where(keyPaths[0])\n .equals(indexOrCrit[keyPaths[0]]);\n const compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(ix => ix.compound &&\n keyPaths.every(keyPath => ix.keyPath.indexOf(keyPath) >= 0) &&\n ix.keyPath.every(keyPath => keyPaths.indexOf(keyPath) >= 0))[0];\n if (compoundIndex && this.db._maxKey !== maxString)\n return this\n .where(compoundIndex.name)\n .equals(compoundIndex.keyPath.map(kp => 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 const { idxByName } = this.schema;\n const 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 const [idx, filterFunction] = keyPaths.reduce(([prevIndex, prevFilterFn], keyPath) => {\n const index = idxByName[keyPath];\n const value = indexOrCrit[keyPath];\n return [\n prevIndex || index,\n prevIndex || !index ?\n combine(prevFilterFn, index && index.multi ?\n x => {\n const prop = getByKeyPath(x, keyPath);\n return isArray(prop) && prop.some(item => equals(value, item));\n } : x => equals(value, getByKeyPath(x, keyPath)))\n : prevFilterFn\n ];\n }, [null, null]);\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 filter(filterFunction) {\n return this.toCollection().and(filterFunction);\n }\n count(thenShortcut) {\n return this.toCollection().count(thenShortcut);\n }\n offset(offset) {\n return this.toCollection().offset(offset);\n }\n limit(numRows) {\n return this.toCollection().limit(numRows);\n }\n each(callback) {\n return this.toCollection().each(callback);\n }\n toArray(thenShortcut) {\n return this.toCollection().toArray(thenShortcut);\n }\n toCollection() {\n return new this.db.Collection(new this.db.WhereClause(this));\n }\n orderBy(index) {\n return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ?\n `[${index.join('+')}]` :\n index));\n }\n reverse() {\n return this.toCollection().reverse();\n }\n mapToClass(constructor) {\n this.schema.mappedClass = constructor;\n const readHook = obj => {\n if (!obj)\n return obj;\n const 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 defineClass() {\n function Class(content) {\n extend(this, content);\n }\n return this.mapToClass(Class);\n }\n add(obj, key) {\n const { auto, keyPath } = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans('readwrite', trans => {\n return this.core.mutate({ trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd] });\n }).then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n try {\n setByKeyPath(obj, keyPath, lastResult);\n }\n catch (_) { }\n }\n return lastResult;\n });\n }\n update(keyOrObject, modifications) {\n if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) {\n const 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 try {\n if (typeof modifications !== \"function\") {\n keys(modifications).forEach(keyPath => {\n setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);\n });\n }\n else {\n modifications(keyOrObject, { value: keyOrObject, primKey: key });\n }\n }\n catch (_a) {\n }\n return this.where(\":id\").equals(key).modify(modifications);\n }\n else {\n return this.where(\":id\").equals(keyOrObject).modify(modifications);\n }\n }\n put(obj, key) {\n const { auto, keyPath } = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null }))\n .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n try {\n setByKeyPath(obj, keyPath, lastResult);\n }\n catch (_) { }\n }\n return lastResult;\n });\n }\n delete(key) {\n return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'delete', keys: [key] }))\n .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined);\n }\n clear() {\n return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'deleteRange', range: AnyRange }))\n .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined);\n }\n bulkGet(keys) {\n return this._trans('readonly', trans => {\n return this.core.getMany({\n keys,\n trans\n }).then(result => result.map(res => this.hook.reading.fire(res)));\n });\n }\n bulkAdd(objects, keysOrOptions, options) {\n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions);\n const wantResults = options ? options.allKeys : undefined;\n return this._trans('readwrite', trans => {\n const { auto, keyPath } = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkAdd(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n const numObjects = objects.length;\n let objectsToAdd = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n return this.core.mutate({ trans, type: 'add', keys: keys, values: objectsToAdd, wantResults })\n .then(({ numFailures, results, lastResult, failures }) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0)\n return result;\n throw new BulkError(`${this.name}.bulkAdd(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n bulkPut(objects, keysOrOptions, options) {\n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions);\n const wantResults = options ? options.allKeys : undefined;\n return this._trans('readwrite', trans => {\n const { auto, keyPath } = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkPut(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n const numObjects = objects.length;\n let objectsToPut = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n return this.core.mutate({ trans, type: 'put', keys: keys, values: objectsToPut, wantResults })\n .then(({ numFailures, results, lastResult, failures }) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0)\n return result;\n throw new BulkError(`${this.name}.bulkPut(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n bulkDelete(keys) {\n const numKeys = keys.length;\n return this._trans('readwrite', trans => {\n return this.core.mutate({ trans, type: 'delete', keys: keys });\n }).then(({ numFailures, lastResult, failures }) => {\n if (numFailures === 0)\n return lastResult;\n throw new BulkError(`${this.name}.bulkDelete(): ${numFailures} of ${numKeys} operations failed`, failures);\n });\n }\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$1(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 });\n return constructor;\n}\n\nfunction createTableConstructor(db) {\n return makeClassConstructor(Table.prototype, function Table(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 ? () => 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 const 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 const index = getIndexOrStore(ctx, coreTable.schema);\n return coreTable.openCursor({\n trans,\n values: !ctx.keysOnly,\n reverse: ctx.dir === 'prev',\n unique: !!ctx.unique,\n query: {\n index,\n range: ctx.range\n }\n });\n}\nfunction iter(ctx, fn, coreTrans, coreTable) {\n const 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 const set = {};\n const union = (item, cursor, advance) => {\n if (!filter || filter(cursor, advance, result => cursor.stop(result), err => 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, key)) {\n set[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 ? (x, c, a) => fn(valueMapper(x), c, a) : fn;\n var wrappedFn = wrap(mappedFn);\n return cursorPromise.then(cursor => {\n if (cursor) {\n return cursor.start(() => {\n var c = () => cursor.continue();\n if (!filter || filter(cursor, advancer => c = advancer, val => { cursor.stop(val); c = nop; }, e => { cursor.fail(e); c = nop; }))\n wrappedFn(cursor.value, cursor, advancer => c = advancer);\n c();\n });\n }\n });\n}\n\nfunction cmp(a, b) {\n try {\n const ta = type(a);\n const tb = type(b);\n if (ta !== tb) {\n if (ta === 'Array')\n return 1;\n if (tb === 'Array')\n return -1;\n if (ta === 'binary')\n return 1;\n if (tb === 'binary')\n return -1;\n if (ta === 'string')\n return 1;\n if (tb === 'string')\n return -1;\n if (ta === 'Date')\n return 1;\n if (tb !== 'Date')\n return NaN;\n return -1;\n }\n switch (ta) {\n case 'number':\n case 'Date':\n case 'string':\n return a > b ? 1 : a < b ? -1 : 0;\n case 'binary': {\n return compareUint8Arrays(getUint8Array(a), getUint8Array(b));\n }\n case 'Array':\n return compareArrays(a, b);\n }\n }\n catch (_a) { }\n return NaN;\n}\nfunction compareArrays(a, b) {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n const res = cmp(a[i], b[i]);\n if (res !== 0)\n return res;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\nfunction compareUint8Arrays(a, b) {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n if (a[i] !== b[i])\n return a[i] < b[i] ? -1 : 1;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\nfunction type(x) {\n const t = typeof x;\n if (t !== 'object')\n return t;\n if (ArrayBuffer.isView(x))\n return 'binary';\n const tsTag = toStringTag(x);\n return tsTag === 'ArrayBuffer' ? 'binary' : tsTag;\n}\nfunction getUint8Array(a) {\n if (a instanceof Uint8Array)\n return a;\n if (ArrayBuffer.isView(a))\n return new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n return new Uint8Array(a);\n}\n\nclass Collection {\n _read(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 _write(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 _addAlgorithm(fn) {\n var ctx = this._ctx;\n ctx.algorithm = combine(ctx.algorithm, fn);\n }\n _iterate(fn, coreTrans) {\n return iter(this._ctx, fn, coreTrans, this._ctx.table.core);\n }\n clone(props) {\n var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx);\n if (props)\n extend(ctx, props);\n rv._ctx = ctx;\n return rv;\n }\n raw() {\n this._ctx.valueMapper = null;\n return this;\n }\n each(fn) {\n var ctx = this._ctx;\n return this._read(trans => iter(ctx, fn, trans, ctx.table.core));\n }\n count(cb) {\n return this._read(trans => {\n const ctx = this._ctx;\n const coreTable = ctx.table.core;\n if (isPlainKeyRange(ctx, true)) {\n return coreTable.count({\n trans,\n query: {\n index: getIndexOrStore(ctx, coreTable.schema),\n range: ctx.range\n }\n }).then(count => Math.min(count, ctx.limit));\n }\n else {\n var count = 0;\n return iter(ctx, () => { ++count; return false; }, trans, coreTable)\n .then(() => count);\n }\n }).then(cb);\n }\n sortBy(keyPath, cb) {\n const 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 toArray(cb) {\n return this._read(trans => {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n const { valueMapper } = ctx;\n const index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n limit: ctx.limit,\n values: true,\n query: {\n index,\n range: ctx.range\n }\n }).then(({ result }) => valueMapper ? result.map(valueMapper) : result);\n }\n else {\n const a = [];\n return iter(ctx, item => a.push(item), trans, ctx.table.core).then(() => a);\n }\n }, cb);\n }\n offset(offset) {\n var ctx = this._ctx;\n if (offset <= 0)\n return this;\n ctx.offset += offset;\n if (isPlainKeyRange(ctx)) {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return (cursor, advance) => {\n if (offsetLeft === 0)\n return true;\n if (offsetLeft === 1) {\n --offsetLeft;\n return false;\n }\n advance(() => {\n cursor.advance(offsetLeft);\n offsetLeft = 0;\n });\n return false;\n };\n });\n }\n else {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return () => (--offsetLeft < 0);\n });\n }\n return this;\n }\n limit(numRows) {\n this._ctx.limit = Math.min(this._ctx.limit, numRows);\n addReplayFilter(this._ctx, () => {\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 until(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 first(cb) {\n return this.limit(1).toArray(function (a) { return a[0]; }).then(cb);\n }\n last(cb) {\n return this.reverse().first(cb);\n }\n filter(filterFunction) {\n addFilter(this._ctx, function (cursor) {\n return filterFunction(cursor.value);\n });\n addMatchFilter(this._ctx, filterFunction);\n return this;\n }\n and(filter) {\n return this.filter(filter);\n }\n or(indexName) {\n return new this.db.WhereClause(this._ctx.table, indexName, this);\n }\n reverse() {\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 desc() {\n return this.reverse();\n }\n eachKey(cb) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.key, cursor); });\n }\n eachUniqueKey(cb) {\n this._ctx.unique = \"unique\";\n return this.eachKey(cb);\n }\n eachPrimaryKey(cb) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); });\n }\n keys(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 primaryKeys(cb) {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n return this._read(trans => {\n var index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n values: false,\n limit: ctx.limit,\n query: {\n index,\n range: ctx.range\n }\n });\n }).then(({ result }) => result).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 uniqueKeys(cb) {\n this._ctx.unique = \"unique\";\n return this.keys(cb);\n }\n firstKey(cb) {\n return this.limit(1).keys(function (a) { return a[0]; }).then(cb);\n }\n lastKey(cb) {\n return this.reverse().firstKey(cb);\n }\n distinct() {\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 modify(changes) {\n var ctx = this._ctx;\n return this._write(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 const coreTable = ctx.table.core;\n const { outbound, extractKey } = coreTable.schema.primaryKey;\n const limit = this.db._options.modifyChunkSize || 200;\n const totalFailures = [];\n let successCount = 0;\n const failedKeys = [];\n const applyMutateResult = (expectedCount, res) => {\n const { failures, numFailures } = res;\n successCount += expectedCount - numFailures;\n for (let pos of keys(failures)) {\n totalFailures.push(failures[pos]);\n }\n };\n return this.clone().primaryKeys().then(keys => {\n const nextChunk = (offset) => {\n const count = Math.min(limit, keys.length - offset);\n return coreTable.getMany({\n trans,\n keys: keys.slice(offset, offset + count),\n cache: \"immutable\"\n }).then(values => {\n const addValues = [];\n const putValues = [];\n const putKeys = outbound ? [] : null;\n const deleteKeys = [];\n for (let i = 0; i < count; ++i) {\n const origValue = values[i];\n const ctx = {\n value: deepClone(origValue),\n primKey: keys[offset + i]\n };\n if (modifyer.call(ctx, ctx.value, ctx) !== false) {\n if (ctx.value == null) {\n deleteKeys.push(keys[offset + i]);\n }\n else if (!outbound && cmp(extractKey(origValue), extractKey(ctx.value)) !== 0) {\n deleteKeys.push(keys[offset + i]);\n addValues.push(ctx.value);\n }\n else {\n putValues.push(ctx.value);\n if (outbound)\n putKeys.push(keys[offset + i]);\n }\n }\n }\n const criteria = isPlainKeyRange(ctx) &&\n ctx.limit === Infinity &&\n (typeof changes !== 'function' || changes === deleteCallback) && {\n index: ctx.index,\n range: ctx.range\n };\n return Promise.resolve(addValues.length > 0 &&\n coreTable.mutate({ trans, type: 'add', values: addValues })\n .then(res => {\n for (let pos in res.failures) {\n deleteKeys.splice(parseInt(pos), 1);\n }\n applyMutateResult(addValues.length, res);\n })).then(() => (putValues.length > 0 || (criteria && typeof changes === 'object')) &&\n coreTable.mutate({\n trans,\n type: 'put',\n keys: putKeys,\n values: putValues,\n criteria,\n changeSpec: typeof changes !== 'function'\n && changes\n }).then(res => applyMutateResult(putValues.length, res))).then(() => (deleteKeys.length > 0 || (criteria && changes === deleteCallback)) &&\n coreTable.mutate({\n trans,\n type: 'delete',\n keys: deleteKeys,\n criteria\n }).then(res => applyMutateResult(deleteKeys.length, res))).then(() => {\n return keys.length > offset + count && nextChunk(offset + limit);\n });\n });\n };\n return nextChunk(0).then(() => {\n if (totalFailures.length > 0)\n throw new ModifyError(\"Error modifying one or more objects\", totalFailures, successCount, failedKeys);\n return keys.length;\n });\n });\n });\n }\n delete() {\n var ctx = this._ctx, range = ctx.range;\n if (isPlainKeyRange(ctx) &&\n ((ctx.isPrimKey && !hangsOnDeleteLargeKeyRange) || range.type === 3 ))\n {\n return this._write(trans => {\n const { primaryKey } = ctx.table.core.schema;\n const coreRange = range;\n return ctx.table.core.count({ trans, query: { index: primaryKey, range: coreRange } }).then(count => {\n return ctx.table.core.mutate({ trans, type: 'deleteRange', range: coreRange })\n .then(({ failures, lastResult, results, numFailures }) => {\n if (numFailures)\n throw new ModifyError(\"Could not delete some values\", Object.keys(failures).map(pos => failures[pos]), count - numFailures);\n return count - numFailures;\n });\n });\n });\n }\n return this.modify(deleteCallback);\n }\n}\nconst deleteCallback = (value, ctx) => ctx.value = null;\n\nfunction createCollectionConstructor(db) {\n return makeClassConstructor(Collection.prototype, function Collection(whereClause, keyRangeGenerator) {\n this.db = db;\n let keyRange = AnyRange, error = null;\n if (keyRangeGenerator)\n try {\n keyRange = keyRangeGenerator();\n }\n catch (ex) {\n error = ex;\n }\n const whereCtx = whereClause._ctx;\n const table = whereCtx.table;\n const 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, () => rangeEqual(\"\")).limit(0);\n}\nfunction upperFactory(dir) {\n return dir === \"next\" ?\n (s) => s.toUpperCase() :\n (s) => s.toLowerCase();\n}\nfunction lowerFactory(dir) {\n return dir === \"next\" ?\n (s) => s.toLowerCase() :\n (s) => 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(s => 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, () => 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,\n upper,\n lowerOpen,\n upperOpen\n };\n}\nfunction rangeEqual(value) {\n return {\n type: 1 ,\n lower: value,\n upper: value\n };\n}\n\nclass WhereClause {\n get Collection() {\n return this._ctx.table.db.Collection;\n }\n between(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, () => createRange(lower, upper, !includeLower, !includeUpper));\n }\n catch (e) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n }\n equals(value) {\n if (value == null)\n return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => rangeEqual(value));\n }\n above(value) {\n if (value == null)\n return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, true));\n }\n aboveOrEqual(value) {\n if (value == null)\n return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, false));\n }\n below(value) {\n if (value == null)\n return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value, false, true));\n }\n belowOrEqual(value) {\n if (value == null)\n return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value));\n }\n startsWith(str) {\n if (typeof str !== 'string')\n return fail(this, STRING_EXPECTED);\n return this.between(str, str + maxString, true, true);\n }\n startsWithIgnoreCase(str) {\n if (str === \"\")\n return this.startsWith(str);\n return addIgnoreCaseAlgorithm(this, (x, a) => x.indexOf(a[0]) === 0, [str], maxString);\n }\n equalsIgnoreCase(str) {\n return addIgnoreCaseAlgorithm(this, (x, a) => x === a[0], [str], \"\");\n }\n anyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0)\n return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.indexOf(x) !== -1, set, \"\");\n }\n startsWithAnyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0)\n return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.some(n => x.indexOf(n) === 0), set, maxString);\n }\n anyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n let 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 const c = new this.Collection(this, () => createRange(set[0], set[set.length - 1]));\n c._ondirectionchange = direction => {\n compare = (direction === \"next\" ?\n this._ascending :\n this._descending);\n set.sort(compare);\n };\n let i = 0;\n c._addAlgorithm((cursor, advance, resolve) => {\n const 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(() => { cursor.continue(set[i]); });\n return false;\n }\n });\n return c;\n }\n notEqual(value) {\n return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false });\n }\n noneOf() {\n const 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 const ranges = set.reduce((res, val) => 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 inAnyRange(ranges, options) {\n const 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(range => range[0] !== undefined &&\n range[1] !== undefined &&\n ascending(range[0], range[1]) <= 0)) {\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 const includeLowers = !options || options.includeLowers !== false;\n const includeUppers = options && options.includeUppers === true;\n function addRange(ranges, newRange) {\n let i = 0, l = ranges.length;\n for (; i < l; ++i) {\n const 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 let sortDirection = ascending;\n function rangeSorter(a, b) { return sortDirection(a[0], b[0]); }\n let 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 let rangePos = 0;\n const keyIsBeyondCurrentEntry = includeUppers ?\n key => ascending(key, set[rangePos][1]) > 0 :\n key => ascending(key, set[rangePos][1]) >= 0;\n const keyIsBeforeCurrentEntry = includeLowers ?\n key => descending(key, set[rangePos][0]) > 0 :\n key => descending(key, set[rangePos][0]) >= 0;\n function keyWithinCurrentRange(key) {\n return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);\n }\n let checkKey = keyIsBeyondCurrentEntry;\n const c = new this.Collection(this, () => createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers));\n c._ondirectionchange = 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((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(() => {\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 startsWithAnyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (!set.every(s => 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((str) => [str, str + maxString]));\n }\n}\n\nfunction createWhereClauseConstructor(db) {\n return makeClassConstructor(WhereClause.prototype, function WhereClause(table, index, orCollection) {\n this.db = db;\n this._ctx = {\n table: table,\n index: index === \":id\" ? null : index,\n or: orCollection\n };\n const indexedDB = db._deps.indexedDB;\n if (!indexedDB)\n throw new exceptions.MissingAPI();\n this._cmp = this._ascending = indexedDB.cmp.bind(indexedDB);\n this._descending = (a, b) => indexedDB.cmp(b, a);\n this._max = (a, b) => indexedDB.cmp(a, b) > 0 ? a : b;\n this._min = (a, b) => indexedDB.cmp(a, b) < 0 ? a : b;\n this._IDBKeyRange = db._deps.IDBKeyRange;\n });\n}\n\nfunction eventRejectHandler(reject) {\n return wrap(function (event) {\n preventDefault(event);\n reject(event.target.error);\n return false;\n });\n}\nfunction preventDefault(event) {\n if (event.stopPropagation)\n event.stopPropagation();\n if (event.preventDefault)\n event.preventDefault();\n}\n\nconst DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated';\nconst STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1';\nconst globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME);\n\nclass Transaction {\n _lock() {\n assert(!PSD.global);\n ++this._reculock;\n if (this._reculock === 1 && !PSD.global)\n PSD.lockOwnerFor = this;\n return this;\n }\n _unlock() {\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 _locked() {\n return this._reculock && PSD.lockOwnerFor !== this;\n }\n create(idbtrans) {\n if (!this.mode)\n return this;\n const idbdb = this.db.idbdb;\n const 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 ||\n (this.db.core\n ? this.db.core.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })\n : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability }));\n idbtrans.onerror = wrap(ev => {\n preventDefault(ev);\n this._reject(idbtrans.error);\n });\n idbtrans.onabort = wrap(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(() => {\n this.active = false;\n this._resolve();\n if ('mutatedParts' in idbtrans) {\n globalEvents.storagemutated.fire(idbtrans[\"mutatedParts\"]);\n }\n });\n return this;\n }\n _promise(mode, fn, bWriteLock) {\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 DexiePromise((resolve, reject) => {\n this._blockedFuncs.push([() => {\n this._promise(mode, fn, bWriteLock).then(resolve, reject);\n }, PSD]);\n });\n }\n else if (bWriteLock) {\n return newScope(() => {\n var p = new DexiePromise((resolve, reject) => {\n this._lock();\n const rv = fn(resolve, reject, this);\n if (rv && rv.then)\n rv.then(resolve, reject);\n });\n p.finally(() => this._unlock());\n p._lib = true;\n return p;\n });\n }\n else {\n var p = new DexiePromise((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 _root() {\n return this.parent ? this.parent._root() : this;\n }\n waitFor(promiseLike) {\n var root = this._root();\n const promise = DexiePromise.resolve(promiseLike);\n if (root._waitingFor) {\n root._waitingFor = root._waitingFor.then(() => 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 DexiePromise((resolve, reject) => {\n promise.then(res => root._waitingQueue.push(wrap(resolve.bind(null, res))), err => root._waitingQueue.push(wrap(reject.bind(null, err)))).finally(() => {\n if (root._waitingFor === currentWaitPromise) {\n root._waitingFor = null;\n }\n });\n });\n }\n abort() {\n if (this.active) {\n this.active = false;\n if (this.idbtrans)\n this.idbtrans.abort();\n this._reject(new exceptions.Abort());\n }\n }\n table(tableName) {\n const memoizedTables = (this._memoizedTables || (this._memoizedTables = {}));\n if (hasOwn(memoizedTables, tableName))\n return memoizedTables[tableName];\n const tableSchema = this.schema[tableName];\n if (!tableSchema) {\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\");\n }\n const 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}\n\nfunction createTransactionConstructor(db) {\n return makeClassConstructor(Transaction.prototype, function Transaction(mode, storeNames, dbschema, chromeTransactionDurability, parent) {\n this.db = db;\n this.mode = mode;\n this.storeNames = storeNames;\n this.schema = dbschema;\n this.chromeTransactionDurability = chromeTransactionDurability;\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 DexiePromise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this._completion.then(() => {\n this.active = false;\n this.on.complete.fire();\n }, 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, isPrimKey) {\n return {\n name,\n keyPath,\n unique,\n multi,\n auto,\n compound,\n src: (unique && !isPrimKey ? '&' : '') + (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,\n primKey,\n indexes,\n mappedClass: null,\n idxByName: arrayToObject(indexes, index => [index.name, index])\n };\n}\n\nfunction safariMultiStoreFix(storeNames) {\n return storeNames.length === 1 ? storeNames[0] : storeNames;\n}\nlet getMaxKey = (IdbKeyRange) => {\n try {\n IdbKeyRange.only([[]]);\n getMaxKey = () => [[]];\n return [[]];\n }\n catch (e) {\n getMaxKey = () => maxString;\n return maxString;\n }\n};\n\nfunction getKeyExtractor(keyPath) {\n if (keyPath == null) {\n return () => undefined;\n }\n else if (typeof keyPath === 'string') {\n return getSinglePathKeyExtractor(keyPath);\n }\n else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\nfunction getSinglePathKeyExtractor(keyPath) {\n const split = keyPath.split('.');\n if (split.length === 1) {\n return obj => obj[keyPath];\n }\n else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n\nfunction arrayify(arrayLike) {\n return [].slice.call(arrayLike);\n}\nlet _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, IdbKeyRange, tmpTrans) {\n function extractSchema(db, trans) {\n const tables = arrayify(db.objectStoreNames);\n return {\n schema: {\n name: db.name,\n tables: tables.map(table => trans.objectStore(table)).map(store => {\n const { keyPath, autoIncrement } = store;\n const compound = isArray(keyPath);\n const outbound = keyPath == null;\n const indexByKeyPath = {};\n const result = {\n name: store.name,\n primaryKey: {\n name: null,\n isPrimaryKey: true,\n outbound,\n compound,\n keyPath,\n autoIncrement,\n unique: true,\n extractKey: getKeyExtractor(keyPath)\n },\n indexes: arrayify(store.indexNames).map(indexName => store.index(indexName))\n .map(index => {\n const { name, unique, multiEntry, keyPath } = index;\n const compound = isArray(keyPath);\n const result = {\n name,\n compound,\n keyPath,\n unique,\n multiEntry,\n extractKey: getKeyExtractor(keyPath)\n };\n indexByKeyPath[getKeyPathAlias(keyPath)] = result;\n return result;\n }),\n getIndexByKeyPath: (keyPath) => 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 const { lower, upper, lowerOpen, upperOpen } = range;\n const 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 const tableName = tableSchema.name;\n function mutate({ trans, type, keys, values, range }) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = trans.objectStore(tableName);\n const outbound = store.keyPath == null;\n const isAddOrPut = type === \"put\" || type === \"add\";\n if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange')\n throw new Error(\"Invalid operation type: \" + type);\n const { length } = keys || values || { length: 1 };\n if (keys && values && keys.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 let req;\n const reqs = [];\n const failures = [];\n let numFailures = 0;\n const errorHandler = event => {\n ++numFailures;\n preventDefault(event);\n };\n if (type === 'deleteRange') {\n if (range.type === 4 )\n return resolve({ numFailures, failures, results: [], lastResult: undefined });\n if (range.type === 3 )\n reqs.push(req = store.clear());\n else\n reqs.push(req = store.delete(makeIDBKeyRange(range)));\n }\n else {\n const [args1, args2] = isAddOrPut ?\n outbound ?\n [values, keys] :\n [values, null] :\n [keys, null];\n if (isAddOrPut) {\n for (let i = 0; i < length; ++i) {\n reqs.push(req = (args2 && args2[i] !== undefined ?\n store[type](args1[i], args2[i]) :\n store[type](args1[i])));\n req.onerror = errorHandler;\n }\n }\n else {\n for (let i = 0; i < length; ++i) {\n reqs.push(req = store[type](args1[i]));\n req.onerror = errorHandler;\n }\n }\n }\n const done = event => {\n const lastResult = event.target.result;\n reqs.forEach((req, i) => req.error != null && (failures[i] = req.error));\n resolve({\n numFailures,\n failures,\n results: type === \"delete\" ? keys : reqs.map(req => req.result),\n lastResult\n });\n };\n req.onerror = event => {\n errorHandler(event);\n done(event);\n };\n req.onsuccess = done;\n });\n }\n function openCursor({ trans, values, query, reverse, unique }) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const { index, range } = query;\n const store = trans.objectStore(tableName);\n const source = index.isPrimaryKey ?\n store :\n store.index(index.name);\n const direction = reverse ?\n unique ?\n \"prevunique\" :\n \"prev\" :\n unique ?\n \"nextunique\" :\n \"next\";\n const 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(ev => {\n const cursor = req.result;\n if (!cursor) {\n resolve(null);\n return;\n }\n cursor.___id = ++_id_counter;\n cursor.done = false;\n const _cursorContinue = cursor.continue.bind(cursor);\n let _cursorContinuePrimaryKey = cursor.continuePrimaryKey;\n if (_cursorContinuePrimaryKey)\n _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor);\n const _cursorAdvance = cursor.advance.bind(cursor);\n const doThrowCursorIsNotStarted = () => { throw new Error(\"Cursor not started\"); };\n const doThrowCursorIsStopped = () => { 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 let gotOne = 1;\n return this.start(() => gotOne-- ? this.continue() : this.stop()).then(() => this);\n };\n cursor.start = (callback) => {\n const iterationPromise = new Promise((resolveIteration, rejectIteration) => {\n resolveIteration = wrap(resolveIteration);\n req.onerror = eventRejectHandler(rejectIteration);\n cursor.fail = rejectIteration;\n cursor.stop = value => {\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped;\n resolveIteration(value);\n };\n });\n const guardedCallback = () => {\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 = () => { throw new Error(\"Cursor behind last entry\"); };\n cursor.stop();\n }\n };\n req.onsuccess = wrap(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 (request) => {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const { trans, values, limit, query } = request;\n const nonInfinitLimit = limit === Infinity ? undefined : limit;\n const { index, range } = query;\n const store = trans.objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n if (limit === 0)\n return resolve({ result: [] });\n if (hasGetAll) {\n const req = values ?\n source.getAll(idbKeyRange, nonInfinitLimit) :\n source.getAllKeys(idbKeyRange, nonInfinitLimit);\n req.onsuccess = event => resolve({ result: event.target.result });\n req.onerror = eventRejectHandler(reject);\n }\n else {\n let count = 0;\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(idbKeyRange) :\n source.openKeyCursor(idbKeyRange);\n const result = [];\n req.onsuccess = event => {\n const cursor = req.result;\n if (!cursor)\n return resolve({ result });\n result.push(values ? cursor.value : cursor.primaryKey);\n if (++count === limit)\n return resolve({ result });\n cursor.continue();\n };\n req.onerror = eventRejectHandler(reject);\n }\n });\n };\n }\n return {\n name: tableName,\n schema: tableSchema,\n mutate,\n getMany({ trans, keys }) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = trans.objectStore(tableName);\n const length = keys.length;\n const result = new Array(length);\n let keyCount = 0;\n let callbackCount = 0;\n let req;\n const successHandler = event => {\n const req = event.target;\n if ((result[req._pos] = req.result) != null)\n ;\n if (++callbackCount === keyCount)\n resolve(result);\n };\n const errorHandler = eventRejectHandler(reject);\n for (let i = 0; i < length; ++i) {\n const key = keys[i];\n if (key != null) {\n req = store.get(keys[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({ trans, key }) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = trans.objectStore(tableName);\n const req = store.get(key);\n req.onsuccess = event => resolve(event.target.result);\n req.onerror = eventRejectHandler(reject);\n });\n },\n query: query(hasGetAll),\n openCursor,\n count({ query, trans }) {\n const { index, range } = query;\n return new Promise((resolve, reject) => {\n const store = trans.objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n const req = idbKeyRange ? source.count(idbKeyRange) : source.count();\n req.onsuccess = wrap(ev => resolve(ev.target.result));\n req.onerror = eventRejectHandler(reject);\n });\n }\n };\n }\n const { schema, hasGetAll } = extractSchema(db, tmpTrans);\n const tables = schema.tables.map(tableSchema => createDbCoreTable(tableSchema));\n const tableMap = {};\n tables.forEach(table => tableMap[table.name] = table);\n return {\n stack: \"dbcore\",\n transaction: db.transaction.bind(db),\n table(name) {\n const result = tableMap[name];\n if (!result)\n throw new Error(`Table '${name}' not found`);\n return tableMap[name];\n },\n MIN_KEY: -Infinity,\n MAX_KEY: getMaxKey(IdbKeyRange),\n schema\n };\n}\n\nfunction createMiddlewareStack(stackImpl, middlewares) {\n return middlewares.reduce((down, { create }) => ({ ...down, ...create(down) }), stackImpl);\n}\nfunction createMiddlewareStacks(middlewares, idbdb, { IDBKeyRange, indexedDB }, tmpTrans) {\n const dbcore = createMiddlewareStack(createDBCore(idbdb, IDBKeyRange, tmpTrans), middlewares.dbcore);\n return {\n dbcore\n };\n}\nfunction generateMiddlewareStacks({ _novip: db }, tmpTrans) {\n const idbdb = tmpTrans.db;\n const stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans);\n db.core = stacks.dbcore;\n db.tables.forEach(table => {\n const tableName = table.name;\n if (db.core.schema.tables.some(tbl => 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({ _novip: db }, objs, tableNames, dbschema) {\n tableNames.forEach(tableName => {\n const schema = dbschema[tableName];\n objs.forEach(obj => {\n const propDesc = getPropertyDescriptor(obj, tableName);\n if (!propDesc || (\"value\" in propDesc && propDesc.value === undefined)) {\n if (obj === db.Transaction.prototype || obj instanceof db.Transaction) {\n setProp(obj, tableName, {\n get() { return this.table(tableName); },\n set(value) {\n defineProperty(this, tableName, { value, writable: true, configurable: true, enumerable: true });\n }\n });\n }\n else {\n obj[tableName] = new db.Table(tableName, schema);\n }\n }\n });\n });\n}\nfunction removeTablesApi({ _novip: db }, objs) {\n objs.forEach(obj => {\n for (let 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 const globalSchema = db._dbSchema;\n const trans = db._createTransaction('readwrite', db._storeNames, globalSchema);\n trans.create(idbUpgradeTrans);\n trans._completion.catch(reject);\n const rejectTransaction = trans._reject.bind(trans);\n const transless = PSD.transless || PSD;\n newScope(() => {\n PSD.trans = trans;\n PSD.transless = transless;\n if (oldVersion === 0) {\n keys(globalSchema).forEach(tableName => {\n createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);\n });\n generateMiddlewareStacks(db, idbUpgradeTrans);\n DexiePromise.follow(() => db.on.populate.fire(trans)).catch(rejectTransaction);\n }\n else\n updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans).catch(rejectTransaction);\n });\n}\nfunction updateTablesAndIndexes({ _novip: db }, oldVersion, trans, idbUpgradeTrans) {\n const queue = [];\n const versions = db._versions;\n let globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n let anyContentUpgraderHasRun = false;\n const versToRun = versions.filter(v => v._cfg.version >= oldVersion);\n versToRun.forEach(version => {\n queue.push(() => {\n const oldSchema = globalSchema;\n const newSchema = version._cfg.dbschema;\n adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans);\n adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans);\n globalSchema = db._dbSchema = newSchema;\n const diff = getSchemaDiff(oldSchema, newSchema);\n diff.add.forEach(tuple => {\n createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes);\n });\n diff.change.forEach(change => {\n if (change.recreate) {\n throw new exceptions.Upgrade(\"Not yet support for changing primary key\");\n }\n else {\n const store = idbUpgradeTrans.objectStore(change.name);\n change.add.forEach(idx => addIndex(store, idx));\n change.change.forEach(idx => {\n store.deleteIndex(idx.name);\n addIndex(store, idx);\n });\n change.del.forEach(idxName => store.deleteIndex(idxName));\n }\n });\n const contentUpgrade = version._cfg.contentUpgrade;\n if (contentUpgrade && version._cfg.version > oldVersion) {\n generateMiddlewareStacks(db, idbUpgradeTrans);\n trans._memoizedTables = {};\n anyContentUpgraderHasRun = true;\n let upgradeSchema = shallowClone(newSchema);\n diff.del.forEach(table => {\n upgradeSchema[table] = oldSchema[table];\n });\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema), upgradeSchema);\n trans.schema = upgradeSchema;\n const contentUpgradeIsAsync = isAsyncFunction(contentUpgrade);\n if (contentUpgradeIsAsync) {\n incrementExpectedAwaits();\n }\n let returnValue;\n const promiseFollowed = DexiePromise.follow(() => {\n returnValue = contentUpgrade(trans);\n if (returnValue) {\n if (contentUpgradeIsAsync) {\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n }\n }\n });\n return (returnValue && typeof returnValue.then === 'function' ?\n DexiePromise.resolve(returnValue) : promiseFollowed.then(() => returnValue));\n }\n });\n queue.push(idbtrans => {\n if (!anyContentUpgraderHasRun || !hasIEDeleteObjectStoreBug) {\n const 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 ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) :\n DexiePromise.resolve();\n }\n return runQueue().then(() => {\n createMissingTables(globalSchema, idbUpgradeTrans);\n });\n}\nfunction getSchemaDiff(oldSchema, newSchema) {\n const diff = {\n del: [],\n add: [],\n change: []\n };\n let table;\n for (table in oldSchema) {\n if (!newSchema[table])\n diff.del.push(table);\n }\n for (table in newSchema) {\n const oldDef = oldSchema[table], newDef = newSchema[table];\n if (!oldDef) {\n diff.add.push([table, newDef]);\n }\n else {\n const change = {\n name: table,\n def: newDef,\n recreate: false,\n del: [],\n add: [],\n change: []\n };\n if ((\n '' + (oldDef.primKey.keyPath || '')) !== ('' + (newDef.primKey.keyPath || '')) ||\n (oldDef.primKey.auto !== newDef.primKey.auto && !isIEOrEdge))\n {\n change.recreate = true;\n diff.change.push(change);\n }\n else {\n const oldIndexes = oldDef.idxByName;\n const newIndexes = newDef.idxByName;\n let idxName;\n for (idxName in oldIndexes) {\n if (!newIndexes[idxName])\n change.del.push(idxName);\n }\n for (idxName in newIndexes) {\n const 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 const store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ?\n { keyPath: primKey.keyPath, autoIncrement: primKey.auto } :\n { autoIncrement: primKey.auto });\n indexes.forEach(idx => addIndex(store, idx));\n return store;\n}\nfunction createMissingTables(newSchema, idbtrans) {\n keys(newSchema).forEach(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 [].slice.call(idbtrans.db.objectStoreNames).forEach(storeName => newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName));\n}\nfunction addIndex(store, idx) {\n store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi });\n}\nfunction buildGlobalSchema(db, idbdb, tmpTrans) {\n const globalSchema = {};\n const dbStoreNames = slice(idbdb.objectStoreNames, 0);\n dbStoreNames.forEach(storeName => {\n const store = tmpTrans.objectStore(storeName);\n let keyPath = store.keyPath;\n const primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || \"\", false, false, !!store.autoIncrement, keyPath && typeof keyPath !== \"string\", true);\n const indexes = [];\n for (let j = 0; j < store.indexNames.length; ++j) {\n const 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\", false);\n indexes.push(index);\n }\n globalSchema[storeName] = createTableSchema(storeName, primKey, indexes);\n });\n return globalSchema;\n}\nfunction readGlobalSchema({ _novip: db }, idbdb, tmpTrans) {\n db.verno = idbdb.version / 10;\n const globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans);\n db._storeNames = slice(idbdb.objectStoreNames, 0);\n setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema);\n}\nfunction verifyInstalledSchema(db, tmpTrans) {\n const installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans);\n const diff = getSchemaDiff(installedSchema, db._dbSchema);\n return !(diff.add.length || diff.change.some(ch => ch.add.length || ch.change.length));\n}\nfunction adjustToExistingIndexNames({ _novip: db }, schema, idbtrans) {\n const storeNames = idbtrans.db.objectStoreNames;\n for (let i = 0; i < storeNames.length; ++i) {\n const storeName = storeNames[i];\n const store = idbtrans.objectStore(storeName);\n db._hasGetAll = 'getAll' in store;\n for (let j = 0; j < store.indexNames.length; ++j) {\n const indexName = store.indexNames[j];\n const keyPath = store.index(indexName).keyPath;\n const dexieName = typeof keyPath === 'string' ? keyPath : \"[\" + slice(keyPath).join('+') + \"]\";\n if (schema[storeName]) {\n const indexSpec = schema[storeName].idxByName[dexieName];\n if (indexSpec) {\n indexSpec.name = indexName;\n delete schema[storeName].idxByName[dexieName];\n schema[storeName].idxByName[indexName] = indexSpec;\n }\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(primKeyAndIndexes) {\n return primKeyAndIndexes.split(',').map((index, indexNum) => {\n index = index.trim();\n const name = index.replace(/([&*]|\\+\\+)/g, \"\");\n const keyPath = /^\\[/.test(name) ? name.match(/^\\[(.*)\\]$/)[1].split('+') : name;\n return createIndexSpec(name, keyPath || null, /\\&/.test(index), /\\*/.test(index), /\\+\\+/.test(index), isArray(keyPath), indexNum === 0);\n });\n}\n\nclass Version {\n _parseStoresSpec(stores, outSchema) {\n keys(stores).forEach(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(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 stores(stores) {\n const db = this.db;\n this._cfg.storesSource = this._cfg.storesSource ?\n extend(this._cfg.storesSource, stores) :\n stores;\n const versions = db._versions;\n const storesSpec = {};\n let dbschema = {};\n versions.forEach(version => {\n extend(storesSpec, version._cfg.storesSource);\n dbschema = (version._cfg.dbschema = {});\n version._parseStoresSpec(storesSpec, dbschema);\n });\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 upgrade(upgradeFunction) {\n this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction);\n return this;\n }\n}\n\nfunction createVersionConstructor(db) {\n return makeClassConstructor(Version.prototype, function Version(versionNumber) {\n this.db = db;\n this._cfg = {\n version: versionNumber,\n storesSource: null,\n dbschema: {},\n tables: {},\n contentUpgrade: null\n };\n });\n}\n\nfunction getDbNamesTable(indexedDB, IDBKeyRange) {\n let dbNamesDB = indexedDB[\"_dbNamesDB\"];\n if (!dbNamesDB) {\n dbNamesDB = indexedDB[\"_dbNamesDB\"] = new Dexie$1(DBNAMES_DB, {\n addons: [],\n indexedDB,\n IDBKeyRange,\n });\n dbNamesDB.version(1).stores({ dbnames: \"name\" });\n }\n return dbNamesDB.table(\"dbnames\");\n}\nfunction hasDatabasesNative(indexedDB) {\n return indexedDB && typeof indexedDB.databases === \"function\";\n}\nfunction getDatabaseNames({ indexedDB, IDBKeyRange, }) {\n return hasDatabasesNative(indexedDB)\n ? Promise.resolve(indexedDB.databases()).then((infos) => infos\n .map((info) => info.name)\n .filter((name) => name !== DBNAMES_DB))\n : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys();\n}\nfunction _onDatabaseCreated({ indexedDB, IDBKeyRange }, name) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).put({ name }).catch(nop);\n}\nfunction _onDatabaseDeleted({ indexedDB, IDBKeyRange }, name) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop);\n}\n\nfunction vip(fn) {\n return newScope(function () {\n PSD.letThrough = true;\n return fn();\n });\n}\n\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nfunction dexieOpen(db) {\n const state = db._state;\n const { indexedDB } = db._deps;\n if (state.isBeingOpened || db.idbdb)\n return state.dbReadyPromise.then(() => 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 const openCanceller = state.openCanceller;\n function throwIfCancelled() {\n if (state.openCanceller !== openCanceller)\n throw new exceptions.DatabaseClosed('db.open() was cancelled');\n }\n let resolveDbReady = state.dbReadyResolve,\n upgradeTransaction = null, wasCreated = false;\n return DexiePromise.race([openCanceller, (typeof navigator === 'undefined' ? DexiePromise.resolve() : idbReady()).then(() => new DexiePromise((resolve, reject) => {\n throwIfCancelled();\n if (!indexedDB)\n throw new exceptions.MissingAPI();\n const dbName = db.name;\n const req = state.autoSchema ?\n indexedDB.open(dbName) :\n indexedDB.open(dbName, Math.round(db.verno * 10));\n if (!req)\n throw new exceptions.MissingAPI();\n req.onerror = eventRejectHandler(reject);\n req.onblocked = wrap(db._fireOnBlocked);\n req.onupgradeneeded = wrap(e => {\n upgradeTransaction = req.transaction;\n if (state.autoSchema && !db._options.allowEmptyDB) {\n req.onerror = preventDefault;\n upgradeTransaction.abort();\n req.result.close();\n const delreq = indexedDB.deleteDatabase(dbName);\n delreq.onsuccess = delreq.onerror = wrap(() => {\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 wasCreated = oldVer < 1;\n db._novip.idbdb = req.result;\n runUpgraders(db, oldVer / 10, upgradeTransaction, reject);\n }\n }, reject);\n req.onsuccess = wrap(() => {\n upgradeTransaction = null;\n const idbdb = db._novip.idbdb = req.result;\n const objectStoreNames = slice(idbdb.objectStoreNames);\n if (objectStoreNames.length > 0)\n try {\n const tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly');\n if (state.autoSchema)\n readGlobalSchema(db, idbdb, tmpTrans);\n else {\n adjustToExistingIndexNames(db, db._dbSchema, tmpTrans);\n if (!verifyInstalledSchema(db, tmpTrans)) {\n console.warn(`Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Some queries may fail.`);\n }\n }\n generateMiddlewareStacks(db, tmpTrans);\n }\n catch (e) {\n }\n connections.push(db);\n idbdb.onversionchange = wrap(ev => {\n state.vcFired = true;\n db.on(\"versionchange\").fire(ev);\n });\n idbdb.onclose = wrap(ev => {\n db.on(\"close\").fire(ev);\n });\n if (wasCreated)\n _onDatabaseCreated(db._deps, dbName);\n resolve();\n }, reject);\n }))]).then(() => {\n throwIfCancelled();\n state.onReadyBeingFired = [];\n return DexiePromise.resolve(vip(() => db.on.ready.fire(db.vip))).then(function fireRemainders() {\n if (state.onReadyBeingFired.length > 0) {\n let remainders = state.onReadyBeingFired.reduce(promisableChain, nop);\n state.onReadyBeingFired = [];\n return DexiePromise.resolve(vip(() => remainders(db.vip))).then(fireRemainders);\n }\n });\n }).finally(() => {\n state.onReadyBeingFired = null;\n state.isBeingOpened = false;\n }).then(() => {\n return db;\n }).catch(err => {\n state.dbOpenError = err;\n try {\n upgradeTransaction && upgradeTransaction.abort();\n }\n catch (_a) { }\n if (openCanceller === state.openCanceller) {\n db._close();\n }\n return rejection(err);\n }).finally(() => {\n state.openComplete = true;\n resolveDbReady();\n });\n}\n\nfunction awaitIterator(iterator) {\n var callNext = result => iterator.next(result), doThrow = error => iterator.throw(error), onSuccess = step(callNext), onError = step(doThrow);\n function step(getNext) {\n return (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 DexiePromise.resolve().then(() => {\n const transless = PSD.transless || PSD;\n const trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction);\n const zoneProps = {\n trans: trans,\n transless: transless\n };\n if (parentTransaction) {\n trans.idbtrans = parentTransaction.idbtrans;\n }\n else {\n trans.create();\n }\n const scopeFuncIsAsync = isAsyncFunction(scopeFunc);\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n let returnValue;\n const promiseFollowed = DexiePromise.follow(() => {\n returnValue = scopeFunc.call(trans, trans);\n if (returnValue) {\n if (scopeFuncIsAsync) {\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 DexiePromise.resolve(returnValue).then(x => trans.active ?\n x\n : rejection(new exceptions.PrematureCommit(\"Transaction committed too early. See http://bit.ly/2kdckMn\")))\n : promiseFollowed.then(() => returnValue)).then(x => {\n if (parentTransaction)\n trans._resolve();\n return trans._completion.then(() => x);\n }).catch(e => {\n trans._reject(e);\n return rejection(e);\n });\n });\n}\n\nfunction pad(a, value, count) {\n const result = isArray(a) ? a.slice() : [a];\n for (let i = 0; i < count; ++i)\n result.push(value);\n return result;\n}\nfunction createVirtualIndexMiddleware(down) {\n return {\n ...down,\n table(tableName) {\n const table = down.table(tableName);\n const { schema } = table;\n const indexLookup = {};\n const allVirtualIndexes = [];\n function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) {\n const keyPathAlias = getKeyPathAlias(keyPath);\n const indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []);\n const keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length;\n const isVirtual = keyTail > 0;\n const virtualIndex = {\n ...lowLevelIndex,\n isVirtual,\n keyTail,\n keyLength,\n extractKey: getKeyExtractor(keyPath),\n unique: !isVirtual && lowLevelIndex.unique\n };\n indexList.push(virtualIndex);\n if (!virtualIndex.isPrimaryKey) {\n allVirtualIndexes.push(virtualIndex);\n }\n if (keyLength > 1) {\n const virtualKeyPath = keyLength === 2 ?\n keyPath[0] :\n keyPath.slice(0, keyLength - 1);\n addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex);\n }\n indexList.sort((a, b) => a.keyTail - b.keyTail);\n return virtualIndex;\n }\n const primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey);\n indexLookup[\":id\"] = [primaryKey];\n for (const index of schema.indexes) {\n addVirtualIndexes(index.keyPath, 0, index);\n }\n function findBestIndex(keyPath) {\n const 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 const index = req.query.index;\n return index.isVirtual ? {\n ...req,\n query: {\n index,\n range: translateRange(req.query.range, index.keyTail)\n }\n } : req;\n }\n const result = {\n ...table,\n schema: {\n ...schema,\n primaryKey,\n indexes: allVirtualIndexes,\n getIndexByKeyPath: findBestIndex\n },\n count(req) {\n return table.count(translateRequest(req));\n },\n query(req) {\n return table.query(translateRequest(req));\n },\n openCursor(req) {\n const { keyTail, isVirtual, keyLength } = req.query.index;\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(cursor.key.slice(0, keyLength)\n .concat(req.reverse\n ? down.MIN_KEY\n : down.MAX_KEY, keyTail)) :\n cursor.continue();\n }\n const virtualCursor = Object.create(cursor, {\n continue: { value: _continue },\n continuePrimaryKey: {\n value(key, primaryKey) {\n cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey);\n }\n },\n primaryKey: {\n get() {\n return cursor.primaryKey;\n }\n },\n key: {\n get() {\n const key = cursor.key;\n return keyLength === 1 ?\n key[0] :\n key.slice(0, keyLength);\n }\n },\n value: {\n get() {\n return cursor.value;\n }\n }\n });\n return virtualCursor;\n }\n return table.openCursor(translateRequest(req))\n .then(cursor => cursor && createVirtualCursor(cursor));\n }\n };\n return result;\n }\n };\n}\nconst virtualIndexMiddleware = {\n stack: \"dbcore\",\n name: \"VirtualIndexMiddleware\",\n level: 1,\n create: createVirtualIndexMiddleware\n};\n\nfunction getObjectDiff(a, b, rv, prfx) {\n rv = rv || {};\n prfx = prfx || '';\n keys(a).forEach((prop) => {\n if (!hasOwn(b, prop)) {\n rv[prfx + prop] = undefined;\n }\n else {\n var ap = a[prop], bp = b[prop];\n if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) {\n const apTypeName = toStringTag(ap);\n const bpTypeName = toStringTag(bp);\n if (apTypeName !== bpTypeName) {\n rv[prfx + prop] = b[prop];\n }\n else if (apTypeName === 'Object') {\n getObjectDiff(ap, bp, rv, prfx + prop + '.');\n }\n else if (ap !== bp) {\n rv[prfx + prop] = b[prop];\n }\n }\n else if (ap !== bp)\n rv[prfx + prop] = b[prop];\n }\n });\n keys(b).forEach((prop) => {\n if (!hasOwn(a, prop)) {\n rv[prfx + prop] = b[prop];\n }\n });\n return rv;\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}\n\nconst hooksMiddleware = {\n stack: \"dbcore\",\n name: \"HooksMiddleware\",\n level: 2,\n create: (downCore) => ({\n ...downCore,\n table(tableName) {\n const downTable = downCore.table(tableName);\n const { primaryKey } = downTable.schema;\n const tableMiddleware = {\n ...downTable,\n mutate(req) {\n const dxTrans = PSD.trans;\n const { deleting, creating, updating } = dxTrans.table(tableName).hook;\n switch (req.type) {\n case 'add':\n if (creating.fire === nop)\n break;\n return dxTrans._promise('readwrite', () => addPutOrDelete(req), true);\n case 'put':\n if (creating.fire === nop && updating.fire === nop)\n break;\n return dxTrans._promise('readwrite', () => addPutOrDelete(req), true);\n case 'delete':\n if (deleting.fire === nop)\n break;\n return dxTrans._promise('readwrite', () => addPutOrDelete(req), true);\n case 'deleteRange':\n if (deleting.fire === nop)\n break;\n return dxTrans._promise('readwrite', () => deleteRange(req), true);\n }\n return downTable.mutate(req);\n function addPutOrDelete(req) {\n const dxTrans = PSD.trans;\n const keys = req.keys || getEffectiveKeys(primaryKey, req);\n if (!keys)\n throw new Error(\"Keys missing\");\n req = req.type === 'add' || req.type === 'put' ?\n { ...req, keys } :\n { ...req };\n if (req.type !== 'delete')\n req.values = [...req.values];\n if (req.keys)\n req.keys = [...req.keys];\n return getExistingValues(downTable, req, keys).then(existingValues => {\n const contexts = keys.map((key, i) => {\n const existingValue = existingValues[i];\n const 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 const 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 const objectDiff = getObjectDiff(existingValue, req.values[i]);\n const additionalChanges = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans);\n if (additionalChanges) {\n const requestedValue = req.values[i];\n Object.keys(additionalChanges).forEach(keyPath => {\n if (hasOwn(requestedValue, keyPath)) {\n requestedValue[keyPath] = additionalChanges[keyPath];\n }\n else {\n setByKeyPath(requestedValue, keyPath, additionalChanges[keyPath]);\n }\n });\n }\n }\n return ctx;\n });\n return downTable.mutate(req).then(({ failures, results, numFailures, lastResult }) => {\n for (let i = 0; i < keys.length; ++i) {\n const primKey = results ? results[i] : keys[i];\n const 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, results, numFailures, lastResult };\n }).catch(error => {\n contexts.forEach(ctx => 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, values: false, query: { index: primaryKey, range }, limit })\n .then(({ result }) => {\n return addPutOrDelete({ type: 'delete', keys: result, trans }).then(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, { ...range, lower: result[result.length - 1], lowerOpen: true }, limit);\n }\n });\n });\n }\n }\n };\n return tableMiddleware;\n },\n })\n};\nfunction getExistingValues(table, req, effectiveKeys) {\n return req.type === \"add\"\n ? Promise.resolve([])\n : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: \"immutable\" });\n}\n\nfunction getFromTransactionCache(keys, cache, clone) {\n try {\n if (!cache)\n return null;\n if (cache.keys.length < keys.length)\n return null;\n const result = [];\n for (let i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) {\n if (cmp(cache.keys[i], keys[j]) !== 0)\n continue;\n result.push(clone ? deepClone(cache.values[i]) : cache.values[i]);\n ++j;\n }\n return result.length === keys.length ? result : null;\n }\n catch (_a) {\n return null;\n }\n}\nconst cacheExistingValuesMiddleware = {\n stack: \"dbcore\",\n level: -1,\n create: (core) => {\n return {\n table: (tableName) => {\n const table = core.table(tableName);\n return {\n ...table,\n getMany: (req) => {\n if (!req.cache) {\n return table.getMany(req);\n }\n const cachedResult = getFromTransactionCache(req.keys, req.trans[\"_cache\"], req.cache === \"clone\");\n if (cachedResult) {\n return DexiePromise.resolve(cachedResult);\n }\n return table.getMany(req).then((res) => {\n req.trans[\"_cache\"] = {\n keys: req.keys,\n values: req.cache === \"clone\" ? deepClone(res) : res,\n };\n return res;\n });\n },\n mutate: (req) => {\n if (req.type !== \"add\")\n req.trans[\"_cache\"] = null;\n return table.mutate(req);\n },\n };\n },\n };\n },\n};\n\nfunction isEmptyRange(node) {\n return !(\"from\" in node);\n}\nconst RangeSet = function (fromOrTree, to) {\n if (this) {\n extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 });\n }\n else {\n const rv = new RangeSet();\n if (fromOrTree && (\"d\" in fromOrTree)) {\n extend(rv, fromOrTree);\n }\n return rv;\n }\n};\nprops(RangeSet.prototype, {\n add(rangeSet) {\n mergeRanges(this, rangeSet);\n return this;\n },\n addKey(key) {\n addRange(this, key, key);\n return this;\n },\n addKeys(keys) {\n keys.forEach(key => addRange(this, key, key));\n return this;\n },\n [iteratorSymbol]() {\n return getRangeSetIterator(this);\n }\n});\nfunction addRange(target, from, to) {\n const diff = cmp(from, to);\n if (isNaN(diff))\n return;\n if (diff > 0)\n throw RangeError();\n if (isEmptyRange(target))\n return extend(target, { from, to, d: 1 });\n const left = target.l;\n const right = target.r;\n if (cmp(to, target.from) < 0) {\n left\n ? addRange(left, from, to)\n : (target.l = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n if (cmp(from, target.to) > 0) {\n right\n ? addRange(right, from, to)\n : (target.r = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n if (cmp(from, target.from) < 0) {\n target.from = from;\n target.l = null;\n target.d = right ? right.d + 1 : 1;\n }\n if (cmp(to, target.to) > 0) {\n target.to = to;\n target.r = null;\n target.d = target.l ? target.l.d + 1 : 1;\n }\n const rightWasCutOff = !target.r;\n if (left && !target.l) {\n mergeRanges(target, left);\n }\n if (right && rightWasCutOff) {\n mergeRanges(target, right);\n }\n}\nfunction mergeRanges(target, newSet) {\n function _addRangeSet(target, { from, to, l, r }) {\n addRange(target, from, to);\n if (l)\n _addRangeSet(target, l);\n if (r)\n _addRangeSet(target, r);\n }\n if (!isEmptyRange(newSet))\n _addRangeSet(target, newSet);\n}\nfunction rangesOverlap(rangeSet1, rangeSet2) {\n const i1 = getRangeSetIterator(rangeSet2);\n let nextResult1 = i1.next();\n if (nextResult1.done)\n return false;\n let a = nextResult1.value;\n const i2 = getRangeSetIterator(rangeSet1);\n let nextResult2 = i2.next(a.from);\n let b = nextResult2.value;\n while (!nextResult1.done && !nextResult2.done) {\n if (cmp(b.from, a.to) <= 0 && cmp(b.to, a.from) >= 0)\n return true;\n cmp(a.from, b.from) < 0\n ? (a = (nextResult1 = i1.next(b.from)).value)\n : (b = (nextResult2 = i2.next(a.from)).value);\n }\n return false;\n}\nfunction getRangeSetIterator(node) {\n let state = isEmptyRange(node) ? null : { s: 0, n: node };\n return {\n next(key) {\n const keyProvided = arguments.length > 0;\n while (state) {\n switch (state.s) {\n case 0:\n state.s = 1;\n if (keyProvided) {\n while (state.n.l && cmp(key, state.n.from) < 0)\n state = { up: state, n: state.n.l, s: 1 };\n }\n else {\n while (state.n.l)\n state = { up: state, n: state.n.l, s: 1 };\n }\n case 1:\n state.s = 2;\n if (!keyProvided || cmp(key, state.n.to) <= 0)\n return { value: state.n, done: false };\n case 2:\n if (state.n.r) {\n state.s = 3;\n state = { up: state, n: state.n.r, s: 0 };\n continue;\n }\n case 3:\n state = state.up;\n }\n }\n return { done: true };\n },\n };\n}\nfunction rebalance(target) {\n var _a, _b;\n const diff = (((_a = target.r) === null || _a === void 0 ? void 0 : _a.d) || 0) - (((_b = target.l) === null || _b === void 0 ? void 0 : _b.d) || 0);\n const r = diff > 1 ? \"r\" : diff < -1 ? \"l\" : \"\";\n if (r) {\n const l = r === \"r\" ? \"l\" : \"r\";\n const rootClone = { ...target };\n const oldRootRight = target[r];\n target.from = oldRootRight.from;\n target.to = oldRootRight.to;\n target[r] = oldRootRight[r];\n rootClone[r] = oldRootRight[l];\n target[l] = rootClone;\n rootClone.d = computeDepth(rootClone);\n }\n target.d = computeDepth(target);\n}\nfunction computeDepth({ r, l }) {\n return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1;\n}\n\nconst observabilityMiddleware = {\n stack: \"dbcore\",\n level: 0,\n create: (core) => {\n const dbName = core.schema.name;\n const FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY);\n return {\n ...core,\n table: (tableName) => {\n const table = core.table(tableName);\n const { schema } = table;\n const { primaryKey } = schema;\n const { extractKey, outbound } = primaryKey;\n const tableClone = {\n ...table,\n mutate: (req) => {\n const trans = req.trans;\n const mutatedParts = trans.mutatedParts || (trans.mutatedParts = {});\n const getRangeSet = (indexName) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (mutatedParts[part] ||\n (mutatedParts[part] = new RangeSet()));\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n const { type } = req;\n let [keys, newObjs] = req.type === \"deleteRange\"\n ? [req.range]\n : req.type === \"delete\"\n ? [req.keys]\n : req.values.length < 50\n ? [[], req.values]\n : [];\n const oldCache = req.trans[\"_cache\"];\n return table.mutate(req).then((res) => {\n if (isArray(keys)) {\n if (type !== \"delete\")\n keys = res.results;\n pkRangeSet.addKeys(keys);\n const oldObjs = getFromTransactionCache(keys, oldCache);\n if (!oldObjs && type !== \"add\") {\n delsRangeSet.addKeys(keys);\n }\n if (oldObjs || newObjs) {\n trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs);\n }\n }\n else if (keys) {\n const range = { from: keys.lower, to: keys.upper };\n delsRangeSet.add(range);\n pkRangeSet.add(range);\n }\n else {\n pkRangeSet.add(FULL_RANGE);\n delsRangeSet.add(FULL_RANGE);\n schema.indexes.forEach(idx => getRangeSet(idx.name).add(FULL_RANGE));\n }\n return res;\n });\n },\n };\n const getRange = ({ query: { index, range }, }) => {\n var _a, _b;\n return [\n index,\n new RangeSet((_a = range.lower) !== null && _a !== void 0 ? _a : core.MIN_KEY, (_b = range.upper) !== null && _b !== void 0 ? _b : core.MAX_KEY),\n ];\n };\n const readSubscribers = {\n get: (req) => [primaryKey, new RangeSet(req.key)],\n getMany: (req) => [primaryKey, new RangeSet().addKeys(req.keys)],\n count: getRange,\n query: getRange,\n openCursor: getRange,\n };\n keys(readSubscribers).forEach(method => {\n tableClone[method] = function (req) {\n const { subscr } = PSD;\n if (subscr) {\n const getRangeSet = (indexName) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (subscr[part] ||\n (subscr[part] = new RangeSet()));\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n const [queriedIndex, queriedRanges] = readSubscribers[method](req);\n getRangeSet(queriedIndex.name || \"\").add(queriedRanges);\n if (!queriedIndex.isPrimaryKey) {\n if (method === \"count\") {\n delsRangeSet.add(FULL_RANGE);\n }\n else {\n const keysPromise = method === \"query\" &&\n outbound &&\n req.values &&\n table.query({\n ...req,\n values: false,\n });\n return table[method].apply(this, arguments).then((res) => {\n if (method === \"query\") {\n if (outbound && req.values) {\n return keysPromise.then(({ result: resultingKeys }) => {\n pkRangeSet.addKeys(resultingKeys);\n return res;\n });\n }\n const pKeys = req.values\n ? res.result.map(extractKey)\n : res.result;\n if (req.values) {\n pkRangeSet.addKeys(pKeys);\n }\n else {\n delsRangeSet.addKeys(pKeys);\n }\n }\n else if (method === \"openCursor\") {\n const cursor = res;\n const wantValues = req.values;\n return (cursor &&\n Object.create(cursor, {\n key: {\n get() {\n delsRangeSet.addKey(cursor.primaryKey);\n return cursor.key;\n },\n },\n primaryKey: {\n get() {\n const pkey = cursor.primaryKey;\n delsRangeSet.addKey(pkey);\n return pkey;\n },\n },\n value: {\n get() {\n wantValues && pkRangeSet.addKey(cursor.primaryKey);\n return cursor.value;\n },\n },\n }));\n }\n return res;\n });\n }\n }\n }\n return table[method].apply(this, arguments);\n };\n });\n return tableClone;\n },\n };\n },\n};\nfunction trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs) {\n function addAffectedIndex(ix) {\n const rangeSet = getRangeSet(ix.name || \"\");\n function extractKey(obj) {\n return obj != null ? ix.extractKey(obj) : null;\n }\n const addKeyOrKeys = (key) => ix.multiEntry && isArray(key)\n ? key.forEach(key => rangeSet.addKey(key))\n : rangeSet.addKey(key);\n (oldObjs || newObjs).forEach((_, i) => {\n const oldKey = oldObjs && extractKey(oldObjs[i]);\n const newKey = newObjs && extractKey(newObjs[i]);\n if (cmp(oldKey, newKey) !== 0) {\n if (oldKey != null)\n addKeyOrKeys(oldKey);\n if (newKey != null)\n addKeyOrKeys(newKey);\n }\n });\n }\n schema.indexes.forEach(addAffectedIndex);\n}\n\nclass Dexie$1 {\n constructor(name, options) {\n this._middlewares = {};\n this.verno = 0;\n const deps = Dexie$1.dependencies;\n this._options = options = {\n addons: Dexie$1.addons,\n autoOpen: true,\n indexedDB: deps.indexedDB,\n IDBKeyRange: deps.IDBKeyRange,\n ...options\n };\n this._deps = {\n indexedDB: options.indexedDB,\n IDBKeyRange: options.IDBKeyRange\n };\n const { addons, } = options;\n this._dbSchema = {};\n this._versions = [];\n this._storeNames = [];\n this._allTables = {};\n this.idbdb = null;\n this._novip = this;\n const 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 DexiePromise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new DexiePromise((_, reject) => {\n state.cancelOpen = reject;\n });\n this._state = state;\n this.name = name;\n this.on = Events(this, \"populate\", \"blocked\", \"versionchange\", \"close\", { ready: [promisableChain, nop] });\n this.on.ready.subscribe = override(this.on.ready.subscribe, subscribe => {\n return (subscriber, bSticky) => {\n Dexie$1.vip(() => {\n const state = this._state;\n if (state.openComplete) {\n if (!state.dbOpenError)\n DexiePromise.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 const db = this;\n if (!bSticky)\n subscribe(function unsubscribe() {\n db.on.ready.unsubscribe(subscriber);\n db.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\", 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\", 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 = (mode, storeNames, dbschema, parentTransaction) => new this.Transaction(mode, storeNames, dbschema, this._options.chromeTransactionDurability, parentTransaction);\n this._fireOnBlocked = ev => {\n this.on(\"blocked\").fire(ev);\n connections\n .filter(c => c.name === this.name && c !== this && !c._state.vcFired)\n .map(c => c.on(\"versionchange\").fire(ev));\n };\n this.use(virtualIndexMiddleware);\n this.use(hooksMiddleware);\n this.use(observabilityMiddleware);\n this.use(cacheExistingValuesMiddleware);\n this.vip = Object.create(this, { _vip: { value: true } });\n addons.forEach(addon => addon(this));\n }\n version(versionNumber) {\n if (isNaN(versionNumber) || versionNumber < 0.1)\n throw new exceptions.Type(`Given version is not a positive number`);\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 const versions = this._versions;\n var versionInstance = versions.filter(v => 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 versionInstance.stores({});\n this._state.autoSchema = false;\n return versionInstance;\n }\n _whenReady(fn) {\n return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new DexiePromise((resolve, reject) => {\n if (this._state.openComplete) {\n return reject(new exceptions.DatabaseClosed(this._state.dbOpenError));\n }\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 use({ stack, create, level, name }) {\n if (name)\n this.unuse({ stack, name });\n const middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);\n middlewares.push({ stack, create, level: level == null ? 10 : level, name });\n middlewares.sort((a, b) => a.level - b.level);\n return this;\n }\n unuse({ stack, name, create }) {\n if (stack && this._middlewares[stack]) {\n this._middlewares[stack] = this._middlewares[stack].filter(mw => create ? mw.create !== create :\n name ? mw.name !== name :\n false);\n }\n return this;\n }\n open() {\n return dexieOpen(this);\n }\n _close() {\n const state = this._state;\n const idx = connections.indexOf(this);\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._novip.idbdb = null;\n }\n state.dbReadyPromise = new DexiePromise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new DexiePromise((_, reject) => {\n state.cancelOpen = reject;\n });\n }\n close() {\n this._close();\n const state = this._state;\n this._options.autoOpen = false;\n state.dbOpenError = new exceptions.DatabaseClosed();\n if (state.isBeingOpened)\n state.cancelOpen(state.dbOpenError);\n }\n delete() {\n const hasArguments = arguments.length > 0;\n const state = this._state;\n return new DexiePromise((resolve, reject) => {\n const doDelete = () => {\n this.close();\n var req = this._deps.indexedDB.deleteDatabase(this.name);\n req.onsuccess = wrap(() => {\n _onDatabaseDeleted(this._deps, 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 backendDB() {\n return this.idbdb;\n }\n isOpen() {\n return this.idbdb !== null;\n }\n hasBeenClosed() {\n const dbOpenError = this._state.dbOpenError;\n return dbOpenError && (dbOpenError.name === 'DatabaseClosed');\n }\n hasFailed() {\n return this._state.dbOpenError !== null;\n }\n dynamicallyOpened() {\n return this._state.autoSchema;\n }\n get tables() {\n return keys(this._allTables).map(name => this._allTables[name]);\n }\n transaction() {\n const args = extractTransactionArgs.apply(this, arguments);\n return this._transaction.apply(this, args);\n }\n _transaction(mode, tables, scopeFunc) {\n let parentTransaction = PSD.trans;\n if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1)\n parentTransaction = null;\n const onlyIfCompatible = mode.indexOf('?') !== -1;\n mode = mode.replace('!', '').replace('?', '');\n let idbMode, storeNames;\n try {\n storeNames = tables.map(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(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, (_, reject) => { reject(e); }) :\n rejection(e);\n }\n const 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, () => this._whenReady(enterTransaction)) :\n this._whenReady(enterTransaction));\n }\n table(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}\n\nconst symbolObservable = typeof Symbol !== \"undefined\" && \"observable\" in Symbol\n ? Symbol.observable\n : \"@@observable\";\nclass Observable {\n constructor(subscribe) {\n this._subscribe = subscribe;\n }\n subscribe(x, error, complete) {\n return this._subscribe(!x || typeof x === \"function\" ? { next: x, error, complete } : x);\n }\n [symbolObservable]() {\n return this;\n }\n}\n\nfunction extendObservabilitySet(target, newSet) {\n keys(newSet).forEach(part => {\n const rangeSet = target[part] || (target[part] = new RangeSet());\n mergeRanges(rangeSet, newSet[part]);\n });\n return target;\n}\n\nfunction liveQuery(querier) {\n return new Observable((observer) => {\n const scopeFuncIsAsync = isAsyncFunction(querier);\n function execute(subscr) {\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n const exec = () => newScope(querier, { subscr, trans: null });\n const rv = PSD.trans\n ?\n usePSD(PSD.transless, exec)\n : exec();\n if (scopeFuncIsAsync) {\n rv.then(decrementExpectedAwaits, decrementExpectedAwaits);\n }\n return rv;\n }\n let closed = false;\n let accumMuts = {};\n let currentObs = {};\n const subscription = {\n get closed() {\n return closed;\n },\n unsubscribe: () => {\n closed = true;\n globalEvents.storagemutated.unsubscribe(mutationListener);\n },\n };\n observer.start && observer.start(subscription);\n let querying = false, startedListening = false;\n function shouldNotify() {\n return keys(currentObs).some((key) => accumMuts[key] && rangesOverlap(accumMuts[key], currentObs[key]));\n }\n const mutationListener = (parts) => {\n extendObservabilitySet(accumMuts, parts);\n if (shouldNotify()) {\n doQuery();\n }\n };\n const doQuery = () => {\n if (querying || closed)\n return;\n accumMuts = {};\n const subscr = {};\n const ret = execute(subscr);\n if (!startedListening) {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener);\n startedListening = true;\n }\n querying = true;\n Promise.resolve(ret).then((result) => {\n querying = false;\n if (closed)\n return;\n if (shouldNotify()) {\n doQuery();\n }\n else {\n accumMuts = {};\n currentObs = subscr;\n observer.next && observer.next(result);\n }\n }, (err) => {\n querying = false;\n observer.error && observer.error(err);\n subscription.unsubscribe();\n });\n };\n doQuery();\n return subscription;\n });\n}\n\nlet domDeps;\ntry {\n domDeps = {\n indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,\n IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange\n };\n}\ncatch (e) {\n domDeps = { indexedDB: null, IDBKeyRange: null };\n}\n\nconst Dexie = Dexie$1;\nprops(Dexie, {\n ...fullNameExceptions,\n delete(databaseName) {\n const db = new Dexie(databaseName, { addons: [] });\n return db.delete();\n },\n exists(name) {\n return new Dexie(name, { addons: [] }).open().then(db => {\n db.close();\n return true;\n }).catch('NoSuchDatabaseError', () => false);\n },\n getDatabaseNames(cb) {\n try {\n return getDatabaseNames(Dexie.dependencies).then(cb);\n }\n catch (_a) {\n return rejection(new exceptions.MissingAPI());\n }\n },\n defineClass() {\n function Class(content) {\n extend(this, content);\n }\n return Class;\n },\n ignoreTransaction(scopeFunc) {\n return PSD.trans ?\n usePSD(PSD.transless, scopeFunc) :\n scopeFunc();\n },\n vip,\n 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 DexiePromise.resolve(rv);\n return rv;\n }\n catch (e) {\n return rejection(e);\n }\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 DexiePromise.resolve(rv);\n return rv;\n }\n catch (e) {\n return rejection(e);\n }\n },\n currentTransaction: {\n get: () => PSD.trans || null\n },\n waitFor: function (promiseOrFunction, optionalTimeout) {\n const promise = DexiePromise.resolve(typeof promiseOrFunction === 'function' ?\n Dexie.ignoreTransaction(promiseOrFunction) :\n promiseOrFunction)\n .timeout(optionalTimeout || 60000);\n return PSD.trans ?\n PSD.trans.waitFor(promise) :\n promise;\n },\n Promise: DexiePromise,\n debug: {\n get: () => debug,\n set: value => {\n setDebug(value, value === 'dexie' ? () => true : dexieStackFrameFilter);\n }\n },\n derive: derive,\n extend: extend,\n props: props,\n override: override,\n Events: Events,\n on: globalEvents,\n liveQuery,\n extendObservabilitySet,\n getByKeyPath: getByKeyPath,\n setByKeyPath: setByKeyPath,\n delByKeyPath: delByKeyPath,\n shallowClone: shallowClone,\n deepClone: deepClone,\n getObjectDiff: getObjectDiff,\n cmp,\n asap: asap$1,\n minKey: minKey,\n addons: [],\n connections: connections,\n errnames: errnames,\n dependencies: domDeps,\n semVer: DEXIE_VERSION,\n version: DEXIE_VERSION.split('.')\n .map(n => parseInt(n))\n .reduce((p, c, i) => p + (c / Math.pow(10, i * 2))),\n});\nDexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange);\n\nif (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, updatedParts => {\n if (!propagatingLocally) {\n let event;\n if (isIEOrEdge) {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, true, true, updatedParts);\n }\n else {\n event = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, {\n detail: updatedParts\n });\n }\n propagatingLocally = true;\n dispatchEvent(event);\n propagatingLocally = false;\n }\n });\n addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, ({ detail }) => {\n if (!propagatingLocally) {\n propagateLocally(detail);\n }\n });\n}\nfunction propagateLocally(updateParts) {\n let wasMe = propagatingLocally;\n try {\n propagatingLocally = true;\n globalEvents.storagemutated.fire(updateParts);\n }\n finally {\n propagatingLocally = wasMe;\n }\n}\nlet propagatingLocally = false;\n\nif (typeof BroadcastChannel !== 'undefined') {\n const bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME);\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => {\n if (!propagatingLocally) {\n bc.postMessage(changedParts);\n }\n });\n bc.onmessage = (ev) => {\n if (ev.data)\n propagateLocally(ev.data);\n };\n}\nelse if (typeof self !== 'undefined' && typeof navigator !== 'undefined') {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => {\n try {\n if (!propagatingLocally) {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(STORAGE_MUTATED_DOM_EVENT_NAME, JSON.stringify({\n trig: Math.random(),\n changedParts,\n }));\n }\n if (typeof self['clients'] === 'object') {\n [...self['clients'].matchAll({ includeUncontrolled: true })].forEach((client) => client.postMessage({\n type: STORAGE_MUTATED_DOM_EVENT_NAME,\n changedParts,\n }));\n }\n }\n }\n catch (_a) { }\n });\n addEventListener('storage', (ev) => {\n if (ev.key === STORAGE_MUTATED_DOM_EVENT_NAME) {\n const data = JSON.parse(ev.newValue);\n if (data)\n propagateLocally(data.changedParts);\n }\n });\n const swContainer = self.document && navigator.serviceWorker;\n if (swContainer) {\n swContainer.addEventListener('message', propagateMessageLocally);\n }\n}\nfunction propagateMessageLocally({ data }) {\n if (data && data.type === STORAGE_MUTATED_DOM_EVENT_NAME) {\n propagateLocally(data.changedParts);\n }\n}\n\nDexiePromise.rejectionMapper = mapError;\nsetDebug(debug, dexieStackFrameFilter);\n\nexport { Dexie$1 as Dexie, RangeSet, Dexie$1 as default, liveQuery, mergeRanges, rangesOverlap };\n//# sourceMappingURL=dexie.mjs.map\n","import Dexie, { Table } from \"dexie\";\nimport { getLoggedInUser } from \"@openmrs/esm-api\";\nimport { createGlobalStore } from \"@openmrs/esm-state\";\n\n/**\n * Defines an item queued up in the offline synchronization queue.\n * A `SyncItem` contains both meta information about the item in the sync queue, as well as the\n * actual data to be synchronized (i.e. the item's `content`).\n */\nexport interface SyncItem<T = any> {\n id?: number;\n userId: string;\n type: string;\n content: T;\n createdOn: Date;\n descriptor: QueueItemDescriptor;\n lastError?: {\n name?: string;\n message?: string;\n };\n}\n\n/**\n * Contains information about the sync item which has been provided externally by the caller\n * who added the item to the queue.\n * This information is all optional, but, when provided while enqueuing the item, can be used in other\n * locations to better represent the sync item, e.g. in the UI.\n */\nexport interface QueueItemDescriptor {\n id?: string;\n dependencies?: Array<{\n id: string;\n type: string;\n }>;\n patientUuid?: string;\n displayName?: string;\n}\n\n/**\n * A function which, when invoked, performs the actual client-server synchronization of the given\n * `item` (which is the actual data to be synchronized).\n * The function receives additional `options` which provide additional data that can be used\n * for synchronizing.\n */\nexport type ProcessSyncItem<T> = (\n item: T,\n options: SyncProcessOptions<T>\n) => Promise<any>;\n\n/**\n * Additional data which can be used for synchronizing data in a {@link ProcessSyncItem} function.\n */\nexport interface SyncProcessOptions<T> {\n abort: AbortController;\n userId: string;\n index: number;\n items: Array<T>;\n dependencies: Array<any>;\n}\n\n/**\n * Defines additional options which can optionally be provided when setting up a synchronization callback\n * for a specific synchronization item type.\n * These are not required, but, when set, allow further\n */\ninterface SetupOfflineSyncOptions<T> {\n /**\n * Invoked when the user requests to edit a sync item.\n * The typical behavior for such a callback is to launch a UI which allows editing the content\n * encapsulated by the sync item.\n * @param syncItem The sync item to be edited.\n */\n onBeginEditSyncItem?(syncItem: SyncItem<T>): void;\n}\n\n/**\n * Represents a synchronization handler which has been globally registered by the\n * {@link setupOfflineSync} function.\n * These handlers are used for synchronizing queued data.\n */\ninterface SyncHandler {\n readonly type: string;\n readonly dependsOn: ReadonlyArray<string>;\n readonly process: ProcessSyncItem<unknown>;\n readonly options: Readonly<SetupOfflineSyncOptions<any>>;\n}\n\n/**\n * Represents the data inside the global offline synchronization store.\n * Provides information about a currently ongoing synchronization.\n */\nexport interface OfflineSynchronizationStore {\n synchronization?: {\n totalCount: number;\n pendingCount: number;\n abortController: AbortController;\n };\n}\n\ninterface SyncResultBag {\n [type: string]: Record<string, any>;\n}\n\nclass OfflineDb extends Dexie {\n syncQueue: Table<SyncItem, number>;\n\n constructor() {\n super(\"EsmOffline\");\n\n this.version(3).stores({\n syncQueue: \"++id,userId,type,[userId+type]\",\n });\n\n this.syncQueue = this.table(\"syncQueue\");\n }\n}\n\nconst db = new OfflineDb();\nconst handlers: Record<string, SyncHandler> = {};\n\n/**\n * @internal Temporarily added for esm-offline-tools-app. Please don't use elsewhere.\n */\nexport function getOfflineDb() {\n return db;\n}\n\nconst syncStore = createGlobalStore<OfflineSynchronizationStore>(\n \"offline-synchronization\",\n {}\n);\n\nexport function getOfflineSynchronizationStore() {\n return syncStore;\n}\n\n/**\n * Runs a full synchronization of **all** queued synchronization items.\n */\nexport async function runSynchronization() {\n if (syncStore.getState().synchronization) {\n return;\n }\n\n const totalCount = await db.syncQueue.count();\n const promises: Record<string, Promise<void>> = {};\n const handlerQueue = Object.entries(handlers);\n const maxIter = handlerQueue.length;\n const results: SyncResultBag = {};\n const abortController = new AbortController();\n const notifySyncProgress = () => {\n const synchronization = syncStore.getState().synchronization!;\n\n syncStore.setState({\n synchronization: {\n ...synchronization,\n pendingCount: synchronization!.pendingCount - 1,\n },\n });\n };\n\n try {\n syncStore.setState({\n synchronization: {\n totalCount,\n pendingCount: totalCount,\n abortController,\n },\n });\n\n // we try until the queue is depleted, but no more than queue.length tries.\n for (let iter = 0; iter < maxIter && handlerQueue.length > 0; iter++) {\n for (let i = handlerQueue.length; i--; ) {\n const [name, handler] = handlerQueue[i];\n const deps = handler.dependsOn.map((dep) => promises[dep]);\n\n if (deps.every(Boolean)) {\n results[name] = {};\n await Promise.all(deps);\n\n promises[name] = processHandler(\n handler,\n results,\n abortController,\n notifySyncProgress\n );\n handlerQueue.splice(i, 1);\n }\n }\n }\n\n await Promise.allSettled(Object.values(promises));\n } finally {\n syncStore.setState({ synchronization: undefined });\n }\n}\n\nasync function processHandler(\n { type, dependsOn, process }: SyncHandler,\n results: SyncResultBag,\n abortController: AbortController,\n notifySyncProgress: () => void\n) {\n const table = db.syncQueue;\n const items: Array<[number, unknown, QueueItemDescriptor]> = [];\n const contents: Array<unknown> = [];\n const userId = await getUserId();\n\n await table.where({ type, userId }).each((item, cursor) => {\n items.push([cursor.primaryKey, item.content, item.descriptor]);\n contents.push(item.content);\n });\n\n for (let i = 0; i < items.length; i++) {\n const [key, item, { id, dependencies = [] }] = items[i];\n\n try {\n const result = await process(item, {\n abort: abortController,\n index: i,\n items: contents,\n userId,\n dependencies: dependencies.map(({ id, type }) =>\n dependsOn.includes(type) ? results[type][id] : undefined\n ),\n });\n\n if (id !== undefined) {\n results[type][id] = result;\n }\n\n await table.delete(key);\n } catch (e) {\n await table.update(key, {\n lastError: {\n name: e?.name,\n message: e?.message ?? e?.toString(),\n },\n });\n } finally {\n notifySyncProgress();\n }\n }\n}\n\nasync function getUserId() {\n const user = await getLoggedInUser();\n return user?.uuid || \"*\";\n}\n\n/**\n * Enqueues a new item in the sync queue for a specific user.\n * @param userId The user with whom the sync item should be associated with.\n * @param type The identifying type of the synchronization item.\n * @param content The actual data to be synchronized.\n * @param descriptor An optional descriptor providing additional metadata about the sync item.\n */\nexport async function queueSynchronizationItemFor<T>(\n userId: string,\n type: string,\n content: T,\n descriptor?: QueueItemDescriptor\n) {\n const table = db.syncQueue;\n const targetId = descriptor && descriptor.id;\n\n if (targetId !== undefined) {\n // in case of replacement (i.e., used same ID) we just remove the existing item\n await table\n .where({ type, userId })\n .filter((item) => item?.descriptor.id === targetId)\n .delete();\n }\n\n const id = await table.add({\n type,\n content,\n userId,\n descriptor: descriptor || {},\n createdOn: new Date(),\n });\n\n return id;\n}\n\n/**\n * Enqueues a new item in the sync queue and associates the item with the currently signed in user.\n * @param type The identifying type of the synchronization item.\n * @param content The actual data to be synchronized.\n * @param descriptor An optional descriptor providing additional metadata about the sync item.\n */\nexport async function queueSynchronizationItem<T>(\n type: string,\n content: T,\n descriptor?: QueueItemDescriptor\n) {\n const userId = await getUserId();\n return await queueSynchronizationItemFor(userId, type, content, descriptor);\n}\n\n/**\n * Returns all currently queued up sync items of a given user.\n * @param userId The ID of the user whose synchronization items should be returned.\n * @param type The identifying type of the synchronization items to be returned..\n */\nexport async function getSynchronizationItemsFor<T>(\n userId: string,\n type: string\n) {\n const table = db.syncQueue;\n const items: Array<T> = [];\n\n await table.where({ type, userId }).each((item) => {\n items.push(item.content);\n });\n\n return items;\n}\n\n/**\n * Returns all currently queued up sync items of the currently signed in user.\n * @param type The identifying type of the synchronization items to be returned.\n */\nexport async function getSynchronizationItems<T>(type: string) {\n const userId = await getUserId();\n return await getSynchronizationItemsFor<T>(userId, type);\n}\n\n/**\n * Returns a queued sync item with the given ID or `undefined` if no such item exists.\n * @param id The ID of the requested sync item.\n */\nexport async function getSynchronizationItem<T = any>(\n id: number\n): Promise<SyncItem<T> | undefined> {\n return await db.syncQueue.get(id);\n}\n\n/**\n * Returns whether editing synchronization items of the given type is supported by the currently\n * registered synchronization handlers.\n * @param type The identifying type of the synchronization item which should be edited.\n */\nexport function canBeginEditSynchronizationItemsOfType(type: string) {\n // Editing an item can be requested as long as callback for this flow exists on the associated handler.\n return !!handlers[type]?.options.onBeginEditSyncItem;\n}\n\n/**\n * Triggers an edit flow for the given synchronization item.\n * If this is not possible, throws an error.\n * @param id The ID of the synchronization item to be edited.\n */\nexport async function beginEditSynchronizationItem(id: number) {\n const item = await getSynchronizationItem(id);\n if (!item) {\n throw new Error(`No sync item with the ID ${id} exists.`);\n }\n\n const editCallback = handlers[item.type]?.options.onBeginEditSyncItem;\n if (!editCallback) {\n throw new Error(\n `A sync item with the ID ${id} exists, but the associated handler (if one exists) doesn't support editing the item. You can avoid this error by either verifying that sync items of this type can be edited via the \"canEditSynchronizationItemsOfType(type: string)\" function or alternatively ensure that the synchronizaton handler for sync items of type \"${item.type}\" supports editing items.`\n );\n }\n\n editCallback(item);\n}\n\n/**\n * Deletes a queued up sync item with the given ID.\n * @param id The ID of the synchronization item to be deleted.\n */\nexport async function deleteSynchronizationItem(id: number) {\n await db.syncQueue.delete(id);\n}\n\n/**\n * Registers a new synchronization handler which is able to synchronize data of a specific type.\n * @param type The identifying type of the synchronization items which can be handled by this handler.\n * @param dependsOn An array of other sync item types which must be synchronized before this handler\n * can synchronize its own data. Items of these types are effectively dependencies of the data\n * synchronized by this handler.\n * @param process A function which, when invoked, performs the actual client-server synchronization of the given\n * `item` (which is the actual data to be synchronized).\n * @param options Additional options which can optionally be provided when setting up a synchronization callback\n * for a specific synchronization item type.\n */\nexport function setupOfflineSync<T>(\n type: string,\n dependsOn: Array<string>,\n process: ProcessSyncItem<T>,\n options: SetupOfflineSyncOptions<T> = {}\n) {\n handlers[type] = {\n type,\n dependsOn,\n process,\n options,\n };\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import { v4 } from \"uuid\";\n\nexport const offlineUuidPrefix = \"OFFLINE+\";\n\n/** Generates a UUID-like string which is used for uniquely identifying objects while offline. */\nexport function generateOfflineUuid() {\n return offlineUuidPrefix + v4();\n}\n\n/** Checks whether the given string has the format of an offline UUID generated by {@link generateOfflineUuid} */\nexport function isOfflineUuid(uuid: string) {\n return uuid.startsWith(offlineUuidPrefix);\n}\n","import Dexie, { Table } from \"dexie\";\nimport { createGlobalStore } from \"@openmrs/esm-state\";\n\nexport interface OfflinePatientDataSyncStore {\n /**\n * For each patient ID of the patients whose data is currently made available offline, provides\n * the current data synchronizaton state.\n */\n offlinePatientDataSyncState: Record<string, OfflinePatientDataSyncState>;\n /**\n * Holds the list of currently registered handlers which deal with patients that should be available offline.\n * The key is a unique identifier which, once defined, should never change as it gives identity to\n * the handler registration.\n */\n handlers: Record<string, OfflinePatientDataSyncHandler>;\n}\n\nexport interface OfflinePatientDataSyncState {\n /**\n * The time when this state snapshot was initially created.\n */\n readonly timestamp: Date;\n /**\n * A list of the data sync handler registration identifiers which are still in the process\n * of synchronizing the patient's data.\n */\n readonly syncingHandlers: Array<string>;\n /**\n * A list of the data sync handler registration identifiers which successfully synchronized the\n * patient's data.\n */\n readonly syncedHandlers: Array<string>;\n /**\n * A list of the data sync handler registration identifiers which failed to synchronize the\n * patient's data.\n */\n readonly failedHandlers: Array<string>;\n /**\n * A set of error messages associated with the identifers of the failed handlers.\n */\n readonly errors: Record<string, string>;\n /**\n * Aborts the process of downloading data.\n * @returns `true` if the cancellation could be triggered (that is, if there were any syncing handlers);\n * `false` if not.\n */\n abort(): boolean;\n}\n\nexport interface OfflinePatientDataSyncHandler {\n /**\n * A name of the handler registration which can be displayed to the user.\n * This is ideally translated.\n */\n readonly displayName: string;\n /**\n * A function which is invoked when a patient is added to the app's offline patient cache.\n * Signals to the handler that the patient's data must be made available offline.\n * @param args Arguments which provide data about the patient to be made available offline.\n * @returns A promise which should resolve if all data could be cached and reject when there was an issue\n * caching the data.\n */\n onOfflinePatientAdded(args: OfflinePatientArgs): Promise<void>;\n}\n\nexport interface OfflinePatientArgs {\n /**\n * The UUID of the patient that should be made available offline.\n */\n patientUuid: string;\n /**\n * An {@link AbortSignal} which notifies about the cancellation of the operation.\n */\n signal: AbortSignal;\n}\n\nconst store = createGlobalStore<OfflinePatientDataSyncStore>(\n \"offline-patients\",\n {\n offlinePatientDataSyncState: {},\n handlers: {},\n }\n);\n\nexport function getOfflinePatientDataStore() {\n return store;\n}\n\n/**\n * Attempts to add the specified patient handler registration to the list of offline patient handlers.\n * @param identifier A key which uniquely identifies the registration.\n * @param handler The patient handler registration to be registered.\n * @returns `true` if the registration was successfully made; `false` if another registration with\n * the same identifier has already been registered before.\n */\nexport function registerOfflinePatientHandler(\n identifier: string,\n handler: OfflinePatientDataSyncHandler\n) {\n const state = store.getState();\n store.setState({\n handlers: { ...state.handlers, [identifier]: handler },\n });\n}\n\n/**\n * Notifies all registered offline patient handlers that a new patient must be made available offline.\n * @param args Arguments which provide data about the patient to be made available offline.\n * @returns A promise which resolves once all registered handlers have finished synchronizing.\n */\nexport async function syncOfflinePatientData(patientUuid: string) {\n const handlers = Object.entries(store.getState().handlers);\n const handlerIdentifiers = handlers.map(([identifier]) => identifier);\n const syncedHandlers: Array<string> = [];\n const failedHandlers: Array<string> = [];\n const errors = {};\n const abortController = new AbortController();\n\n await setPatientDataSyncState(patientUuid, {\n timestamp: new Date(),\n syncingHandlers: handlerIdentifiers,\n syncedHandlers,\n failedHandlers,\n errors,\n abort: () => {\n abortController.abort();\n return true;\n },\n });\n\n await Promise.all(\n handlers.map(async ([identifier, handler]) => {\n try {\n await handler.onOfflinePatientAdded({\n patientUuid,\n signal: abortController.signal,\n });\n // eslint-disable-next-line no-console\n console.debug(\n `Offline patient handler ${identifier} successfully synchronized patient data.`\n );\n\n syncedHandlers.push(identifier);\n } catch (e) {\n console.error(\n `Offline patient handler ${identifier} failed. Error: `,\n e\n );\n\n failedHandlers.push(identifier);\n errors[identifier] = e?.message ?? e?.toString() ?? \"\";\n }\n })\n );\n\n await setPatientDataSyncState(patientUuid, {\n timestamp: new Date(),\n syncingHandlers: [],\n syncedHandlers,\n failedHandlers,\n errors,\n abort: () => false,\n });\n}\n\nasync function setPatientDataSyncState(\n patientUuid: string,\n nextState: OfflinePatientDataSyncState\n) {\n const state = store.getState();\n store.setState({\n offlinePatientDataSyncState: {\n ...state.offlinePatientDataSyncState,\n [patientUuid]: nextState,\n },\n });\n\n const db = new OfflinePatientDataDb();\n const existingEntry = await db.offlinePatientDataSyncStates.get({\n patientUuid,\n });\n const nextEntry: OfflinePatientDataSyncStateEntry = {\n id: existingEntry?.id,\n patientUuid,\n state: {\n timestamp: nextState.timestamp,\n syncedHandlers: nextState.syncedHandlers,\n failedHandlers: [\n ...nextState.failedHandlers,\n ...nextState.syncingHandlers,\n ],\n errors: nextState.errors,\n },\n };\n\n await db.offlinePatientDataSyncStates.put(nextEntry);\n}\n\nexport async function loadPersistedPatientDataSyncState() {\n const db = new OfflinePatientDataDb();\n const persistedStates = await db.offlinePatientDataSyncStates.toArray();\n const nextState = store.getState().offlinePatientDataSyncState;\n\n for (const entry of persistedStates) {\n nextState[entry.patientUuid] = {\n ...entry.state,\n syncingHandlers: [],\n abort: () => false,\n };\n }\n\n store.setState({ offlinePatientDataSyncState: nextState });\n}\n\nclass OfflinePatientDataDb extends Dexie {\n offlinePatientDataSyncStates: Table<OfflinePatientDataSyncStateEntry, number>;\n\n constructor() {\n super(\"EsmOfflinePatientData\");\n\n this.version(1).stores({\n offlinePatientDataSyncStates: \"++id,&patientUuid\",\n });\n\n this.offlinePatientDataSyncStates = this.table(\n \"offlinePatientDataSyncStates\"\n );\n }\n}\n\ntype PersistedOfflinePatientDataSyncState = Omit<\n Omit<OfflinePatientDataSyncState, \"syncingHandlers\">,\n \"abort\"\n>;\n\ninterface OfflinePatientDataSyncStateEntry {\n id?: number;\n patientUuid: string;\n state: PersistedOfflinePatientDataSyncState;\n}\n"],"names":["resolveDirectory","exports","rootDirLevel","meta","url","console","error","Error","urlString","rootDirectoryLevel","a","document","createElement","href","pathname","numDirsProcessed","index","length","finalPath","slice","protocol","host","Number","isInteger","module","__WEBPACK_EXTERNAL_MODULE__766__","__WEBPACK_EXTERNAL_MODULE__685__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","y","__system_context__","d","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","this","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","scriptUrl","importScripts","location","currentScript","src","scripts","getElementsByTagName","replace","p","autoPublicPath","self","_","n","t","Promise","MessageChannel","port1","onmessage","data","postMessage","port2","Array","iterator","isArray","toString","constructor","name","from","test","i","done","TypeError","next","bind","promise","resolve","reject","URL","u","type","assign","then","c","f","s","v","nn","tn","rn","en","on","un","an","Set","cn","fn","installing","scriptURL","sn","performance","now","vn","removeEventListener","hn","add","addEventListener","ln","target","state","sw","isExternal","originalEvent","mn","isUpdate","dispatchEvent","wn","setTimeout","waiting","clearTimeout","dn","navigator","serviceWorker","controller","gn","ports","source","getSW","has","arguments","apply","create","__proto__","l","w","register","immediate","readyState","Boolean","yn","pn","bn","once","wasWaitingBeforeRegister","update","messageSW","messageSkipWaiting","configurable","writable","Pn","Map","Sn","delete","set","workboxRegistration","registerOmrsServiceWorker","registerOptions","warn","wb","Workbox","getOmrsServiceWorker","omrsOfflineResponseBodyHttpHeaderName","omrsOfflineResponseStatusHttpHeaderName","omrsOfflineCachingStrategyHttpHeaderName","async","messageOmrsServiceWorker","message","success","result","networkRequestFailedEventName","dispatchNetworkRequestFailed","CustomEvent","detail","subscribeNetworkRequestFailed","cb","handler","ev","offlineModeStorageKey","offlineMode","getCurrentOfflineMode","current","notAvailable","active","setCurrentOfflineMode","mode","localStorage","setItem","activateOfflineCapability","db","indexedDB","open","onerror","onsuccess","isFirefoxPrivateBrowsing","isEdgePrivateBrowsing","storage","sessionStorage","removeItem","code","DOMException","QUOTA_EXCEEDED_ERR","isSafariPrivateBrowsing","isPrivateBrowsing","getItem","onLine","patchXMLHttpRequest","send","XMLHttpRequest","args","_global","global","keys","extend","extension","forEach","getProto","getPrototypeOf","_hasOwn","hasOwn","props","proto","Reflect","ownKeys","setProp","functionOrGetSet","options","derive","Child","Parent","getOwnPropertyDescriptor","getPropertyDescriptor","_slice","start","end","override","origFunc","overridedFactory","assert","b","asap$1","setImmediate","arrayToObject","array","extractor","reduce","item","nameAndValue","getByKeyPath","keyPath","rv","val","push","period","indexOf","innerObj","substr","setByKeyPath","isFrozen","currentKeyPath","remainingKeyPath","isNaN","parseInt","splice","shallowClone","m","concat","flatten","intrinsicTypeNames","split","map","num","filter","intrinsicTypes","x","circularRefs","deepClone","any","WeakMap","innerDeepClone","iteratorSymbol","getIteratorOf","NO_CHAR_ARRAY","getArrayOf","arrayLike","it","isAsyncFunction","debug","setDebug","libraryFilter","NEEDS_THROW_FOR_STACK","stack","getErrorWithStack","prettyStack","exception","numIgnoredFrames","frame","join","idbDomErrorNames","errorList","defaultTexts","VersionChanged","DatabaseClosed","Abort","TransactionInactive","MissingAPI","DexieError","msg","_e","getMultiErrorMessage","failures","ModifyError","successCount","failedKeys","BulkError","pos","failuresByPos","_stack","errnames","BaseException","exceptions","fullName","msgOrInner","inner","Syntax","SyntaxError","Type","Range","RangeError","exceptionMap","fullNameExceptions","nop","mirror","pureFunctionChain","f1","f2","callBoth","on1","on2","hookCreatingChain","res","res2","hookDeletingChain","hookUpdatingChain","modifications","reverseStoppableEventChain","promisableChain","thiz","INTERNAL","resolvedNativePromise","nativePromiseProto","resolvedGlobalPromise","globalP","crypto","subtle","nativeP","digest","Uint8Array","nativePromiseThen","NativePromise","patchGlobalPromise","stack_being_generated","schedulePhysicalTick","physicalTick","MutationObserver","hiddenDiv","observe","attributes","setAttribute","asap","callback","microtickQueue","needsNewPhysicalTick","isOutsideMicroTick","unhandledErrors","rejectingErrors","currentFulfiller","rejectionMapper","globalPSD","id","ref","unhandleds","onunhandled","globalError","pgp","env","finalize","uh","PSD","numScheduledCalls","tickFinalizers","DexiePromise","_listeners","onuncatched","_lib","psd","_PSD","_stackHolder","_prev","_numPrev","_state","_value","handleRejection","executePromiseTask","thenProp","microTaskId","totalEchoes","onFulfilled","onRejected","possibleAwait","cleanup","decrementExpectedAwaits","propagateToListener","Listener","nativeAwaitCompatibleWrap","linkToPreviousPromise","zone","shouldExecuteTick","beginMicroTickScope","_then","propagateAllListeners","endMicroTickScope","ex","reason","_promise","origProp","tryCatch","some","addPossiblyUnhandledError","listeners","len","finalizePhysicalTick","listener","callListener","ret","markErrorAsHandled","getStack","stacks","limit","errorName","failure","prev","numPrev","wasRootExec","callbacks","unhandledErrs","finalizers","PromiseReject","wrap","errorCatcher","outerScope","switchToZone","catch","err","finally","onFinally","timeout","ms","Infinity","handle","Timeout","snapShot","all","values","onPossibleParallellAsync","remaining","race","newPSD","newScope","usePSD","scheduler","follow","zoneProps","finalizer","run_at_end_of_this_or_next_physical_tick","allSettled","possiblePromises","results","status","AggregateError","task","awaits","echoes","taskCounter","zoneStack","zoneEchoes","zone_id_counter","a1","a2","parent","globalEnv","PromiseProp","nthen","getPatchedPromiseThen","gthen","incrementExpectedAwaits","possiblePromise","rejection","zoneEnterEcho","targetZone","zoneLeaveEcho","pop","bEnteringZone","currentZone","enqueueNativeMicroTask","GlobalPromise","targetEnv","a3","job","outerZone","origThen","onResolved","UNHANDLEDREJECTION","event","eventData","createEvent","initEvent","PromiseRejectionEvent","onunhandledrejection","defaultPrevented","tempTransaction","storeNames","idbdb","openComplete","letThrough","_vip","trans","_createTransaction","_dbSchema","_completion","dbOpenError","isBeingOpened","_options","autoOpen","dbReadyPromise","DEXIE_VERSION","maxString","String","fromCharCode","minKey","INVALID_KEY_ARGUMENT","STRING_EXPECTED","connections","isIEOrEdge","userAgent","hasIEDeleteObjectStoreBug","hangsOnDeleteLargeKeyRange","dexieStackFrameFilter","DBNAMES_DB","READONLY","READWRITE","combine","filter1","filter2","AnyRange","lower","lowerOpen","upper","upperOpen","workaroundForUndefinedPrimKey","Table","_trans","writeLocked","_tx","tableName","checkTableInTransaction","schema","NotFound","idbtrans","transless","keyOrCrit","where","first","core","hook","reading","fire","indexOrCrit","WhereClause","keyPaths","equals","compoundIndex","indexes","primKey","ix","compound","every","_maxKey","kp","JSON","stringify","idxByName","idb","_deps","cmp","idx","filterFunction","prevIndex","prevFilterFn","multi","toCollection","and","count","thenShortcut","offset","numRows","each","toArray","Collection","orderBy","reverse","mapToClass","mappedClass","readHook","unsubscribe","defineClass","content","auto","objToAdd","mutate","numFailures","lastResult","keyOrObject","modify","InvalidArgument","_a","put","clear","range","bulkGet","getMany","bulkAdd","objects","keysOrOptions","wantResults","allKeys","numObjects","objectsToAdd","bulkPut","objectsToPut","bulkDelete","numKeys","Events","ctx","evs","eventName","subscriber","subscribe","addEventType","chainFunction","defaultFunction","addConfiguredEvents","context","subscribers","cfg","makeClassConstructor","isPlainKeyRange","ignoreLimitFilter","algorithm","or","justLimit","replayFilter","addFilter","addReplayFilter","factory","isLimitFilter","curr","getIndexOrStore","coreSchema","isPrimKey","primaryKey","getIndexByKeyPath","Schema","openCursor","coreTable","keysOnly","dir","unique","query","iter","coreTrans","union","cursor","advance","stop","fail","_iterate","iterate","valueMapper","cursorPromise","mappedFn","wrappedFn","continue","advancer","ta","tb","NaN","al","bl","compareUint8Arrays","getUint8Array","compareArrays","ArrayBuffer","isView","tsTag","buffer","byteOffset","byteLength","_read","_ctx","table","_write","_addAlgorithm","clone","raw","Math","min","sortBy","parts","lastPart","lastIndex","getval","order","sorter","aVal","bVal","sort","offsetLeft","rowsLeft","until","bIncludeStopEntry","last","isMatch","indexName","_ondirectionchange","desc","eachKey","eachUniqueKey","eachPrimaryKey","primaryKeys","uniqueKeys","firstKey","lastKey","distinct","strKey","found","changes","modifyer","anythingModified","outbound","extractKey","modifyChunkSize","totalFailures","applyMutateResult","expectedCount","nextChunk","cache","addValues","putValues","putKeys","deleteKeys","origValue","criteria","deleteCallback","changeSpec","coreRange","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","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","eventRejectHandler","preventDefault","stopPropagation","DEXIE_STORAGE_MUTATED_EVENT_NAME","STORAGE_MUTATED_DOM_EVENT_NAME","globalEvents","Transaction","_lock","_reculock","lockOwnerFor","_unlock","_blockedFuncs","_locked","fnAndPSD","shift","OpenFailed","transaction","durability","chromeTransactionDurability","_reject","onabort","oncomplete","_resolve","storagemutated","bWriteLock","ReadOnly","_root","waitFor","promiseLike","root","_waitingFor","_waitingQueue","store","objectStore","spin","_spinCount","currentWaitPromise","abort","memoizedTables","_memoizedTables","tableSchema","transactionBoundTable","createIndexSpec","nameFromKeyPath","createTableSchema","getMaxKey","IdbKeyRange","only","getKeyExtractor","getSinglePathKeyExtractor","arrayify","_id_counter","getKeyPathAlias","generateMiddlewareStacks","_novip","tmpTrans","middlewares","IDBKeyRange","dbcore","stackImpl","down","createMiddlewareStack","makeIDBKeyRange","upperBound","lowerBound","bound","hasGetAll","tables","objectStoreNames","autoIncrement","indexByKeyPath","isPrimaryKey","indexNames","multiEntry","extractSchema","isAddOrPut","req","reqs","errorHandler","args1","args2","keyCount","callbackCount","successHandler","_pos","request","nonInfinitLimit","idbKeyRange","getAll","getAllKeys","openKeyCursor","___id","_cursorContinue","_cursorContinuePrimaryKey","continuePrimaryKey","_cursorAdvance","doThrowCursorIsStopped","gotOne","iterationPromise","resolveIteration","rejectIteration","guardedCallback","createDbCoreTable","tableMap","MIN_KEY","MAX_KEY","createDBCore","createMiddlewareStacks","_middlewares","tbl","setApiOnPlace","objs","tableNames","dbschema","propDesc","removeTablesApi","lowerVersionFirst","_cfg","version","getSchemaDiff","oldSchema","newSchema","diff","del","change","oldDef","newDef","def","recreate","oldIndexes","newIndexes","idxName","oldIdx","newIdx","createTable","createObjectStore","addIndex","createIndex","buildGlobalSchema","globalSchema","storeName","j","idbindex","adjustToExistingIndexNames","_hasGetAll","dexieName","indexSpec","WorkerGlobalScope","Version","_parseStoresSpec","stores","outSchema","indexNum","trim","storesSource","versions","_versions","storesSpec","_allTables","_storeNames","upgrade","upgradeFunction","contentUpgrade","getDbNamesTable","dbNamesDB","Dexie$1","addons","dbnames","hasDatabasesNative","databases","vip","idbReady","intervalId","userAgentData","tryIdb","setInterval","clearInterval","dexieOpen","openCanceller","throwIfCancelled","resolveDbReady","dbReadyResolve","upgradeTransaction","wasCreated","dbName","autoSchema","round","verno","onblocked","_fireOnBlocked","onupgradeneeded","allowEmptyDB","close","delreq","deleteDatabase","NoSuchDatabase","oldVer","oldVersion","pow","idbUpgradeTrans","rejectTransaction","populate","queue","anyContentUpgraderHasRun","versToRun","tuple","Upgrade","deleteIndex","upgradeSchema","contentUpgradeIsAsync","returnValue","promiseFollowed","decrementor","deleteObjectStore","deleteRemovedTables","runQueue","contains","updateTablesAndIndexes","runUpgraders","readGlobalSchema","ch","verifyInstalledSchema","onversionchange","vcFired","onclose","_onDatabaseCreated","onReadyBeingFired","ready","fireRemainders","remainders","_close","awaitIterator","callNext","onSuccess","step","onError","throw","getNext","extractTransactionArgs","_tableArgs_","scopeFunc","enterTransactionScope","parentTransaction","scopeFuncIsAsync","PrematureCommit","pad","virtualIndexMiddleware","level","indexLookup","allVirtualIndexes","addVirtualIndexes","keyTail","lowLevelIndex","keyPathAlias","indexList","keyLength","isVirtual","virtualIndex","translateRequest","virtualCursor","createVirtualCursor","getObjectDiff","prfx","ap","bp","apTypeName","hooksMiddleware","downCore","downTable","tableMiddleware","dxTrans","deleting","creating","updating","addPutOrDelete","deleteNextChunk","deleteRange","getEffectiveKeys","effectiveKeys","getExistingValues","existingValues","contexts","existingValue","generatedPrimaryKey","objectDiff","additionalChanges","requestedValue","getFromTransactionCache","cacheExistingValuesMiddleware","cachedResult","isEmptyRange","node","RangeSet","fromOrTree","to","addRange","left","right","rebalance","rightWasCutOff","mergeRanges","newSet","_addRangeSet","getRangeSetIterator","keyProvided","up","_b","rootClone","oldRootRight","computeDepth","rangeSet","addKey","addKeys","observabilityMiddleware","FULL_RANGE","tableClone","mutatedParts","getRangeSet","part","pkRangeSet","delsRangeSet","newObjs","oldCache","oldObjs","addKeyOrKeys","oldKey","newKey","trackAffectedIndexes","getRange","readSubscribers","method","subscr","queriedIndex","queriedRanges","keysPromise","resultingKeys","pKeys","wantValues","pkey","deps","dependencies","cancelOpen","bSticky","keyRangeGenerator","keyRange","whereCtx","readingHook","createCollectionConstructor","createTableConstructor","complete","wasActive","createTransactionConstructor","versionNumber","createVersionConstructor","orCollection","_IDBKeyRange","createWhereClauseConstructor","newVersion","use","addon","versionInstance","_whenReady","unuse","mw","hasArguments","doDelete","_onDatabaseDeleted","backendDB","isOpen","hasBeenClosed","hasFailed","dynamicallyOpened","_transaction","onlyIfCompatible","idbMode","SubTransaction","enterTransaction","InvalidTable","symbolObservable","observable","Observable","_subscribe","extendObservabilitySet","domDeps","mozIndexedDB","webkitIndexedDB","msIndexedDB","webkitIDBKeyRange","Dexie","propagateLocally","updateParts","wasMe","propagatingLocally","databaseName","exists","getDatabaseNames","infos","info","ignoreTransaction","generatorFn","spawn","currentTransaction","promiseOrFunction","optionalTimeout","liveQuery","querier","observer","closed","accumMuts","currentObs","subscription","mutationListener","querying","startedListening","shouldNotify","rangeSet1","rangeSet2","i1","nextResult1","i2","nextResult2","rangesOverlap","doQuery","exec","execute","delByKeyPath","semVer","maxKey","updatedParts","initCustomEvent","BroadcastChannel","bc","changedParts","trig","random","matchAll","includeUncontrolled","client","parse","newValue","swContainer","domError","super","syncQueue","handlers","getOfflineDb","syncStore","createGlobalStore","getOfflineSynchronizationStore","runSynchronization","getState","synchronization","totalCount","promises","handlerQueue","entries","maxIter","abortController","AbortController","notifySyncProgress","setState","pendingCount","dependsOn","dep","processHandler","process","items","contents","userId","getUserId","descriptor","includes","lastError","getLoggedInUser","uuid","queueSynchronizationItemFor","targetId","createdOn","Date","queueSynchronizationItem","getSynchronizationItemsFor","getSynchronizationItems","getSynchronizationItem","canBeginEditSynchronizationItemsOfType","onBeginEditSyncItem","beginEditSynchronizationItem","editCallback","deleteSynchronizationItem","setupOfflineSync","getRandomValues","rnds8","rng","msCrypto","byteToHex","buf","rnds","arr","offlineUuidPrefix","generateOfflineUuid","v4","isOfflineUuid","offlinePatientDataSyncState","getOfflinePatientDataStore","registerOfflinePatientHandler","identifier","syncOfflinePatientData","patientUuid","handlerIdentifiers","syncedHandlers","failedHandlers","errors","setPatientDataSyncState","timestamp","syncingHandlers","onOfflinePatientAdded","signal","nextState","OfflinePatientDataDb","nextEntry","offlinePatientDataSyncStates","loadPersistedPatientDataSyncState","persistedStates","entry"],"sourceRoot":""}
|