"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __esm = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; }; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); // intern-log/node_modules/.pnpm/dexie@4.4.6/node_modules/dexie/dist/dexie.js var require_dexie = __commonJS({ "intern-log/node_modules/.pnpm/dexie@4.4.6/node_modules/dexie/dist/dexie.js"(exports2, module2) { (function(global2, factory) { typeof exports2 === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, global2.Dexie = factory()); })(exports2, function() { "use strict"; var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) { d2.__proto__ = b2; } || function(d2, b2) { for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p]; }; return extendStatics(d, b); }; function __extends(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } var __assign = function() { __assign = Object.assign || function __assign2(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; function __spreadArray(to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); } typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }; var _global = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : global; var keys = Object.keys; var isArray = Array.isArray; if (typeof Promise !== "undefined" && !_global.Promise) { _global.Promise = Promise; } function extend(obj, extension) { if (typeof extension !== "object") return obj; keys(extension).forEach(function(key) { obj[key] = extension[key]; }); return obj; } var getProto = Object.getPrototypeOf; var _hasOwn = {}.hasOwnProperty; function hasOwn(obj, prop) { return _hasOwn.call(obj, prop); } function props(proto, extension) { if (typeof extension === "function") extension = extension(getProto(proto)); (typeof Reflect === "undefined" ? keys : Reflect.ownKeys)(extension).forEach(function(key) { setProp(proto, key, extension[key]); }); } var defineProperty = Object.defineProperty; function setProp(obj, prop, functionOrGetSet, options) { defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, "get") && typeof functionOrGetSet.get === "function" ? { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } : { value: functionOrGetSet, configurable: true, writable: true }, options)); } function derive(Child) { return { from: function(Parent) { Child.prototype = Object.create(Parent.prototype); setProp(Child.prototype, "constructor", Child); return { extend: props.bind(null, Child.prototype) }; } }; } var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; function getPropertyDescriptor(obj, prop) { var pd = getOwnPropertyDescriptor(obj, prop); var proto; return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop); } var _slice = [].slice; function slice(args, start, end) { return _slice.call(args, start, end); } function override(origFunc, overridedFactory) { return overridedFactory(origFunc); } function assert(b) { if (!b) throw new Error("Assertion Failed"); } function asap$1(fn) { if (_global.setImmediate) setImmediate(fn); else setTimeout(fn, 0); } function arrayToObject(array, extractor) { return array.reduce(function(result, item, i) { var nameAndValue = extractor(item, i); if (nameAndValue) result[nameAndValue[0]] = nameAndValue[1]; return result; }, {}); } function getByKeyPath(obj, keyPath) { if (typeof keyPath === "string" && hasOwn(obj, keyPath)) return obj[keyPath]; if (!keyPath) return obj; if (typeof keyPath !== "string") { var rv = []; for (var i = 0, l = keyPath.length; i < l; ++i) { var val = getByKeyPath(obj, keyPath[i]); rv.push(val); } return rv; } var period = keyPath.indexOf("."); if (period !== -1) { var innerObj = obj[keyPath.substr(0, period)]; return innerObj == null ? void 0 : getByKeyPath(innerObj, keyPath.substr(period + 1)); } return void 0; } function setByKeyPath(obj, keyPath, value) { if (!obj || keyPath === void 0) return; if ("isFrozen" in Object && Object.isFrozen(obj)) return; if (typeof keyPath !== "string" && "length" in keyPath) { assert(typeof value !== "string" && "length" in value); for (var i = 0, l = keyPath.length; i < l; ++i) { setByKeyPath(obj, keyPath[i], value[i]); } } else { var period = keyPath.indexOf("."); if (period !== -1) { var currentKeyPath = keyPath.substr(0, period); var remainingKeyPath = keyPath.substr(period + 1); if (remainingKeyPath === "") if (value === void 0) { if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) obj.splice(currentKeyPath, 1); else delete obj[currentKeyPath]; } else obj[currentKeyPath] = value; else { var innerObj = obj[currentKeyPath]; if (!innerObj || !hasOwn(obj, currentKeyPath)) { if (value === void 0) return; innerObj = obj[currentKeyPath] = {}; } setByKeyPath(innerObj, remainingKeyPath, value); } } else { if (value === void 0) { if (isArray(obj) && !isNaN(parseInt(keyPath))) obj.splice(keyPath, 1); else delete obj[keyPath]; } else obj[keyPath] = value; } } } function delByKeyPath(obj, keyPath) { if (typeof keyPath === "string") setByKeyPath(obj, keyPath, void 0); else if ("length" in keyPath) [].map.call(keyPath, function(kp) { setByKeyPath(obj, kp, void 0); }); } function shallowClone(obj) { var rv = {}; for (var m in obj) { if (hasOwn(obj, m)) rv[m] = obj[m]; } return rv; } var concat = [].concat; function flatten(a) { return concat.apply([], a); } var intrinsicTypeNames = "BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey".split(",").concat(flatten([8, 16, 32, 64].map(function(num) { return ["Int", "Uint", "Float"].map(function(t) { return t + num + "Array"; }); }))).filter(function(t) { return _global[t]; }); var intrinsicTypes = new Set(intrinsicTypeNames.map(function(t) { return _global[t]; })); function cloneSimpleObjectTree(o) { var rv = {}; for (var k in o) if (hasOwn(o, k)) { var v = o[k]; rv[k] = !v || typeof v !== "object" || intrinsicTypes.has(v.constructor) ? v : cloneSimpleObjectTree(v); } return rv; } var circularRefs = null; function deepClone(any) { circularRefs = /* @__PURE__ */ new WeakMap(); var rv = innerDeepClone(any); circularRefs = null; return rv; } function innerDeepClone(x) { if (!x || typeof x !== "object") return x; var rv = circularRefs.get(x); if (rv) return rv; if (isArray(x)) { rv = []; circularRefs.set(x, rv); for (var i = 0, l = x.length; i < l; ++i) { rv.push(innerDeepClone(x[i])); } } else if (intrinsicTypes.has(x.constructor)) { rv = x; } else { var proto = getProto(x); rv = proto === Object.prototype ? {} : Object.create(proto); circularRefs.set(x, rv); for (var prop in x) { if (hasOwn(x, prop)) { rv[prop] = innerDeepClone(x[prop]); } } } return rv; } var toString = {}.toString; function toStringTag(o) { return toString.call(o).slice(8, -1); } var iteratorSymbol = typeof Symbol !== "undefined" ? Symbol.iterator : "@@iterator"; var getIteratorOf = typeof iteratorSymbol === "symbol" ? function(x) { var i; return x != null && (i = x[iteratorSymbol]) && i.apply(x); } : function() { return null; }; function delArrayItem(a, x) { var i = a.indexOf(x); if (i >= 0) a.splice(i, 1); return i >= 0; } var NO_CHAR_ARRAY = {}; function getArrayOf(arrayLike) { var i, a, x, it; if (arguments.length === 1) { if (isArray(arrayLike)) return arrayLike.slice(); if (this === NO_CHAR_ARRAY && typeof arrayLike === "string") return [arrayLike]; if (it = getIteratorOf(arrayLike)) { a = []; while (x = it.next(), !x.done) a.push(x.value); return a; } if (arrayLike == null) return [arrayLike]; i = arrayLike.length; if (typeof i === "number") { a = new Array(i); while (i--) a[i] = arrayLike[i]; return a; } return [arrayLike]; } i = arguments.length; a = new Array(i); while (i--) a[i] = arguments[i]; return a; } var isAsyncFunction = typeof Symbol !== "undefined" ? function(fn) { return fn[Symbol.toStringTag] === "AsyncFunction"; } : function() { return false; }; var dexieErrorNames = [ "Modify", "Bulk", "OpenFailed", "VersionChange", "Schema", "Upgrade", "InvalidTable", "MissingAPI", "NoSuchDatabase", "InvalidArgument", "SubTransaction", "Unsupported", "Internal", "DatabaseClosed", "PrematureCommit", "ForeignAwait" ]; var idbDomErrorNames = [ "Unknown", "Constraint", "Data", "TransactionInactive", "ReadOnly", "Version", "NotFound", "InvalidState", "InvalidAccess", "Abort", "Timeout", "QuotaExceeded", "Syntax", "DataClone" ]; var errorList = dexieErrorNames.concat(idbDomErrorNames); var defaultTexts = { VersionChanged: "Database version changed by other database connection", DatabaseClosed: "Database has been closed", Abort: "Transaction aborted", TransactionInactive: "Transaction has already completed or failed", MissingAPI: "IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb" }; function DexieError(name, msg) { this.name = name; this.message = msg; } derive(DexieError).from(Error).extend({ toString: function() { return this.name + ": " + this.message; } }); function getMultiErrorMessage(msg, failures) { return msg + ". Errors: " + Object.keys(failures).map(function(key) { return failures[key].toString(); }).filter(function(v, i, s) { return s.indexOf(v) === i; }).join("\n"); } function ModifyError(msg, failures, successCount, failedKeys) { this.failures = failures; this.failedKeys = failedKeys; this.successCount = successCount; this.message = getMultiErrorMessage(msg, failures); } derive(ModifyError).from(DexieError); function BulkError(msg, failures) { this.name = "BulkError"; this.failures = Object.keys(failures).map(function(pos) { return failures[pos]; }); this.failuresByPos = failures; this.message = getMultiErrorMessage(msg, this.failures); } derive(BulkError).from(DexieError); var errnames = errorList.reduce(function(obj, name) { return obj[name] = name + "Error", obj; }, {}); var BaseException = DexieError; var exceptions = errorList.reduce(function(obj, name) { var fullName = name + "Error"; function DexieError2(msgOrInner, inner) { this.name = fullName; if (!msgOrInner) { this.message = defaultTexts[name] || fullName; this.inner = null; } else if (typeof msgOrInner === "string") { this.message = "".concat(msgOrInner).concat(!inner ? "" : "\n " + inner); this.inner = inner || null; } else if (typeof msgOrInner === "object") { this.message = "".concat(msgOrInner.name, " ").concat(msgOrInner.message); this.inner = msgOrInner; } } derive(DexieError2).from(BaseException); obj[name] = DexieError2; return obj; }, {}); exceptions.Syntax = SyntaxError; exceptions.Type = TypeError; exceptions.Range = RangeError; var exceptionMap = idbDomErrorNames.reduce(function(obj, name) { obj[name + "Error"] = exceptions[name]; return obj; }, {}); function mapError(domError, message) { if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name]) return domError; var rv = new exceptionMap[domError.name](message || domError.message, domError); if ("stack" in domError) { setProp(rv, "stack", { get: function() { return this.inner.stack; } }); } return rv; } var fullNameExceptions = errorList.reduce(function(obj, name) { if (["Syntax", "Type", "Range"].indexOf(name) === -1) obj[name + "Error"] = exceptions[name]; return obj; }, {}); fullNameExceptions.ModifyError = ModifyError; fullNameExceptions.DexieError = DexieError; fullNameExceptions.BulkError = BulkError; function nop() { } function mirror(val) { return val; } function pureFunctionChain(f1, f2) { if (f1 == null || f1 === mirror) return f2; return function(val) { return f2(f1(val)); }; } function callBoth(on1, on2) { return function() { on1.apply(this, arguments); on2.apply(this, arguments); }; } function hookCreatingChain(f1, f2) { if (f1 === nop) return f2; return function() { var res = f1.apply(this, arguments); if (res !== void 0) arguments[0] = res; var onsuccess = this.onsuccess, onerror = this.onerror; this.onsuccess = null; this.onerror = null; var res2 = f2.apply(this, arguments); if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; return res2 !== void 0 ? res2 : res; }; } function hookDeletingChain(f1, f2) { if (f1 === nop) return f2; return function() { f1.apply(this, arguments); var onsuccess = this.onsuccess, onerror = this.onerror; this.onsuccess = this.onerror = null; f2.apply(this, arguments); if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; }; } function hookUpdatingChain(f1, f2) { if (f1 === nop) return f2; return function() { var res = f1.apply(this, arguments); var modifications = arguments[0]; extend(modifications, res); var onsuccess = this.onsuccess, onerror = this.onerror; this.onsuccess = null; this.onerror = null; var res2 = f2.apply(this, arguments); if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; return res === void 0 ? res2 === void 0 ? void 0 : res2 : extend(res, res2); }; } function reverseStoppableEventChain(f1, f2) { if (f1 === nop) return f2; return function() { if (f2.apply(this, arguments) === false) return false; return f1.apply(this, arguments); }; } function promisableChain(f1, f2) { if (f1 === nop) return f2; return function() { var res = f1.apply(this, arguments); if (res && typeof res.then === "function") { var thiz = this, i = arguments.length, args = new Array(i); while (i--) args[i] = arguments[i]; return res.then(function() { return f2.apply(thiz, args); }); } return f2.apply(this, arguments); }; } var debug = typeof location !== "undefined" && /^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href); function setDebug(value, filter) { debug = value; } var INTERNAL = {}; var ZONE_ECHO_LIMIT = 100, _a$1 = typeof Promise === "undefined" ? [] : function() { var globalP = Promise.resolve(); if (typeof crypto === "undefined" || !crypto.subtle) return [globalP, getProto(globalP), globalP]; var nativeP = crypto.subtle.digest("SHA-512", new Uint8Array([0])); return [nativeP, getProto(nativeP), globalP]; }(), resolvedNativePromise = _a$1[0], nativePromiseProto = _a$1[1], resolvedGlobalPromise = _a$1[2], nativePromiseThen = nativePromiseProto && nativePromiseProto.then; var NativePromise = resolvedNativePromise && resolvedNativePromise.constructor; var patchGlobalPromise = !!resolvedGlobalPromise; function schedulePhysicalTick() { queueMicrotask(physicalTick); } var asap = function(callback, args) { microtickQueue.push([callback, args]); if (needsNewPhysicalTick) { schedulePhysicalTick(); needsNewPhysicalTick = false; } }; var isOutsideMicroTick = true, needsNewPhysicalTick = true, unhandledErrors = [], rejectingErrors = [], rejectionMapper = mirror; var globalPSD = { id: "global", global: true, ref: 0, unhandleds: [], onunhandled: nop, pgp: false, env: {}, finalize: nop }; var PSD = globalPSD; var microtickQueue = []; var numScheduledCalls = 0; var tickFinalizers = []; function DexiePromise(fn) { if (typeof this !== "object") throw new TypeError("Promises must be constructed via new"); this._listeners = []; this._lib = false; var psd = this._PSD = PSD; if (typeof fn !== "function") { if (fn !== INTERNAL) throw new TypeError("Not a function"); this._state = arguments[1]; this._value = arguments[2]; if (this._state === false) handleRejection(this, this._value); return; } this._state = null; this._value = null; ++psd.ref; executePromiseTask(this, fn); } var thenProp = { get: function() { var psd = PSD, microTaskId = totalEchoes; function then(onFulfilled, onRejected) { var _this = this; var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes); var cleanup = possibleAwait && !decrementExpectedAwaits(); var rv = new DexiePromise(function(resolve, reject) { propagateToListener(_this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup), resolve, reject, psd)); }); if (this._consoleTask) rv._consoleTask = this._consoleTask; return rv; } then.prototype = INTERNAL; return then; }, set: function(value) { setProp(this, "then", value && value.prototype === INTERNAL ? thenProp : { get: function() { return value; }, set: thenProp.set }); } }; props(DexiePromise.prototype, { then: thenProp, _then: function(onFulfilled, onRejected) { propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); }, catch: function(onRejected) { if (arguments.length === 1) return this.then(null, onRejected); var type2 = arguments[0], handler = arguments[1]; return typeof type2 === "function" ? this.then(null, function(err) { return err instanceof type2 ? handler(err) : PromiseReject(err); }) : this.then(null, function(err) { return err && err.name === type2 ? handler(err) : PromiseReject(err); }); }, finally: function(onFinally) { return this.then(function(value) { return DexiePromise.resolve(onFinally()).then(function() { return value; }); }, function(err) { return DexiePromise.resolve(onFinally()).then(function() { return PromiseReject(err); }); }); }, timeout: function(ms, msg) { var _this = this; return ms < Infinity ? new DexiePromise(function(resolve, reject) { var handle = setTimeout(function() { return reject(new exceptions.Timeout(msg)); }, ms); _this.then(resolve, reject).finally(clearTimeout.bind(null, handle)); }) : this; } }); if (typeof Symbol !== "undefined" && Symbol.toStringTag) setProp(DexiePromise.prototype, Symbol.toStringTag, "Dexie.Promise"); globalPSD.env = snapShot(); function Listener(onFulfilled, onRejected, resolve, reject, zone) { this.onFulfilled = typeof onFulfilled === "function" ? onFulfilled : null; this.onRejected = typeof onRejected === "function" ? onRejected : null; this.resolve = resolve; this.reject = reject; this.psd = zone; } props(DexiePromise, { all: function() { var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); return new DexiePromise(function(resolve, reject) { if (values.length === 0) resolve([]); var remaining = values.length; values.forEach(function(a, i) { return DexiePromise.resolve(a).then(function(x) { values[i] = x; if (!--remaining) resolve(values); }, reject); }); }); }, resolve: function(value) { if (value instanceof DexiePromise) return value; if (value && typeof value.then === "function") return new DexiePromise(function(resolve, reject) { value.then(resolve, reject); }); var rv = new DexiePromise(INTERNAL, true, value); return rv; }, reject: PromiseReject, race: function() { var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); return new DexiePromise(function(resolve, reject) { values.map(function(value) { return DexiePromise.resolve(value).then(resolve, reject); }); }); }, PSD: { get: function() { return PSD; }, set: function(value) { return PSD = value; } }, totalEchoes: { get: function() { return totalEchoes; } }, newPSD: newScope, usePSD, scheduler: { get: function() { return asap; }, set: function(value) { asap = value; } }, rejectionMapper: { get: function() { return rejectionMapper; }, set: function(value) { rejectionMapper = value; } }, follow: function(fn, zoneProps) { return new DexiePromise(function(resolve, reject) { return newScope(function(resolve2, reject2) { var psd = PSD; psd.unhandleds = []; psd.onunhandled = reject2; psd.finalize = callBoth(function() { var _this = this; run_at_end_of_this_or_next_physical_tick(function() { _this.unhandleds.length === 0 ? resolve2() : reject2(_this.unhandleds[0]); }); }, psd.finalize); fn(); }, zoneProps, resolve, reject); }); } }); if (NativePromise) { if (NativePromise.allSettled) setProp(DexiePromise, "allSettled", function() { var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); return new DexiePromise(function(resolve) { if (possiblePromises.length === 0) resolve([]); var remaining = possiblePromises.length; var results = new Array(remaining); possiblePromises.forEach(function(p, i) { return DexiePromise.resolve(p).then(function(value) { return results[i] = { status: "fulfilled", value }; }, function(reason) { return results[i] = { status: "rejected", reason }; }).then(function() { return --remaining || resolve(results); }); }); }); }); if (NativePromise.any && typeof AggregateError !== "undefined") setProp(DexiePromise, "any", function() { var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); return new DexiePromise(function(resolve, reject) { if (possiblePromises.length === 0) reject(new AggregateError([])); var remaining = possiblePromises.length; var failures = new Array(remaining); possiblePromises.forEach(function(p, i) { return DexiePromise.resolve(p).then(function(value) { return resolve(value); }, function(failure) { failures[i] = failure; if (!--remaining) reject(new AggregateError(failures)); }); }); }); }); if (NativePromise.withResolvers) DexiePromise.withResolvers = NativePromise.withResolvers; } function executePromiseTask(promise, fn) { try { fn(function(value) { if (promise._state !== null) return; if (value === promise) throw new TypeError("A promise cannot be resolved with itself."); var shouldExecuteTick = promise._lib && beginMicroTickScope(); if (value && typeof value.then === "function") { executePromiseTask(promise, function(resolve, reject) { value instanceof DexiePromise ? value._then(resolve, reject) : value.then(resolve, reject); }); } else { promise._state = true; promise._value = value; propagateAllListeners(promise); } if (shouldExecuteTick) endMicroTickScope(); }, handleRejection.bind(null, promise)); } catch (ex) { handleRejection(promise, ex); } } function handleRejection(promise, reason) { rejectingErrors.push(reason); if (promise._state !== null) return; var shouldExecuteTick = promise._lib && beginMicroTickScope(); reason = rejectionMapper(reason); promise._state = false; promise._value = reason; addPossiblyUnhandledError(promise); propagateAllListeners(promise); if (shouldExecuteTick) endMicroTickScope(); } function propagateAllListeners(promise) { var listeners = promise._listeners; promise._listeners = []; for (var i = 0, len = listeners.length; i < len; ++i) { propagateToListener(promise, listeners[i]); } var psd = promise._PSD; --psd.ref || psd.finalize(); if (numScheduledCalls === 0) { ++numScheduledCalls; asap(function() { if (--numScheduledCalls === 0) finalizePhysicalTick(); }, []); } } function propagateToListener(promise, listener) { if (promise._state === null) { promise._listeners.push(listener); return; } var cb = promise._state ? listener.onFulfilled : listener.onRejected; if (cb === null) { return (promise._state ? listener.resolve : listener.reject)(promise._value); } ++listener.psd.ref; ++numScheduledCalls; asap(callListener, [cb, promise, listener]); } function callListener(cb, promise, listener) { try { var ret, value = promise._value; if (!promise._state && rejectingErrors.length) rejectingErrors = []; ret = debug && promise._consoleTask ? promise._consoleTask.run(function() { return cb(value); }) : cb(value); if (!promise._state && rejectingErrors.indexOf(value) === -1) { markErrorAsHandled(promise); } listener.resolve(ret); } catch (e) { listener.reject(e); } finally { if (--numScheduledCalls === 0) finalizePhysicalTick(); --listener.psd.ref || listener.psd.finalize(); } } function physicalTick() { usePSD(globalPSD, function() { beginMicroTickScope() && endMicroTickScope(); }); } function beginMicroTickScope() { var wasRootExec = isOutsideMicroTick; isOutsideMicroTick = false; needsNewPhysicalTick = false; return wasRootExec; } function endMicroTickScope() { var callbacks, i, l; do { while (microtickQueue.length > 0) { callbacks = microtickQueue; microtickQueue = []; l = callbacks.length; for (i = 0; i < l; ++i) { var item = callbacks[i]; item[0].apply(null, item[1]); } } } while (microtickQueue.length > 0); isOutsideMicroTick = true; needsNewPhysicalTick = true; } function finalizePhysicalTick() { var unhandledErrs = unhandledErrors; unhandledErrors = []; unhandledErrs.forEach(function(p) { p._PSD.onunhandled.call(null, p._value, p); }); var finalizers = tickFinalizers.slice(0); var i = finalizers.length; while (i) finalizers[--i](); } function run_at_end_of_this_or_next_physical_tick(fn) { function finalizer() { fn(); tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1); } tickFinalizers.push(finalizer); ++numScheduledCalls; asap(function() { if (--numScheduledCalls === 0) finalizePhysicalTick(); }, []); } function addPossiblyUnhandledError(promise) { if (!unhandledErrors.some(function(p) { return p._value === promise._value; })) unhandledErrors.push(promise); } function markErrorAsHandled(promise) { var i = unhandledErrors.length; while (i) if (unhandledErrors[--i]._value === promise._value) { unhandledErrors.splice(i, 1); return; } } function PromiseReject(reason) { return new DexiePromise(INTERNAL, false, reason); } function wrap(fn, errorCatcher) { var psd = PSD; return function() { var wasRootExec = beginMicroTickScope(), outerScope = PSD; try { switchToZone(psd, true); return fn.apply(this, arguments); } catch (e) { errorCatcher && errorCatcher(e); } finally { switchToZone(outerScope, false); if (wasRootExec) endMicroTickScope(); } }; } var task = { awaits: 0, echoes: 0, id: 0 }; var taskCounter = 0; var zoneStack = []; var zoneEchoes = 0; var totalEchoes = 0; var zone_id_counter = 0; function newScope(fn, props2, a1, a2) { var parent = PSD, psd = Object.create(parent); psd.parent = parent; psd.ref = 0; psd.global = false; psd.id = ++zone_id_counter; globalPSD.env; psd.env = patchGlobalPromise ? { Promise: DexiePromise, PromiseProp: { value: DexiePromise, configurable: true, writable: true }, all: DexiePromise.all, race: DexiePromise.race, allSettled: DexiePromise.allSettled, any: DexiePromise.any, resolve: DexiePromise.resolve, reject: DexiePromise.reject } : {}; if (props2) extend(psd, props2); ++parent.ref; psd.finalize = function() { --this.parent.ref || this.parent.finalize(); }; var rv = usePSD(psd, fn, a1, a2); if (psd.ref === 0) psd.finalize(); return rv; } function incrementExpectedAwaits() { if (!task.id) task.id = ++taskCounter; ++task.awaits; task.echoes += ZONE_ECHO_LIMIT; return task.id; } function decrementExpectedAwaits() { if (!task.awaits) return false; if (--task.awaits === 0) task.id = 0; task.echoes = task.awaits * ZONE_ECHO_LIMIT; return true; } if (("" + nativePromiseThen).indexOf("[native code]") === -1) { incrementExpectedAwaits = decrementExpectedAwaits = nop; } function onPossibleParallellAsync(possiblePromise) { if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) { incrementExpectedAwaits(); return possiblePromise.then(function(x) { decrementExpectedAwaits(); return x; }, function(e) { decrementExpectedAwaits(); return rejection(e); }); } return possiblePromise; } function zoneEnterEcho(targetZone) { ++totalEchoes; if (!task.echoes || --task.echoes === 0) { task.echoes = task.awaits = task.id = 0; } zoneStack.push(PSD); switchToZone(targetZone, true); } function zoneLeaveEcho() { var zone = zoneStack[zoneStack.length - 1]; zoneStack.pop(); switchToZone(zone, false); } function switchToZone(targetZone, bEnteringZone) { var currentZone = PSD; if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) { queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho); } if (targetZone === PSD) return; PSD = targetZone; if (currentZone === globalPSD) globalPSD.env = snapShot(); if (patchGlobalPromise) { var GlobalPromise = globalPSD.env.Promise; var targetEnv = targetZone.env; if (currentZone.global || targetZone.global) { Object.defineProperty(_global, "Promise", targetEnv.PromiseProp); GlobalPromise.all = targetEnv.all; GlobalPromise.race = targetEnv.race; GlobalPromise.resolve = targetEnv.resolve; GlobalPromise.reject = targetEnv.reject; if (targetEnv.allSettled) GlobalPromise.allSettled = targetEnv.allSettled; if (targetEnv.any) GlobalPromise.any = targetEnv.any; } } } function snapShot() { var GlobalPromise = _global.Promise; return patchGlobalPromise ? { Promise: GlobalPromise, PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"), all: GlobalPromise.all, race: GlobalPromise.race, allSettled: GlobalPromise.allSettled, any: GlobalPromise.any, resolve: GlobalPromise.resolve, reject: GlobalPromise.reject } : {}; } function usePSD(psd, fn, a1, a2, a3) { var outerScope = PSD; try { switchToZone(psd, true); return fn(a1, a2, a3); } finally { switchToZone(outerScope, false); } } function nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) { return typeof fn !== "function" ? fn : function() { var outerZone = PSD; if (possibleAwait) incrementExpectedAwaits(); switchToZone(zone, true); try { return fn.apply(this, arguments); } finally { switchToZone(outerZone, false); if (cleanup) queueMicrotask(decrementExpectedAwaits); } }; } function execInGlobalContext(cb) { if (Promise === NativePromise && task.echoes === 0) { if (zoneEchoes === 0) { cb(); } else { enqueueNativeMicroTask(cb); } } else { setTimeout(cb, 0); } } var rejection = DexiePromise.reject; function tempTransaction(db2, mode, storeNames, fn) { if (!db2.idbdb || !db2._state.openComplete && !PSD.letThrough && !db2._vip) { if (db2._state.openComplete) { return rejection(new exceptions.DatabaseClosed(db2._state.dbOpenError)); } if (!db2._state.isBeingOpened) { if (!db2._state.autoOpen) return rejection(new exceptions.DatabaseClosed()); db2.open().catch(nop); } return db2._state.dbReadyPromise.then(function() { return tempTransaction(db2, mode, storeNames, fn); }); } else { var trans = db2._createTransaction(mode, storeNames, db2._dbSchema); try { trans.create(); db2._state.PR1398_maxLoop = 3; } catch (ex) { if (ex.name === errnames.InvalidState && db2.isOpen() && --db2._state.PR1398_maxLoop > 0) { console.warn("Dexie: Need to reopen db"); db2.close({ disableAutoOpen: false }); return db2.open().then(function() { return tempTransaction(db2, mode, storeNames, fn); }); } return rejection(ex); } return trans._promise(mode, function(resolve, reject) { return newScope(function() { PSD.trans = trans; return fn(resolve, reject, trans); }); }).then(function(result) { if (mode === "readwrite") try { trans.idbtrans.commit(); } catch (_a2) { } return mode === "readonly" ? result : trans._completion.then(function() { return result; }); }); } } var DEXIE_VERSION = "4.4.6"; var maxString = String.fromCharCode(65535); var minKey = -Infinity; var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array."; var STRING_EXPECTED = "String expected."; var DEFAULT_MAX_CONNECTIONS = 1e3; var DBNAMES_DB = "__dbnames"; var READONLY = "readonly"; var READWRITE = "readwrite"; function combine(filter1, filter2) { return filter1 ? filter2 ? function() { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } : filter1 : filter2; } var AnyRange = { type: 3, lower: -Infinity, lowerOpen: false, upper: [[]], upperOpen: false }; function workaroundForUndefinedPrimKey(keyPath) { return typeof keyPath === "string" && !/\./.test(keyPath) ? function(obj) { if (obj[keyPath] === void 0 && keyPath in obj) { obj = deepClone(obj); delete obj[keyPath]; } return obj; } : function(obj) { return obj; }; } function Entity2() { throw exceptions.Type("Entity instances must never be new:ed. Instances are generated by the framework bypassing the constructor."); } function cmp3(a, b) { try { var ta = type(a); var tb = type(b); if (ta !== tb) { if (ta === "Array") return 1; if (tb === "Array") return -1; if (ta === "binary") return 1; if (tb === "binary") return -1; if (ta === "string") return 1; if (tb === "string") return -1; if (ta === "Date") return 1; if (tb !== "Date") return NaN; return -1; } switch (ta) { case "number": case "Date": case "string": return a > b ? 1 : a < b ? -1 : 0; case "binary": { return compareUint8Arrays(getUint8Array(a), getUint8Array(b)); } case "Array": return compareArrays(a, b); } } catch (_a2) { } return NaN; } function compareArrays(a, b) { var al = a.length; var bl = b.length; var l = al < bl ? al : bl; for (var i = 0; i < l; ++i) { var res = cmp3(a[i], b[i]); if (res !== 0) return res; } return al === bl ? 0 : al < bl ? -1 : 1; } function compareUint8Arrays(a, b) { var al = a.length; var bl = b.length; var l = al < bl ? al : bl; for (var i = 0; i < l; ++i) { if (a[i] !== b[i]) return a[i] < b[i] ? -1 : 1; } return al === bl ? 0 : al < bl ? -1 : 1; } function type(x) { var t = typeof x; if (t !== "object") return t; if (ArrayBuffer.isView(x)) return "binary"; var tsTag = toStringTag(x); return tsTag === "ArrayBuffer" ? "binary" : tsTag; } function getUint8Array(a) { if (a instanceof Uint8Array) return a; if (ArrayBuffer.isView(a)) return new Uint8Array(a.buffer, a.byteOffset, a.byteLength); return new Uint8Array(a); } function builtInDeletionTrigger(table, keys2, res) { var yProps = table.schema.yProps; if (!yProps) return res; if (keys2 && res.numFailures > 0) keys2 = keys2.filter(function(_, i) { return !res.failures[i]; }); return Promise.all(yProps.map(function(_a2) { var updatesTable = _a2.updatesTable; return keys2 ? table.db.table(updatesTable).where("k").anyOf(keys2).delete() : table.db.table(updatesTable).clear(); })).then(function() { return res; }); } var PropModification2 = function() { function PropModification3(spec) { this["@@propmod"] = spec; } PropModification3.prototype.execute = function(value) { var _a2; var spec = this["@@propmod"]; if (spec.add !== void 0) { var term = spec.add; if (isArray(term)) { return __spreadArray(__spreadArray([], isArray(value) ? value : [], true), term, true).sort(); } if (typeof term === "number") return (Number(value) || 0) + term; if (typeof term === "bigint") { try { return BigInt(value) + term; } catch (_b) { return BigInt(0) + term; } } throw new TypeError("Invalid term ".concat(term)); } if (spec.remove !== void 0) { var subtrahend_1 = spec.remove; if (isArray(subtrahend_1)) { return isArray(value) ? value.filter(function(item) { return !subtrahend_1.includes(item); }).sort() : []; } if (typeof subtrahend_1 === "number") return Number(value) - subtrahend_1; if (typeof subtrahend_1 === "bigint") { try { return BigInt(value) - subtrahend_1; } catch (_c) { return BigInt(0) - subtrahend_1; } } throw new TypeError("Invalid subtrahend ".concat(subtrahend_1)); } var prefixToReplace = (_a2 = spec.replacePrefix) === null || _a2 === void 0 ? void 0 : _a2[0]; if (prefixToReplace && typeof value === "string" && value.startsWith(prefixToReplace)) { return spec.replacePrefix[1] + value.substring(prefixToReplace.length); } return value; }; return PropModification3; }(); function applyUpdateSpec(obj, changes) { var keyPaths = keys(changes); var numKeys = keyPaths.length; var anythingModified = false; for (var i = 0; i < numKeys; ++i) { var keyPath = keyPaths[i]; var value = changes[keyPath]; var origValue = getByKeyPath(obj, keyPath); if (value instanceof PropModification2) { setByKeyPath(obj, keyPath, value.execute(origValue)); anythingModified = true; } else if (origValue !== value) { setByKeyPath(obj, keyPath, value); anythingModified = true; } } return anythingModified; } var Table = function() { function Table2() { } Table2.prototype._trans = function(mode, fn, writeLocked) { var trans = this._tx || PSD.trans; var tableName = this.name; var task2 = debug && typeof console !== "undefined" && console.createTask && console.createTask("Dexie: ".concat(mode === "readonly" ? "read" : "write", " ").concat(this.name)); function checkTableInTransaction(resolve, reject, trans2) { if (!trans2.schema[tableName]) throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); return fn(trans2.idbtrans, trans2); } var wasRootExec = beginMicroTickScope(); try { var p = trans && trans.db._novip === this.db._novip ? trans === PSD.trans ? trans._promise(mode, checkTableInTransaction, writeLocked) : newScope(function() { return trans._promise(mode, checkTableInTransaction, writeLocked); }, { trans, transless: PSD.transless || PSD }) : tempTransaction(this.db, mode, [this.name], checkTableInTransaction); if (task2) { p._consoleTask = task2; p = p.catch(function(err) { console.trace(err); return rejection(err); }); } return p; } finally { if (wasRootExec) endMicroTickScope(); } }; Table2.prototype.get = function(keyOrCrit, cb) { var _this = this; if (keyOrCrit && keyOrCrit.constructor === Object) return this.where(keyOrCrit).first(cb); if (keyOrCrit == null) return rejection(new exceptions.Type("Invalid argument to Table.get()")); return this._trans("readonly", function(trans) { return _this.core.get({ trans, key: keyOrCrit }).then(function(res) { return _this.hook.reading.fire(res); }); }).then(cb); }; Table2.prototype.where = function(indexOrCrit) { if (typeof indexOrCrit === "string") return new this.db.WhereClause(this, indexOrCrit); if (isArray(indexOrCrit)) return new this.db.WhereClause(this, "[".concat(indexOrCrit.join("+"), "]")); var keyPaths = keys(indexOrCrit); if (keyPaths.length === 1) return this.where(keyPaths[0]).equals(indexOrCrit[keyPaths[0]]); var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function(ix) { if (ix.compound && keyPaths.every(function(keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; })) { for (var i = 0; i < keyPaths.length; ++i) { if (keyPaths.indexOf(ix.keyPath[i]) === -1) return false; } return true; } return false; }).sort(function(a, b) { return a.keyPath.length - b.keyPath.length; })[0]; if (compoundIndex && this.db._maxKey !== maxString) { var keyPathsInValidOrder = compoundIndex.keyPath.slice(0, keyPaths.length); return this.where(keyPathsInValidOrder).equals(keyPathsInValidOrder.map(function(kp) { return indexOrCrit[kp]; })); } if (!compoundIndex && debug) console.warn("The query ".concat(JSON.stringify(indexOrCrit), " on ").concat(this.name, " would benefit from a ") + "compound index [".concat(keyPaths.join("+"), "]")); var idxByName = this.schema.idxByName; function equals(a, b) { return cmp3(a, b) === 0; } var _a2 = keyPaths.reduce(function(_a3, keyPath) { var prevIndex = _a3[0], prevFilterFn = _a3[1]; var index = idxByName[keyPath]; var value = indexOrCrit[keyPath]; return [ prevIndex || index, prevIndex || !index ? combine(prevFilterFn, index && index.multi ? function(x) { var prop = getByKeyPath(x, keyPath); return isArray(prop) && prop.some(function(item) { return equals(value, item); }); } : function(x) { return equals(value, getByKeyPath(x, keyPath)); }) : prevFilterFn ]; }, [null, null]), idx = _a2[0], filterFunction = _a2[1]; return idx ? this.where(idx.name).equals(indexOrCrit[idx.keyPath]).filter(filterFunction) : compoundIndex ? this.filter(filterFunction) : this.where(keyPaths).equals(""); }; Table2.prototype.filter = function(filterFunction) { return this.toCollection().and(filterFunction); }; Table2.prototype.count = function(thenShortcut) { return this.toCollection().count(thenShortcut); }; Table2.prototype.offset = function(offset) { return this.toCollection().offset(offset); }; Table2.prototype.limit = function(numRows) { return this.toCollection().limit(numRows); }; Table2.prototype.each = function(callback) { return this.toCollection().each(callback); }; Table2.prototype.toArray = function(thenShortcut) { return this.toCollection().toArray(thenShortcut); }; Table2.prototype.toCollection = function() { return new this.db.Collection(new this.db.WhereClause(this)); }; Table2.prototype.orderBy = function(index) { return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ? "[".concat(index.join("+"), "]") : index)); }; Table2.prototype.reverse = function() { return this.toCollection().reverse(); }; Table2.prototype.mapToClass = function(constructor) { var _a2 = this, db2 = _a2.db, tableName = _a2.name; this.schema.mappedClass = constructor; if (constructor.prototype instanceof Entity2) { constructor = function(_super) { __extends(class_1, _super); function class_1() { return _super !== null && _super.apply(this, arguments) || this; } Object.defineProperty(class_1.prototype, "db", { get: function() { return db2; }, enumerable: false, configurable: true }); class_1.prototype.table = function() { return tableName; }; return class_1; }(constructor); } var inheritedProps = /* @__PURE__ */ new Set(); for (var proto = constructor.prototype; proto; proto = getProto(proto)) { Object.getOwnPropertyNames(proto).forEach(function(propName) { return inheritedProps.add(propName); }); } var readHook = function(obj) { if (!obj) return obj; var res = Object.create(constructor.prototype); for (var m in obj) if (!inheritedProps.has(m)) try { res[m] = obj[m]; } catch (_) { } return res; }; if (this.schema.readHook) { this.hook.reading.unsubscribe(this.schema.readHook); } this.schema.readHook = readHook; this.hook("reading", readHook); return constructor; }; Table2.prototype.defineClass = function() { function Class(content) { extend(this, content); } return this.mapToClass(Class); }; Table2.prototype.add = function(obj, key) { var _this = this; var _a2 = this.schema.primKey, auto = _a2.auto, keyPath = _a2.keyPath; var objToAdd = obj; if (keyPath && auto) { objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); } return this._trans("readwrite", function(trans) { return _this.core.mutate({ trans, type: "add", keys: key != null ? [key] : null, values: [objToAdd] }); }).then(function(res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; }).then(function(lastResult) { if (keyPath) { try { setByKeyPath(obj, keyPath, lastResult); } catch (_) { } } return lastResult; }); }; Table2.prototype.upsert = function(key, modifications) { var _this = this; var keyPath = this.schema.primKey.keyPath; return this._trans("readwrite", function(trans) { return _this.core.get({ trans, key }).then(function(existing) { var obj = existing !== null && existing !== void 0 ? existing : {}; applyUpdateSpec(obj, modifications); if (keyPath) setByKeyPath(obj, keyPath, key); return _this.core.mutate({ trans, type: "put", values: [obj], keys: [key], upsert: true, updates: { keys: [key], changeSpecs: [modifications] } }).then(function(res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : !!existing; }); }); }); }; Table2.prototype.update = function(keyOrObject, modifications) { if (typeof keyOrObject === "object" && !isArray(keyOrObject)) { var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath); if (key === void 0) return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key")); return this.where(":id").equals(key).modify(modifications); } else { return this.where(":id").equals(keyOrObject).modify(modifications); } }; Table2.prototype.put = function(obj, key) { var _this = this; var _a2 = this.schema.primKey, auto = _a2.auto, keyPath = _a2.keyPath; var objToAdd = obj; if (keyPath && auto) { objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); } return this._trans("readwrite", function(trans) { return _this.core.mutate({ trans, type: "put", values: [objToAdd], keys: key != null ? [key] : null }); }).then(function(res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; }).then(function(lastResult) { if (keyPath) { try { setByKeyPath(obj, keyPath, lastResult); } catch (_) { } } return lastResult; }); }; Table2.prototype.delete = function(key) { var _this = this; return this._trans("readwrite", function(trans) { return _this.core.mutate({ trans, type: "delete", keys: [key] }).then(function(res) { return builtInDeletionTrigger(_this, [key], res); }).then(function(res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : void 0; }); }); }; Table2.prototype.clear = function() { var _this = this; return this._trans("readwrite", function(trans) { return _this.core.mutate({ trans, type: "deleteRange", range: AnyRange }).then(function(res) { return builtInDeletionTrigger(_this, null, res); }); }).then(function(res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : void 0; }); }; Table2.prototype.bulkGet = function(keys2) { var _this = this; return this._trans("readonly", function(trans) { return _this.core.getMany({ keys: keys2, trans }).then(function(result) { return result.map(function(res) { return _this.hook.reading.fire(res); }); }); }); }; Table2.prototype.bulkAdd = function(objects, keysOrOptions, options) { var _this = this; var keys2 = Array.isArray(keysOrOptions) ? keysOrOptions : void 0; options = options || (keys2 ? void 0 : keysOrOptions); var wantResults = options ? options.allKeys : void 0; return this._trans("readwrite", function(trans) { var _a2 = _this.schema.primKey, auto = _a2.auto, keyPath = _a2.keyPath; if (keyPath && keys2) throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys"); if (keys2 && keys2.length !== objects.length) throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); var numObjects = objects.length; var objectsToAdd = keyPath && auto ? objects.map(workaroundForUndefinedPrimKey(keyPath)) : objects; return _this.core.mutate({ trans, type: "add", keys: keys2, values: objectsToAdd, wantResults }).then(function(_a3) { var numFailures = _a3.numFailures, results = _a3.results, lastResult = _a3.lastResult, failures = _a3.failures; var result = wantResults ? results : lastResult; if (numFailures === 0) return result; throw new BulkError("".concat(_this.name, ".bulkAdd(): ").concat(numFailures, " of ").concat(numObjects, " operations failed"), failures); }); }); }; Table2.prototype.bulkPut = function(objects, keysOrOptions, options) { var _this = this; var keys2 = Array.isArray(keysOrOptions) ? keysOrOptions : void 0; options = options || (keys2 ? void 0 : keysOrOptions); var wantResults = options ? options.allKeys : void 0; return this._trans("readwrite", function(trans) { var _a2 = _this.schema.primKey, auto = _a2.auto, keyPath = _a2.keyPath; if (keyPath && keys2) throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys"); if (keys2 && keys2.length !== objects.length) throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); var numObjects = objects.length; var objectsToPut = keyPath && auto ? objects.map(workaroundForUndefinedPrimKey(keyPath)) : objects; return _this.core.mutate({ trans, type: "put", keys: keys2, values: objectsToPut, wantResults }).then(function(_a3) { var numFailures = _a3.numFailures, results = _a3.results, lastResult = _a3.lastResult, failures = _a3.failures; var result = wantResults ? results : lastResult; if (numFailures === 0) return result; throw new BulkError("".concat(_this.name, ".bulkPut(): ").concat(numFailures, " of ").concat(numObjects, " operations failed"), failures); }); }); }; Table2.prototype.bulkUpdate = function(keysAndChanges) { var _this = this; var coreTable = this.core; var keys2 = keysAndChanges.map(function(entry) { return entry.key; }); var changeSpecs = keysAndChanges.map(function(entry) { return entry.changes; }); var offsetMap = []; return this._trans("readwrite", function(trans) { return coreTable.getMany({ trans, keys: keys2, cache: "clone" }).then(function(objs) { var resultKeys = []; var resultObjs = []; keysAndChanges.forEach(function(_a2, idx) { var key = _a2.key, changes = _a2.changes; var obj = objs[idx]; if (obj) { for (var _i = 0, _b = Object.keys(changes); _i < _b.length; _i++) { var keyPath = _b[_i]; var value = changes[keyPath]; if (keyPath === _this.schema.primKey.keyPath) { if (cmp3(value, key) !== 0) { throw new exceptions.Constraint("Cannot update primary key in bulkUpdate()"); } } else { setByKeyPath(obj, keyPath, value); } } offsetMap.push(idx); resultKeys.push(key); resultObjs.push(obj); } }); var numEntries = resultKeys.length; return coreTable.mutate({ trans, type: "put", keys: resultKeys, values: resultObjs, updates: { keys: keys2, changeSpecs } }).then(function(_a2) { var numFailures = _a2.numFailures, failures = _a2.failures; if (numFailures === 0) return numEntries; for (var _i = 0, _b = Object.keys(failures); _i < _b.length; _i++) { var offset = _b[_i]; var mappedOffset = offsetMap[Number(offset)]; if (mappedOffset != null) { var failure = failures[offset]; delete failures[offset]; failures[mappedOffset] = failure; } } throw new BulkError("".concat(_this.name, ".bulkUpdate(): ").concat(numFailures, " of ").concat(numEntries, " operations failed"), failures); }); }); }); }; Table2.prototype.bulkDelete = function(keys2) { var _this = this; var numKeys = keys2.length; return this._trans("readwrite", function(trans) { return _this.core.mutate({ trans, type: "delete", keys: keys2 }).then(function(res) { return builtInDeletionTrigger(_this, keys2, res); }); }).then(function(_a2) { var numFailures = _a2.numFailures, lastResult = _a2.lastResult, failures = _a2.failures; if (numFailures === 0) return lastResult; throw new BulkError("".concat(_this.name, ".bulkDelete(): ").concat(numFailures, " of ").concat(numKeys, " operations failed"), failures); }); }; return Table2; }(); function Events(ctx) { var evs = {}; var rv = function(eventName, subscriber) { if (subscriber) { var i2 = arguments.length, args = new Array(i2 - 1); while (--i2) args[i2 - 1] = arguments[i2]; evs[eventName].subscribe.apply(null, args); return ctx; } else if (typeof eventName === "string") { return evs[eventName]; } }; rv.addEventType = add3; for (var i = 1, l = arguments.length; i < l; ++i) { add3(arguments[i]); } return rv; function add3(eventName, chainFunction, defaultFunction) { if (typeof eventName === "object") return addConfiguredEvents(eventName); if (!chainFunction) chainFunction = reverseStoppableEventChain; if (!defaultFunction) defaultFunction = nop; var context = { subscribers: [], fire: defaultFunction, subscribe: function(cb) { if (context.subscribers.indexOf(cb) === -1) { context.subscribers.push(cb); context.fire = chainFunction(context.fire, cb); } }, unsubscribe: function(cb) { context.subscribers = context.subscribers.filter(function(fn) { return fn !== cb; }); context.fire = context.subscribers.reduce(chainFunction, defaultFunction); } }; evs[eventName] = rv[eventName] = context; return context; } function addConfiguredEvents(cfg) { keys(cfg).forEach(function(eventName) { var args = cfg[eventName]; if (isArray(args)) { add3(eventName, cfg[eventName][0], cfg[eventName][1]); } else if (args === "asap") { var context = add3(eventName, mirror, function fire() { var i2 = arguments.length, args2 = new Array(i2); while (i2--) args2[i2] = arguments[i2]; context.subscribers.forEach(function(fn) { asap$1(function fireEvent() { fn.apply(null, args2); }); }); }); } else throw new exceptions.InvalidArgument("Invalid event config"); }); } } function makeClassConstructor(prototype, constructor) { derive(constructor).from({ prototype }); return constructor; } function createTableConstructor(db2) { return makeClassConstructor(Table.prototype, function Table2(name, tableSchema, trans) { this.db = db2; this._tx = trans; this.name = name; this.schema = tableSchema; this.hook = db2._allTables[name] ? db2._allTables[name].hook : Events(null, { creating: [hookCreatingChain, nop], reading: [pureFunctionChain, mirror], updating: [hookUpdatingChain, nop], deleting: [hookDeletingChain, nop] }); }); } function isPlainKeyRange(ctx, ignoreLimitFilter) { return !(ctx.filter || ctx.algorithm || ctx.or) && (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter); } function addFilter(ctx, fn) { ctx.filter = combine(ctx.filter, fn); } function addReplayFilter(ctx, factory, isLimitFilter) { var curr = ctx.replayFilter; ctx.replayFilter = curr ? function() { return combine(curr(), factory()); } : factory; ctx.justLimit = isLimitFilter && !curr; } function addMatchFilter(ctx, fn) { ctx.isMatch = combine(ctx.isMatch, fn); } function getIndexOrStore(ctx, coreSchema) { if (ctx.isPrimKey) return coreSchema.primaryKey; var index = coreSchema.getIndexByKeyPath(ctx.index); if (!index) throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + coreSchema.name + " is not indexed"); return index; } function openCursor(ctx, coreTable, trans) { var index = getIndexOrStore(ctx, coreTable.schema); return coreTable.openCursor({ trans, values: !ctx.keysOnly, reverse: ctx.dir === "prev", unique: !!ctx.unique, query: { index, range: ctx.range } }); } function iter(ctx, fn, coreTrans, coreTable) { var filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter; if (!ctx.or) { return iterate(openCursor(ctx, coreTable, coreTrans), combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper); } else { var set_1 = {}; var union = function(item, cursor, advance) { if (!filter || filter(cursor, advance, function(result) { return cursor.stop(result); }, function(err) { return cursor.fail(err); })) { var primaryKey = cursor.primaryKey; var key = "" + primaryKey; if (key === "[object ArrayBuffer]") key = "" + new Uint8Array(primaryKey); if (!hasOwn(set_1, key)) { set_1[key] = true; fn(item, cursor, advance); } } }; return Promise.all([ ctx.or._iterate(union, coreTrans), iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper) ]); } } function iterate(cursorPromise, filter, fn, valueMapper) { var mappedFn = valueMapper ? function(x, c, a) { return fn(valueMapper(x), c, a); } : fn; var wrappedFn = wrap(mappedFn); return cursorPromise.then(function(cursor) { if (cursor) { return cursor.start(function() { var c = function() { return cursor.continue(); }; if (!filter || filter(cursor, function(advancer) { return c = advancer; }, function(val) { cursor.stop(val); c = nop; }, function(e) { cursor.fail(e); c = nop; })) wrappedFn(cursor.value, cursor, function(advancer) { return c = advancer; }); c(); }); } }); } var Collection = function() { function Collection2() { } Collection2.prototype._read = function(fn, cb) { var ctx = this._ctx; return ctx.error ? ctx.table._trans(null, rejection.bind(null, ctx.error)) : ctx.table._trans("readonly", fn).then(cb); }; Collection2.prototype._write = function(fn) { var ctx = this._ctx; return ctx.error ? ctx.table._trans(null, rejection.bind(null, ctx.error)) : ctx.table._trans("readwrite", fn, "locked"); }; Collection2.prototype._addAlgorithm = function(fn) { var ctx = this._ctx; ctx.algorithm = combine(ctx.algorithm, fn); }; Collection2.prototype._iterate = function(fn, coreTrans) { return iter(this._ctx, fn, coreTrans, this._ctx.table.core); }; Collection2.prototype.clone = function(props2) { var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx); if (props2) extend(ctx, props2); rv._ctx = ctx; return rv; }; Collection2.prototype.raw = function() { this._ctx.valueMapper = null; return this; }; Collection2.prototype.each = function(fn) { var ctx = this._ctx; return this._read(function(trans) { return iter(ctx, fn, trans, ctx.table.core); }); }; Collection2.prototype.count = function(cb) { var _this = this; return this._read(function(trans) { var ctx = _this._ctx; var coreTable = ctx.table.core; if (isPlainKeyRange(ctx, true)) { return coreTable.count({ trans, query: { index: getIndexOrStore(ctx, coreTable.schema), range: ctx.range } }).then(function(count2) { return Math.min(count2, ctx.limit); }); } else { var count = 0; return iter(ctx, function() { ++count; return false; }, trans, coreTable).then(function() { return count; }); } }).then(cb); }; Collection2.prototype.sortBy = function(keyPath, cb) { var parts = keyPath.split(".").reverse(), lastPart = parts[0], lastIndex = parts.length - 1; function getval(obj, i) { if (i) return getval(obj[parts[i]], i - 1); return obj[lastPart]; } var order = this._ctx.dir === "next" ? 1 : -1; function sorter(a, b) { var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex); return cmp3(aVal, bVal) * order; } return this.toArray(function(a) { return a.slice().sort(sorter); }).then(cb); }; Collection2.prototype.toArray = function(cb) { var _this = this; return this._read(function(trans) { var ctx = _this._ctx; if (isPlainKeyRange(ctx, true) && ctx.limit > 0) { var valueMapper_1 = ctx.valueMapper; var index = getIndexOrStore(ctx, ctx.table.core.schema); return ctx.table.core.query({ trans, limit: ctx.limit, values: true, direction: ctx.dir === "prev" ? "prev" : void 0, query: { index, range: ctx.range } }).then(function(_a2) { var result = _a2.result; return valueMapper_1 ? result.map(valueMapper_1) : result; }); } else { var a_1 = []; return iter(ctx, function(item) { return a_1.push(item); }, trans, ctx.table.core).then(function() { return a_1; }); } }, cb); }; Collection2.prototype.offset = function(offset) { var ctx = this._ctx; if (offset <= 0) return this; ctx.offset += offset; if (isPlainKeyRange(ctx)) { addReplayFilter(ctx, function() { var offsetLeft = offset; return function(cursor, advance) { if (offsetLeft === 0) return true; if (offsetLeft === 1) { --offsetLeft; return false; } advance(function() { cursor.advance(offsetLeft); offsetLeft = 0; }); return false; }; }); } else { addReplayFilter(ctx, function() { var offsetLeft = offset; return function() { return --offsetLeft < 0; }; }); } return this; }; Collection2.prototype.limit = function(numRows) { this._ctx.limit = Math.min(this._ctx.limit, numRows); addReplayFilter(this._ctx, function() { var rowsLeft = numRows; return function(cursor, advance, resolve) { if (--rowsLeft <= 0) advance(resolve); return rowsLeft >= 0; }; }, true); return this; }; Collection2.prototype.until = function(filterFunction, bIncludeStopEntry) { addFilter(this._ctx, function(cursor, advance, resolve) { if (filterFunction(cursor.value)) { advance(resolve); return bIncludeStopEntry; } else { return true; } }); return this; }; Collection2.prototype.first = function(cb) { return this.limit(1).toArray(function(a) { return a[0]; }).then(cb); }; Collection2.prototype.last = function(cb) { return this.reverse().first(cb); }; Collection2.prototype.filter = function(filterFunction) { addFilter(this._ctx, function(cursor) { return filterFunction(cursor.value); }); addMatchFilter(this._ctx, filterFunction); return this; }; Collection2.prototype.and = function(filter) { return this.filter(filter); }; Collection2.prototype.or = function(indexName) { return new this.db.WhereClause(this._ctx.table, indexName, this); }; Collection2.prototype.reverse = function() { this._ctx.dir = this._ctx.dir === "prev" ? "next" : "prev"; if (this._ondirectionchange) this._ondirectionchange(this._ctx.dir); return this; }; Collection2.prototype.desc = function() { return this.reverse(); }; Collection2.prototype.eachKey = function(cb) { var ctx = this._ctx; ctx.keysOnly = !ctx.isMatch; return this.each(function(val, cursor) { cb(cursor.key, cursor); }); }; Collection2.prototype.eachUniqueKey = function(cb) { this._ctx.unique = "unique"; return this.eachKey(cb); }; Collection2.prototype.eachPrimaryKey = function(cb) { var ctx = this._ctx; ctx.keysOnly = !ctx.isMatch; return this.each(function(val, cursor) { cb(cursor.primaryKey, cursor); }); }; Collection2.prototype.keys = function(cb) { var ctx = this._ctx; ctx.keysOnly = !ctx.isMatch; var a = []; return this.each(function(item, cursor) { a.push(cursor.key); }).then(function() { return a; }).then(cb); }; Collection2.prototype.primaryKeys = function(cb) { var ctx = this._ctx; if (isPlainKeyRange(ctx, true) && ctx.limit > 0) { return this._read(function(trans) { var index = getIndexOrStore(ctx, ctx.table.core.schema); return ctx.table.core.query({ trans, values: false, limit: ctx.limit, direction: ctx.dir === "prev" ? "prev" : void 0, query: { index, range: ctx.range } }); }).then(function(_a2) { var result = _a2.result; return result; }).then(cb); } ctx.keysOnly = !ctx.isMatch; var a = []; return this.each(function(item, cursor) { a.push(cursor.primaryKey); }).then(function() { return a; }).then(cb); }; Collection2.prototype.uniqueKeys = function(cb) { this._ctx.unique = "unique"; return this.keys(cb); }; Collection2.prototype.firstKey = function(cb) { return this.limit(1).keys(function(a) { return a[0]; }).then(cb); }; Collection2.prototype.lastKey = function(cb) { return this.reverse().firstKey(cb); }; Collection2.prototype.distinct = function() { var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index]; if (!idx || !idx.multi) return this; var set = {}; addFilter(this._ctx, function(cursor) { var strKey = cursor.primaryKey.toString(); var found = hasOwn(set, strKey); set[strKey] = true; return !found; }); return this; }; Collection2.prototype.modify = function(changes) { var _this = this; var ctx = this._ctx; return this._write(function(trans) { var modifyer; if (typeof changes === "function") { modifyer = changes; } else { modifyer = function(item) { return applyUpdateSpec(item, changes); }; } var coreTable = ctx.table.core; var _a2 = coreTable.schema.primaryKey, outbound = _a2.outbound, extractKey2 = _a2.extractKey; var limit = 200; var modifyChunkSize = _this.db._options.modifyChunkSize; if (modifyChunkSize) { if (typeof modifyChunkSize == "object") { limit = modifyChunkSize[coreTable.name] || modifyChunkSize["*"] || 200; } else { limit = modifyChunkSize; } } var totalFailures = []; var successCount = 0; var failedKeys = []; var applyMutateResult = function(expectedCount, res) { var failures = res.failures, numFailures = res.numFailures; successCount += expectedCount - numFailures; for (var _i = 0, _a3 = keys(failures); _i < _a3.length; _i++) { var pos = _a3[_i]; totalFailures.push(failures[pos]); } }; var isUnconditionalDelete = changes === deleteCallback; return _this.clone().primaryKeys().then(function(keys2) { var criteria = isPlainKeyRange(ctx) && ctx.limit === Infinity && (typeof changes !== "function" || isUnconditionalDelete) && { index: ctx.index, range: ctx.range }; var nextChunk = function(offset) { var count = Math.min(limit, keys2.length - offset); var keysInChunk = keys2.slice(offset, offset + count); return (isUnconditionalDelete ? Promise.resolve([]) : coreTable.getMany({ trans, keys: keysInChunk, cache: "immutable" })).then(function(values) { var addValues = []; var putValues = []; var putKeys = outbound ? [] : null; var deleteKeys = isUnconditionalDelete ? keysInChunk : []; if (!isUnconditionalDelete) for (var i = 0; i < count; ++i) { var origValue = values[i]; var ctx_1 = { value: deepClone(origValue), primKey: keys2[offset + i] }; if (modifyer.call(ctx_1, ctx_1.value, ctx_1) !== false) { if (ctx_1.value == null) { deleteKeys.push(keys2[offset + i]); } else if (!outbound && cmp3(extractKey2(origValue), extractKey2(ctx_1.value)) !== 0) { deleteKeys.push(keys2[offset + i]); addValues.push(ctx_1.value); } else { putValues.push(ctx_1.value); if (outbound) putKeys.push(keys2[offset + i]); } } } return Promise.resolve(addValues.length > 0 && coreTable.mutate({ trans, type: "add", values: addValues }).then(function(res) { for (var pos in res.failures) { deleteKeys.splice(parseInt(pos), 1); } applyMutateResult(addValues.length, res); })).then(function() { return (putValues.length > 0 || criteria && typeof changes === "object") && coreTable.mutate({ trans, type: "put", keys: putKeys, values: putValues, criteria, changeSpec: typeof changes !== "function" && changes, isAdditionalChunk: offset > 0 }).then(function(res) { return applyMutateResult(putValues.length, res); }); }).then(function() { return (deleteKeys.length > 0 || criteria && isUnconditionalDelete) && coreTable.mutate({ trans, type: "delete", keys: deleteKeys, criteria, isAdditionalChunk: offset > 0 }).then(function(res) { return builtInDeletionTrigger(ctx.table, deleteKeys, res); }).then(function(res) { return applyMutateResult(deleteKeys.length, res); }); }).then(function() { return keys2.length > offset + count && nextChunk(offset + limit); }); }); }; return nextChunk(0).then(function() { if (totalFailures.length > 0) throw new ModifyError("Error modifying one or more objects", totalFailures, successCount, failedKeys); return keys2.length; }); }); }); }; Collection2.prototype.delete = function() { var ctx = this._ctx, range = ctx.range; if (isPlainKeyRange(ctx) && !ctx.table.schema.yProps && (ctx.isPrimKey || range.type === 3)) { return this._write(function(trans) { var primaryKey = ctx.table.core.schema.primaryKey; var coreRange = range; return ctx.table.core.count({ trans, query: { index: primaryKey, range: coreRange } }).then(function(count) { return ctx.table.core.mutate({ trans, type: "deleteRange", range: coreRange }).then(function(_a2) { var failures = _a2.failures, numFailures = _a2.numFailures; if (numFailures) throw new ModifyError("Could not delete some values", Object.keys(failures).map(function(pos) { return failures[pos]; }), count - numFailures); return count - numFailures; }); }); }); } return this.modify(deleteCallback); }; return Collection2; }(); var deleteCallback = function(value, ctx) { return ctx.value = null; }; function createCollectionConstructor(db2) { return makeClassConstructor(Collection.prototype, function Collection2(whereClause, keyRangeGenerator) { this.db = db2; var keyRange = AnyRange, error = null; if (keyRangeGenerator) try { keyRange = keyRangeGenerator(); } catch (ex) { error = ex; } var whereCtx = whereClause._ctx; var table = whereCtx.table; var readingHook = table.hook.reading.fire; this._ctx = { table, index: whereCtx.index, isPrimKey: !whereCtx.index || table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name, range: keyRange, keysOnly: false, dir: "next", unique: "", algorithm: null, filter: null, replayFilter: null, justLimit: true, isMatch: null, offset: 0, limit: Infinity, error, or: whereCtx.or, valueMapper: readingHook !== mirror ? readingHook : null }; }); } function simpleCompare(a, b) { return a < b ? -1 : a === b ? 0 : 1; } function simpleCompareReverse(a, b) { return a > b ? -1 : a === b ? 0 : 1; } function fail(collectionOrWhereClause, err, T) { var collection = collectionOrWhereClause instanceof WhereClause ? new collectionOrWhereClause.Collection(collectionOrWhereClause) : collectionOrWhereClause; collection._ctx.error = T ? new T(err) : new TypeError(err); return collection; } function emptyCollection(whereClause) { return new whereClause.Collection(whereClause, function() { return rangeEqual(""); }).limit(0); } function upperFactory(dir) { return dir === "next" ? function(s) { return s.toUpperCase(); } : function(s) { return s.toLowerCase(); }; } function lowerFactory(dir) { return dir === "next" ? function(s) { return s.toLowerCase(); } : function(s) { return s.toUpperCase(); }; } function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp4, dir) { var length = Math.min(key.length, lowerNeedle.length); var llp = -1; for (var i = 0; i < length; ++i) { var lwrKeyChar = lowerKey[i]; if (lwrKeyChar !== lowerNeedle[i]) { if (cmp4(key[i], upperNeedle[i]) < 0) return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1); if (cmp4(key[i], lowerNeedle[i]) < 0) return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1); if (llp >= 0) return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1); return null; } if (cmp4(key[i], lwrKeyChar) < 0) llp = i; } if (length < lowerNeedle.length && dir === "next") return key + upperNeedle.substr(key.length); if (length < key.length && dir === "prev") return key.substr(0, upperNeedle.length); return llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1); } function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) { var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length; if (!needles.every(function(s) { return typeof s === "string"; })) { return fail(whereClause, STRING_EXPECTED); } function initDirection(dir) { upper = upperFactory(dir); lower = lowerFactory(dir); compare = dir === "next" ? simpleCompare : simpleCompareReverse; var needleBounds = needles.map(function(needle) { return { lower: lower(needle), upper: upper(needle) }; }).sort(function(a, b) { return compare(a.lower, b.lower); }); upperNeedles = needleBounds.map(function(nb) { return nb.upper; }); lowerNeedles = needleBounds.map(function(nb) { return nb.lower; }); direction = dir; nextKeySuffix = dir === "next" ? "" : suffix; } initDirection("next"); var c = new whereClause.Collection(whereClause, function() { return createRange(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix); }); c._ondirectionchange = function(direction2) { initDirection(direction2); }; var firstPossibleNeedle = 0; c._addAlgorithm(function(cursor, advance, resolve) { var key = cursor.key; if (typeof key !== "string") return false; var lowerKey = lower(key); if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) { return true; } else { var lowestPossibleCasing = null; for (var i = firstPossibleNeedle; i < needlesLen; ++i) { var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction); if (casing === null && lowestPossibleCasing === null) firstPossibleNeedle = i + 1; else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) { lowestPossibleCasing = casing; } } if (lowestPossibleCasing !== null) { advance(function() { cursor.continue(lowestPossibleCasing + nextKeySuffix); }); } else { advance(resolve); } return false; } }); return c; } function createRange(lower, upper, lowerOpen, upperOpen) { return { type: 2, lower, upper, lowerOpen, upperOpen }; } function rangeEqual(value) { return { type: 1, lower: value, upper: value }; } var WhereClause = function() { function WhereClause2() { } Object.defineProperty(WhereClause2.prototype, "Collection", { get: function() { return this._ctx.table.db.Collection; }, enumerable: false, configurable: true }); WhereClause2.prototype.between = function(lower, upper, includeLower, includeUpper) { includeLower = includeLower !== false; includeUpper = includeUpper === true; try { if (this._cmp(lower, upper) > 0 || this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)) return emptyCollection(this); return new this.Collection(this, function() { return createRange(lower, upper, !includeLower, !includeUpper); }); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); } }; WhereClause2.prototype.equals = function(value) { if (value == null) return fail(this, INVALID_KEY_ARGUMENT); return new this.Collection(this, function() { return rangeEqual(value); }); }; WhereClause2.prototype.above = function(value) { if (value == null) return fail(this, INVALID_KEY_ARGUMENT); return new this.Collection(this, function() { return createRange(value, void 0, true); }); }; WhereClause2.prototype.aboveOrEqual = function(value) { if (value == null) return fail(this, INVALID_KEY_ARGUMENT); return new this.Collection(this, function() { return createRange(value, void 0, false); }); }; WhereClause2.prototype.below = function(value) { if (value == null) return fail(this, INVALID_KEY_ARGUMENT); return new this.Collection(this, function() { return createRange(void 0, value, false, true); }); }; WhereClause2.prototype.belowOrEqual = function(value) { if (value == null) return fail(this, INVALID_KEY_ARGUMENT); return new this.Collection(this, function() { return createRange(void 0, value); }); }; WhereClause2.prototype.startsWith = function(str) { if (typeof str !== "string") return fail(this, STRING_EXPECTED); return this.between(str, str + maxString, true, true); }; WhereClause2.prototype.startsWithIgnoreCase = function(str) { if (str === "") return this.startsWith(str); return addIgnoreCaseAlgorithm(this, function(x, a) { return x.indexOf(a[0]) === 0; }, [str], maxString); }; WhereClause2.prototype.equalsIgnoreCase = function(str) { return addIgnoreCaseAlgorithm(this, function(x, a) { return x === a[0]; }, [str], ""); }; WhereClause2.prototype.anyOfIgnoreCase = function() { var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); if (set.length === 0) return emptyCollection(this); return addIgnoreCaseAlgorithm(this, function(x, a) { return a.indexOf(x) !== -1; }, set, ""); }; WhereClause2.prototype.startsWithAnyOfIgnoreCase = function() { var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); if (set.length === 0) return emptyCollection(this); return addIgnoreCaseAlgorithm(this, function(x, a) { return a.some(function(n) { return x.indexOf(n) === 0; }); }, set, maxString); }; WhereClause2.prototype.anyOf = function() { var _this = this; var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); var compare = this._cmp; try { set.sort(compare); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); } if (set.length === 0) return emptyCollection(this); var c = new this.Collection(this, function() { return createRange(set[0], set[set.length - 1]); }); c._ondirectionchange = function(direction) { compare = direction === "next" ? _this._ascending : _this._descending; set.sort(compare); }; var i = 0; c._addAlgorithm(function(cursor, advance, resolve) { var key = cursor.key; while (compare(key, set[i]) > 0) { ++i; if (i === set.length) { advance(resolve); return false; } } if (compare(key, set[i]) === 0) { return true; } else { advance(function() { cursor.continue(set[i]); }); return false; } }); return c; }; WhereClause2.prototype.notEqual = function(value) { return this.inAnyRange([ [minKey, value], [value, this.db._maxKey] ], { includeLowers: false, includeUppers: false }); }; WhereClause2.prototype.noneOf = function() { var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); if (set.length === 0) return new this.Collection(this); try { set.sort(this._ascending); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); } var ranges = set.reduce(function(res, val) { return res ? res.concat([[res[res.length - 1][1], val]]) : [[minKey, val]]; }, null); ranges.push([set[set.length - 1], this.db._maxKey]); return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false }); }; WhereClause2.prototype.inAnyRange = function(ranges, options) { var _this = this; var cmp4 = this._cmp, ascending = this._ascending, descending = this._descending, min = this._min, max = this._max; if (ranges.length === 0) return emptyCollection(this); if (!ranges.every(function(range) { return range[0] !== void 0 && range[1] !== void 0 && ascending(range[0], range[1]) <= 0; })) { 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); } var includeLowers = !options || options.includeLowers !== false; var includeUppers = options && options.includeUppers === true; function addRange2(ranges2, newRange) { var i = 0, l = ranges2.length; for (; i < l; ++i) { var range = ranges2[i]; if (cmp4(newRange[0], range[1]) < 0 && cmp4(newRange[1], range[0]) > 0) { range[0] = min(range[0], newRange[0]); range[1] = max(range[1], newRange[1]); break; } } if (i === l) ranges2.push(newRange); return ranges2; } var sortDirection = ascending; function rangeSorter(a, b) { return sortDirection(a[0], b[0]); } var set; try { set = ranges.reduce(addRange2, []); set.sort(rangeSorter); } catch (ex) { return fail(this, INVALID_KEY_ARGUMENT); } var rangePos = 0; var keyIsBeyondCurrentEntry = includeUppers ? function(key) { return ascending(key, set[rangePos][1]) > 0; } : function(key) { return ascending(key, set[rangePos][1]) >= 0; }; var keyIsBeforeCurrentEntry = includeLowers ? function(key) { return descending(key, set[rangePos][0]) > 0; } : function(key) { return descending(key, set[rangePos][0]) >= 0; }; function keyWithinCurrentRange(key) { return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key); } var checkKey = keyIsBeyondCurrentEntry; var c = new this.Collection(this, function() { return createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers); }); c._ondirectionchange = function(direction) { if (direction === "next") { checkKey = keyIsBeyondCurrentEntry; sortDirection = ascending; } else { checkKey = keyIsBeforeCurrentEntry; sortDirection = descending; } set.sort(rangeSorter); }; c._addAlgorithm(function(cursor, advance, resolve) { var key = cursor.key; while (checkKey(key)) { ++rangePos; if (rangePos === set.length) { advance(resolve); return false; } } if (keyWithinCurrentRange(key)) { return true; } else if (_this._cmp(key, set[rangePos][1]) === 0 || _this._cmp(key, set[rangePos][0]) === 0) { return false; } else { advance(function() { if (sortDirection === ascending) cursor.continue(set[rangePos][0]); else cursor.continue(set[rangePos][1]); }); return false; } }); return c; }; WhereClause2.prototype.startsWithAnyOf = function() { var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); if (!set.every(function(s) { return typeof s === "string"; })) { return fail(this, "startsWithAnyOf() only works with strings"); } if (set.length === 0) return emptyCollection(this); return this.inAnyRange(set.map(function(str) { return [str, str + maxString]; })); }; return WhereClause2; }(); function createWhereClauseConstructor(db2) { return makeClassConstructor(WhereClause.prototype, function WhereClause2(table, index, orCollection) { this.db = db2; this._ctx = { table, index: index === ":id" ? null : index, or: orCollection }; this._cmp = this._ascending = cmp3; this._descending = function(a, b) { return cmp3(b, a); }; this._max = function(a, b) { return cmp3(a, b) > 0 ? a : b; }; this._min = function(a, b) { return cmp3(a, b) < 0 ? a : b; }; this._IDBKeyRange = db2._deps.IDBKeyRange; if (!this._IDBKeyRange) throw new exceptions.MissingAPI(); }); } function eventRejectHandler(reject) { return wrap(function(event) { preventDefault(event); reject(event.target.error); return false; }); } function preventDefault(event) { if (event.stopPropagation) event.stopPropagation(); if (event.preventDefault) event.preventDefault(); } var DEXIE_STORAGE_MUTATED_EVENT_NAME = "storagemutated"; var STORAGE_MUTATED_DOM_EVENT_NAME = "x-storagemutated-1"; var globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME); var Transaction = function() { function Transaction2() { } Transaction2.prototype._lock = function() { assert(!PSD.global); ++this._reculock; if (this._reculock === 1 && !PSD.global) PSD.lockOwnerFor = this; return this; }; Transaction2.prototype._unlock = function() { assert(!PSD.global); if (--this._reculock === 0) { if (!PSD.global) PSD.lockOwnerFor = null; while (this._blockedFuncs.length > 0 && !this._locked()) { var fnAndPSD = this._blockedFuncs.shift(); try { usePSD(fnAndPSD[1], fnAndPSD[0]); } catch (e) { } } } return this; }; Transaction2.prototype._locked = function() { return this._reculock && PSD.lockOwnerFor !== this; }; Transaction2.prototype.create = function(idbtrans) { var _this = this; if (!this.mode) return this; var idbdb = this.db.idbdb; var dbOpenError = this.db._state.dbOpenError; assert(!this.idbtrans); if (!idbtrans && !idbdb) { switch (dbOpenError && dbOpenError.name) { case "DatabaseClosedError": throw new exceptions.DatabaseClosed(dbOpenError); case "MissingAPIError": throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError); default: throw new exceptions.OpenFailed(dbOpenError); } } if (!this.active) throw new exceptions.TransactionInactive(); assert(this._completion._state === null); idbtrans = this.idbtrans = idbtrans || (this.db.core ? this.db.core.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability }) : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })); idbtrans.onerror = wrap(function(ev) { preventDefault(ev); _this._reject(idbtrans.error); }); idbtrans.onabort = wrap(function(ev) { preventDefault(ev); _this.active && _this._reject(new exceptions.Abort(idbtrans.error)); _this.active = false; _this.on("abort").fire(ev); }); idbtrans.oncomplete = wrap(function() { _this.active = false; _this._resolve(); if ("mutatedParts" in idbtrans) { globalEvents.storagemutated.fire(idbtrans["mutatedParts"]); } }); return this; }; Transaction2.prototype._promise = function(mode, fn, bWriteLock) { var _this = this; if (mode === "readwrite" && this.mode !== "readwrite") return rejection(new exceptions.ReadOnly("Transaction is readonly")); if (!this.active) return rejection(new exceptions.TransactionInactive()); if (this._locked()) { return new DexiePromise(function(resolve, reject) { _this._blockedFuncs.push([ function() { _this._promise(mode, fn, bWriteLock).then(resolve, reject); }, PSD ]); }); } else if (bWriteLock) { return newScope(function() { var p2 = new DexiePromise(function(resolve, reject) { _this._lock(); var rv = fn(resolve, reject, _this); if (rv && rv.then) rv.then(resolve, reject); }); p2.finally(function() { return _this._unlock(); }); p2._lib = true; return p2; }); } else { var p = new DexiePromise(function(resolve, reject) { var rv = fn(resolve, reject, _this); if (rv && rv.then) rv.then(resolve, reject); }); p._lib = true; return p; } }; Transaction2.prototype._root = function() { return this.parent ? this.parent._root() : this; }; Transaction2.prototype.waitFor = function(promiseLike) { var root = this._root(); var promise = DexiePromise.resolve(promiseLike); if (root._waitingFor) { root._waitingFor = root._waitingFor.then(function() { return promise; }); } else { root._waitingFor = promise; root._waitingQueue = []; var store = root.idbtrans.objectStore(root.storeNames[0]); (function spin() { ++root._spinCount; while (root._waitingQueue.length) root._waitingQueue.shift()(); if (root._waitingFor) store.get(-Infinity).onsuccess = spin; })(); } var currentWaitPromise = root._waitingFor; return new DexiePromise(function(resolve, reject) { promise.then(function(res) { return root._waitingQueue.push(wrap(resolve.bind(null, res))); }, function(err) { return root._waitingQueue.push(wrap(reject.bind(null, err))); }).finally(function() { if (root._waitingFor === currentWaitPromise) { root._waitingFor = null; } }); }); }; Transaction2.prototype.abort = function() { if (this.active) { this.active = false; if (this.idbtrans) this.idbtrans.abort(); this._reject(new exceptions.Abort()); } }; Transaction2.prototype.table = function(tableName) { var memoizedTables = this._memoizedTables || (this._memoizedTables = {}); if (hasOwn(memoizedTables, tableName)) return memoizedTables[tableName]; var tableSchema = this.schema[tableName]; if (!tableSchema) { throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); } var transactionBoundTable = new this.db.Table(tableName, tableSchema, this); transactionBoundTable.core = this.db.core.table(tableName); memoizedTables[tableName] = transactionBoundTable; return transactionBoundTable; }; return Transaction2; }(); function createTransactionConstructor(db2) { return makeClassConstructor(Transaction.prototype, function Transaction2(mode, storeNames, dbschema, chromeTransactionDurability, parent) { var _this = this; if (mode !== "readonly") storeNames.forEach(function(storeName) { var _a2; var yProps = (_a2 = dbschema[storeName]) === null || _a2 === void 0 ? void 0 : _a2.yProps; if (yProps) storeNames = storeNames.concat(yProps.map(function(p) { return p.updatesTable; })); }); this.db = db2; this.mode = mode; this.storeNames = storeNames; this.schema = dbschema; this.chromeTransactionDurability = chromeTransactionDurability; this.idbtrans = null; this.on = Events(this, "complete", "error", "abort"); this.parent = parent || null; this.active = true; this._reculock = 0; this._blockedFuncs = []; this._resolve = null; this._reject = null; this._waitingFor = null; this._waitingQueue = null; this._spinCount = 0; this._completion = new DexiePromise(function(resolve, reject) { _this._resolve = resolve; _this._reject = reject; }); this._completion.then(function() { _this.active = false; _this.on.complete.fire(); }, function(e) { var wasActive = _this.active; _this.active = false; _this.on.error.fire(e); _this.parent ? _this.parent._reject(e) : wasActive && _this.idbtrans && _this.idbtrans.abort(); return rejection(e); }); }); } function createIndexSpec(name, keyPath, unique, multi, auto, compound, isPrimKey, type2) { return { name, keyPath, unique, multi, auto, compound, src: (unique && !isPrimKey ? "&" : "") + (multi ? "*" : "") + (auto ? "++" : "") + nameFromKeyPath(keyPath), type: type2 }; } function nameFromKeyPath(keyPath) { return typeof keyPath === "string" ? keyPath : keyPath ? "[" + [].join.call(keyPath, "+") + "]" : ""; } function createTableSchema(name, primKey, indexes) { return { name, primKey, indexes, mappedClass: null, idxByName: arrayToObject(indexes, function(index) { return [index.name, index]; }) }; } function safariMultiStoreFix(storeNames) { return storeNames.length === 1 ? storeNames[0] : storeNames; } var getMaxKey = function(IdbKeyRange) { try { IdbKeyRange.only([[]]); getMaxKey = function() { return [[]]; }; return [[]]; } catch (e) { getMaxKey = function() { return maxString; }; return maxString; } }; function getKeyExtractor(keyPath) { if (keyPath == null) { return function() { return void 0; }; } else if (typeof keyPath === "string") { return getSinglePathKeyExtractor(keyPath); } else { return function(obj) { return getByKeyPath(obj, keyPath); }; } } function getSinglePathKeyExtractor(keyPath) { var split = keyPath.split("."); if (split.length === 1) { return function(obj) { return obj[keyPath]; }; } else { return function(obj) { return getByKeyPath(obj, keyPath); }; } } function arrayify(arrayLike) { return [].slice.call(arrayLike); } var _id_counter = 0; function getKeyPathAlias(keyPath) { return keyPath == null ? ":id" : typeof keyPath === "string" ? keyPath : "[".concat(keyPath.join("+"), "]"); } function createDBCore(db2, IdbKeyRange, tmpTrans) { function extractSchema(db3, trans) { var tables2 = arrayify(db3.objectStoreNames); var tempStore = tables2.length > 0 ? trans.objectStore(tables2[0]) : {}; return { schema: { name: db3.name, tables: tables2.map(function(table) { return trans.objectStore(table); }).map(function(store) { var keyPath = store.keyPath, autoIncrement = store.autoIncrement; var compound = isArray(keyPath); var outbound = keyPath == null; var indexByKeyPath = {}; var result = { name: store.name, primaryKey: { name: null, isPrimaryKey: true, outbound, compound, keyPath, autoIncrement, unique: true, extractKey: getKeyExtractor(keyPath) }, indexes: arrayify(store.indexNames).map(function(indexName) { return store.index(indexName); }).map(function(index) { var name = index.name, unique = index.unique, multiEntry = index.multiEntry, keyPath2 = index.keyPath; var compound2 = isArray(keyPath2); var result2 = { name, compound: compound2, keyPath: keyPath2, unique, multiEntry, extractKey: getKeyExtractor(keyPath2) }; indexByKeyPath[getKeyPathAlias(keyPath2)] = result2; return result2; }), getIndexByKeyPath: function(keyPath2) { return indexByKeyPath[getKeyPathAlias(keyPath2)]; } }; indexByKeyPath[":id"] = result.primaryKey; if (keyPath != null) { indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey; } return result; }) }, hasGetAll: tables2.length > 0 && "getAll" in tempStore && !(typeof navigator !== "undefined" && /Safari/.test(navigator.userAgent) && !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604), hasIdb3Features: "getAllRecords" in tempStore }; } function makeIDBKeyRange(range) { if (range.type === 3) return null; if (range.type === 4) throw new Error("Cannot convert never type to IDBKeyRange"); var lower = range.lower, upper = range.upper, lowerOpen = range.lowerOpen, upperOpen = range.upperOpen; var idbRange = lower === void 0 ? upper === void 0 ? null : IdbKeyRange.upperBound(upper, !!upperOpen) : upper === void 0 ? IdbKeyRange.lowerBound(lower, !!lowerOpen) : IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen); return idbRange; } function createDbCoreTable(tableSchema) { var tableName = tableSchema.name; function mutate(_a3) { var trans = _a3.trans, type2 = _a3.type, keys2 = _a3.keys, values = _a3.values, range = _a3.range; return new Promise(function(resolve, reject) { resolve = wrap(resolve); var store = trans.objectStore(tableName); var outbound = store.keyPath == null; var isAddOrPut = type2 === "put" || type2 === "add"; if (!isAddOrPut && type2 !== "delete" && type2 !== "deleteRange") throw new Error("Invalid operation type: " + type2); var length = (keys2 || values || { length: 1 }).length; if (keys2 && values && keys2.length !== values.length) { throw new Error("Given keys array must have same length as given values array."); } if (length === 0) return resolve({ numFailures: 0, failures: {}, results: [], lastResult: void 0 }); var req; var reqs = []; var failures = []; var numFailures = 0; var errorHandler = function(event) { ++numFailures; preventDefault(event); }; if (type2 === "deleteRange") { if (range.type === 4) return resolve({ numFailures, failures, results: [], lastResult: void 0 }); if (range.type === 3) reqs.push(req = store.clear()); else reqs.push(req = store.delete(makeIDBKeyRange(range))); } else { var _a4 = isAddOrPut ? outbound ? [values, keys2] : [values, null] : [keys2, null], args1 = _a4[0], args2 = _a4[1]; if (isAddOrPut) { for (var i = 0; i < length; ++i) { reqs.push(req = args2 && args2[i] !== void 0 ? store[type2](args1[i], args2[i]) : store[type2](args1[i])); req.onerror = errorHandler; } } else { for (var i = 0; i < length; ++i) { reqs.push(req = store[type2](args1[i])); req.onerror = errorHandler; } } } var done = function(event) { var lastResult = event.target.result; reqs.forEach(function(req2, i2) { return req2.error != null && (failures[i2] = req2.error); }); resolve({ numFailures, failures, results: type2 === "delete" ? keys2 : reqs.map(function(req2) { return req2.result; }), lastResult }); }; req.onerror = function(event) { errorHandler(event); done(event); }; req.onsuccess = done; }); } function openCursor2(_a3) { var trans = _a3.trans, values = _a3.values, query2 = _a3.query, reverse = _a3.reverse, unique = _a3.unique; return new Promise(function(resolve, reject) { resolve = wrap(resolve); var index = query2.index, range = query2.range; var store = trans.objectStore(tableName); var source = index.isPrimaryKey ? store : store.index(index.name); var direction = reverse ? unique ? "prevunique" : "prev" : unique ? "nextunique" : "next"; var req = values || !("openKeyCursor" in source) ? source.openCursor(makeIDBKeyRange(range), direction) : source.openKeyCursor(makeIDBKeyRange(range), direction); req.onerror = eventRejectHandler(reject); req.onsuccess = wrap(function(ev) { var cursor = req.result; if (!cursor) { resolve(null); return; } cursor.___id = ++_id_counter; cursor.done = false; var _cursorContinue = cursor.continue.bind(cursor); var _cursorContinuePrimaryKey = cursor.continuePrimaryKey; if (_cursorContinuePrimaryKey) _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor); var _cursorAdvance = cursor.advance.bind(cursor); var doThrowCursorIsNotStarted = function() { throw new Error("Cursor not started"); }; var doThrowCursorIsStopped = function() { throw new Error("Cursor not stopped"); }; cursor.trans = trans; cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted; cursor.fail = wrap(reject); cursor.next = function() { var _this = this; var gotOne = 1; return this.start(function() { return gotOne-- ? _this.continue() : _this.stop(); }).then(function() { return _this; }); }; cursor.start = function(callback) { var iterationPromise = new Promise(function(resolveIteration, rejectIteration) { resolveIteration = wrap(resolveIteration); req.onerror = eventRejectHandler(rejectIteration); cursor.fail = rejectIteration; cursor.stop = function(value) { cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped; resolveIteration(value); }; }); var guardedCallback = function() { if (req.result) { try { callback(); } catch (err) { cursor.fail(err); } } else { cursor.done = true; cursor.start = function() { throw new Error("Cursor behind last entry"); }; cursor.stop(); } }; req.onsuccess = wrap(function(ev2) { req.onsuccess = guardedCallback; guardedCallback(); }); cursor.continue = _cursorContinue; cursor.continuePrimaryKey = _cursorContinuePrimaryKey; cursor.advance = _cursorAdvance; guardedCallback(); return iterationPromise; }; resolve(cursor); }, reject); }); } function query(hasGetAll2, hasIdb3Features2) { return function(request) { return new Promise(function(resolve, reject) { var _a3; resolve = wrap(resolve); var trans = request.trans, values = request.values, limit = request.limit, query2 = request.query; var direction = (_a3 = request.direction) !== null && _a3 !== void 0 ? _a3 : "next"; var nonInfinitLimit = limit === Infinity ? void 0 : limit; var index = query2.index, range = query2.range; var store = trans.objectStore(tableName); var source = index.isPrimaryKey ? store : store.index(index.name); var idbKeyRange = makeIDBKeyRange(range); if (limit === 0) return resolve({ result: [] }); if (hasIdb3Features2) { var options = { query: idbKeyRange, count: nonInfinitLimit, direction }; var req = values ? source.getAll(options) : source.getAllKeys(options); req.onsuccess = function(event) { return resolve({ result: event.target.result }); }; req.onerror = eventRejectHandler(reject); } else if (hasGetAll2 && direction === "next") { var req = values ? source.getAll(idbKeyRange, nonInfinitLimit) : source.getAllKeys(idbKeyRange, nonInfinitLimit); req.onsuccess = function(event) { return resolve({ result: event.target.result }); }; req.onerror = eventRejectHandler(reject); } else { var count_1 = 0; var req_1 = values || !("openKeyCursor" in source) ? source.openCursor(idbKeyRange, direction) : source.openKeyCursor(idbKeyRange, direction); var result_1 = []; req_1.onsuccess = function() { var cursor = req_1.result; if (!cursor) return resolve({ result: result_1 }); result_1.push(values ? cursor.value : cursor.primaryKey); if (++count_1 === limit) return resolve({ result: result_1 }); cursor.continue(); }; req_1.onerror = eventRejectHandler(reject); } }); }; } return { name: tableName, schema: tableSchema, mutate, getMany: function(_a3) { var trans = _a3.trans, keys2 = _a3.keys; return new Promise(function(resolve, reject) { resolve = wrap(resolve); var store = trans.objectStore(tableName); var length = keys2.length; var result = new Array(length); var keyCount = 0; var callbackCount = 0; var req; var successHandler = function(event) { var req2 = event.target; if ((result[req2._pos] = req2.result) != null) ; if (++callbackCount === keyCount) resolve(result); }; var errorHandler = eventRejectHandler(reject); for (var i = 0; i < length; ++i) { var key = keys2[i]; if (key != null) { req = store.get(keys2[i]); req._pos = i; req.onsuccess = successHandler; req.onerror = errorHandler; ++keyCount; } } if (keyCount === 0) resolve(result); }); }, get: function(_a3) { var trans = _a3.trans, key = _a3.key; return new Promise(function(resolve, reject) { resolve = wrap(resolve); var store = trans.objectStore(tableName); var req = store.get(key); req.onsuccess = function(event) { return resolve(event.target.result); }; req.onerror = eventRejectHandler(reject); }); }, query: query(hasGetAll, hasIdb3Features), openCursor: openCursor2, count: function(_a3) { var query2 = _a3.query, trans = _a3.trans; var index = query2.index, range = query2.range; return new Promise(function(resolve, reject) { var store = trans.objectStore(tableName); var source = index.isPrimaryKey ? store : store.index(index.name); var idbKeyRange = makeIDBKeyRange(range); var req = idbKeyRange ? source.count(idbKeyRange) : source.count(); req.onsuccess = wrap(function(ev) { return resolve(ev.target.result); }); req.onerror = eventRejectHandler(reject); }); } }; } var _a2 = extractSchema(db2, tmpTrans), schema = _a2.schema, hasGetAll = _a2.hasGetAll, hasIdb3Features = _a2.hasIdb3Features; var tables = schema.tables.map(function(tableSchema) { return createDbCoreTable(tableSchema); }); var tableMap = {}; tables.forEach(function(table) { return tableMap[table.name] = table; }); return { stack: "dbcore", transaction: db2.transaction.bind(db2), table: function(name) { var result = tableMap[name]; if (!result) throw new Error("Table '".concat(name, "' not found")); return tableMap[name]; }, MIN_KEY: -Infinity, MAX_KEY: getMaxKey(IdbKeyRange), schema }; } function createMiddlewareStack(stackImpl, middlewares) { return middlewares.reduce(function(down, _a2) { var create = _a2.create; return __assign(__assign({}, down), create(down)); }, stackImpl); } function createMiddlewareStacks(middlewares, idbdb, _a2, tmpTrans) { var IDBKeyRange = _a2.IDBKeyRange; _a2.indexedDB; var dbcore = createMiddlewareStack(createDBCore(idbdb, IDBKeyRange, tmpTrans), middlewares.dbcore); return { dbcore }; } function generateMiddlewareStacks(db2, tmpTrans) { var idbdb = tmpTrans.db; var stacks = createMiddlewareStacks(db2._middlewares, idbdb, db2._deps, tmpTrans); db2.core = stacks.dbcore; db2.tables.forEach(function(table) { var tableName = table.name; if (db2.core.schema.tables.some(function(tbl) { return tbl.name === tableName; })) { table.core = db2.core.table(tableName); if (db2[tableName] instanceof db2.Table) { db2[tableName].core = table.core; } } }); } function setApiOnPlace(db2, objs, tableNames, dbschema) { tableNames.forEach(function(tableName) { var schema = dbschema[tableName]; objs.forEach(function(obj) { var propDesc = getPropertyDescriptor(obj, tableName); if (!propDesc || "value" in propDesc && propDesc.value === void 0) { if (obj === db2.Transaction.prototype || obj instanceof db2.Transaction) { setProp(obj, tableName, { get: function() { return this.table(tableName); }, set: function(value) { defineProperty(this, tableName, { value, writable: true, configurable: true, enumerable: true }); } }); } else { obj[tableName] = new db2.Table(tableName, schema); } } }); }); } function removeTablesApi(db2, objs) { objs.forEach(function(obj) { for (var key in obj) { if (obj[key] instanceof db2.Table) delete obj[key]; } }); } function lowerVersionFirst(a, b) { return a._cfg.version - b._cfg.version; } function runUpgraders(db2, oldVersion, idbUpgradeTrans, reject) { var globalSchema = db2._dbSchema; if (idbUpgradeTrans.objectStoreNames.contains("$meta") && !globalSchema.$meta) { globalSchema.$meta = createTableSchema("$meta", parseIndexSyntax("")[0], []); db2._storeNames.push("$meta"); } var trans = db2._createTransaction("readwrite", db2._storeNames, globalSchema); trans.create(idbUpgradeTrans); trans._completion.catch(reject); var rejectTransaction = trans._reject.bind(trans); var transless = PSD.transless || PSD; newScope(function() { PSD.trans = trans; PSD.transless = transless; if (oldVersion === 0) { keys(globalSchema).forEach(function(tableName) { createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes); }); generateMiddlewareStacks(db2, idbUpgradeTrans); DexiePromise.follow(function() { return db2.on.populate.fire(trans); }).catch(rejectTransaction); } else { generateMiddlewareStacks(db2, idbUpgradeTrans); return getExistingVersion(db2, trans, oldVersion).then(function(oldVersion2) { return updateTablesAndIndexes(db2, oldVersion2, trans, idbUpgradeTrans); }).catch(rejectTransaction); } }); } function patchCurrentVersion(db2, idbUpgradeTrans) { createMissingTables(db2._dbSchema, idbUpgradeTrans); if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains("$meta")) { idbUpgradeTrans.db.createObjectStore("$meta").add(Math.ceil(idbUpgradeTrans.db.version / 10 - 1), "version"); } var globalSchema = buildGlobalSchema(db2, db2.idbdb, idbUpgradeTrans); adjustToExistingIndexNames(db2, db2._dbSchema, idbUpgradeTrans); var diff = getSchemaDiff(globalSchema, db2._dbSchema); var _loop_1 = function(tableChange2) { if (tableChange2.change.length || tableChange2.recreate) { console.warn("Unable to patch indexes of table ".concat(tableChange2.name, " because it has changes on the type of index or primary key.")); return { value: void 0 }; } var store = idbUpgradeTrans.objectStore(tableChange2.name); tableChange2.add.forEach(function(idx) { if (debug) console.debug("Dexie upgrade patch: Creating missing index ".concat(tableChange2.name, ".").concat(idx.src)); addIndex(store, idx); }); }; for (var _i = 0, _a2 = diff.change; _i < _a2.length; _i++) { var tableChange = _a2[_i]; var state_1 = _loop_1(tableChange); if (typeof state_1 === "object") return state_1.value; } } function getExistingVersion(db2, trans, oldVersion) { if (trans.storeNames.includes("$meta")) { return trans.table("$meta").get("version").then(function(metaVersion) { return metaVersion != null ? metaVersion : oldVersion; }); } else { return DexiePromise.resolve(oldVersion); } } function updateTablesAndIndexes(db2, oldVersion, trans, idbUpgradeTrans) { var queue = []; var versions = db2._versions; var globalSchema = db2._dbSchema = buildGlobalSchema(db2, db2.idbdb, idbUpgradeTrans); var versToRun = versions.filter(function(v) { return v._cfg.version >= oldVersion; }); if (versToRun.length === 0) { return DexiePromise.resolve(); } versToRun.forEach(function(version) { queue.push(function() { var oldSchema = globalSchema; var newSchema = version._cfg.dbschema; adjustToExistingIndexNames(db2, oldSchema, idbUpgradeTrans); adjustToExistingIndexNames(db2, newSchema, idbUpgradeTrans); globalSchema = db2._dbSchema = newSchema; var diff = getSchemaDiff(oldSchema, newSchema); diff.add.forEach(function(tuple) { createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes); }); diff.change.forEach(function(change) { if (change.recreate) { throw new exceptions.Upgrade("Not yet support for changing primary key"); } else { var store_1 = idbUpgradeTrans.objectStore(change.name); change.add.forEach(function(idx) { return addIndex(store_1, idx); }); change.change.forEach(function(idx) { store_1.deleteIndex(idx.name); addIndex(store_1, idx); }); change.del.forEach(function(idxName) { return store_1.deleteIndex(idxName); }); } }); var contentUpgrade = version._cfg.contentUpgrade; if (contentUpgrade && version._cfg.version > oldVersion) { generateMiddlewareStacks(db2, idbUpgradeTrans); trans._memoizedTables = {}; var upgradeSchema_1 = shallowClone(newSchema); diff.del.forEach(function(table) { upgradeSchema_1[table] = oldSchema[table]; }); removeTablesApi(db2, [db2.Transaction.prototype]); setApiOnPlace(db2, [db2.Transaction.prototype], keys(upgradeSchema_1), upgradeSchema_1); trans.schema = upgradeSchema_1; var contentUpgradeIsAsync_1 = isAsyncFunction(contentUpgrade); if (contentUpgradeIsAsync_1) { incrementExpectedAwaits(); } var returnValue_1; var promiseFollowed = DexiePromise.follow(function() { returnValue_1 = contentUpgrade(trans); if (returnValue_1) { if (contentUpgradeIsAsync_1) { var decrementor = decrementExpectedAwaits.bind(null, null); returnValue_1.then(decrementor, decrementor); } } }); return returnValue_1 && typeof returnValue_1.then === "function" ? DexiePromise.resolve(returnValue_1) : promiseFollowed.then(function() { return returnValue_1; }); } }); queue.push(function(idbtrans) { var newSchema = version._cfg.dbschema; deleteRemovedTables(newSchema, idbtrans); removeTablesApi(db2, [db2.Transaction.prototype]); setApiOnPlace(db2, [db2.Transaction.prototype], db2._storeNames, db2._dbSchema); trans.schema = db2._dbSchema; }); queue.push(function(idbtrans) { if (db2.idbdb.objectStoreNames.contains("$meta")) { if (Math.ceil(db2.idbdb.version / 10) === version._cfg.version) { db2.idbdb.deleteObjectStore("$meta"); delete db2._dbSchema.$meta; db2._storeNames = db2._storeNames.filter(function(name) { return name !== "$meta"; }); } else { idbtrans.objectStore("$meta").put(version._cfg.version, "version"); } } }); }); function runQueue() { return queue.length ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) : DexiePromise.resolve(); } return runQueue().then(function() { createMissingTables(globalSchema, idbUpgradeTrans); }); } function getSchemaDiff(oldSchema, newSchema) { var diff = { del: [], add: [], change: [] }; var table; for (table in oldSchema) { if (!newSchema[table]) diff.del.push(table); } for (table in newSchema) { var oldDef = oldSchema[table], newDef = newSchema[table]; if (!oldDef) { diff.add.push([table, newDef]); } else { var change = { name: table, def: newDef, recreate: false, del: [], add: [], change: [] }; if ("" + (oldDef.primKey.keyPath || "") !== "" + (newDef.primKey.keyPath || "") || oldDef.primKey.auto !== newDef.primKey.auto) { change.recreate = true; diff.change.push(change); } else { var oldIndexes = oldDef.idxByName; var newIndexes = newDef.idxByName; var idxName = void 0; for (idxName in oldIndexes) { if (!newIndexes[idxName]) change.del.push(idxName); } for (idxName in newIndexes) { var oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName]; if (!oldIdx) change.add.push(newIdx); else if (oldIdx.src !== newIdx.src) change.change.push(newIdx); } if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) { diff.change.push(change); } } } } return diff; } function createTable(idbtrans, tableName, primKey, indexes) { var store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? { keyPath: primKey.keyPath, autoIncrement: primKey.auto } : { autoIncrement: primKey.auto }); indexes.forEach(function(idx) { return addIndex(store, idx); }); return store; } function createMissingTables(newSchema, idbtrans) { keys(newSchema).forEach(function(tableName) { if (!idbtrans.db.objectStoreNames.contains(tableName)) { if (debug) console.debug("Dexie: Creating missing table", tableName); createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes); } }); } function deleteRemovedTables(newSchema, idbtrans) { [].slice.call(idbtrans.db.objectStoreNames).forEach(function(storeName) { return newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName); }); } function addIndex(store, idx) { store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi }); } function buildGlobalSchema(db2, idbdb, tmpTrans) { var globalSchema = {}; var dbStoreNames = slice(idbdb.objectStoreNames, 0); dbStoreNames.forEach(function(storeName) { var store = tmpTrans.objectStore(storeName); var keyPath = store.keyPath; var primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || "", true, false, !!store.autoIncrement, keyPath && typeof keyPath !== "string", true); var indexes = []; for (var j = 0; j < store.indexNames.length; ++j) { var idbindex = store.index(store.indexNames[j]); keyPath = idbindex.keyPath; var index = createIndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== "string", false); indexes.push(index); } globalSchema[storeName] = createTableSchema(storeName, primKey, indexes); }); return globalSchema; } function readGlobalSchema(db2, idbdb, tmpTrans) { db2.verno = idbdb.version / 10; var globalSchema = db2._dbSchema = buildGlobalSchema(db2, idbdb, tmpTrans); db2._storeNames = slice(idbdb.objectStoreNames, 0); setApiOnPlace(db2, [db2._allTables], keys(globalSchema), globalSchema); } function verifyInstalledSchema(db2, tmpTrans) { var installedSchema = buildGlobalSchema(db2, db2.idbdb, tmpTrans); var diff = getSchemaDiff(installedSchema, db2._dbSchema); return !(diff.add.length || diff.change.some(function(ch) { return ch.add.length || ch.change.length; })); } function adjustToExistingIndexNames(db2, schema, idbtrans) { var storeNames = idbtrans.db.objectStoreNames; for (var i = 0; i < storeNames.length; ++i) { var storeName = storeNames[i]; var store = idbtrans.objectStore(storeName); db2._hasGetAll = "getAll" in store; for (var j = 0; j < store.indexNames.length; ++j) { var indexName = store.indexNames[j]; var keyPath = store.index(indexName).keyPath; var dexieName = typeof keyPath === "string" ? keyPath : "[" + slice(keyPath).join("+") + "]"; if (schema[storeName]) { var indexSpec = schema[storeName].idxByName[dexieName]; if (indexSpec) { indexSpec.name = indexName; delete schema[storeName].idxByName[dexieName]; schema[storeName].idxByName[indexName] = indexSpec; } } } } if (typeof navigator !== "undefined" && /Safari/.test(navigator.userAgent) && !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope && [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) { db2._hasGetAll = false; } } function parseIndexSyntax(primKeyAndIndexes) { return primKeyAndIndexes.split(",").map(function(index, indexNum) { var _a2; var typeSplit = index.split(":"); var type2 = (_a2 = typeSplit[1]) === null || _a2 === void 0 ? void 0 : _a2.trim(); index = typeSplit[0].trim(); var name = index.replace(/([&*]|\+\+)/g, ""); var keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split("+") : name; return createIndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), indexNum === 0, type2); }); } var Version = function() { function Version2() { } Version2.prototype._createTableSchema = function(name, primKey, indexes) { return createTableSchema(name, primKey, indexes); }; Version2.prototype._parseIndexSyntax = function(primKeyAndIndexes) { return parseIndexSyntax(primKeyAndIndexes); }; Version2.prototype._parseStoresSpec = function(stores, outSchema) { var _this = this; keys(stores).forEach(function(tableName) { if (stores[tableName] !== null) { var indexes = _this._parseIndexSyntax(stores[tableName]); var primKey = indexes.shift(); if (!primKey) { throw new exceptions.Schema("Invalid schema for table " + tableName + ": " + stores[tableName]); } primKey.unique = true; if (primKey.multi) throw new exceptions.Schema("Primary key cannot be multiEntry*"); indexes.forEach(function(idx) { if (idx.auto) throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)"); if (!idx.keyPath) throw new exceptions.Schema("Index must have a name and cannot be an empty string"); }); var tblSchema = _this._createTableSchema(tableName, primKey, indexes); outSchema[tableName] = tblSchema; } }); }; Version2.prototype.stores = function(stores) { var db2 = this.db; this._cfg.storesSource = this._cfg.storesSource ? extend(this._cfg.storesSource, stores) : stores; var versions = db2._versions; var storesSpec = {}; var dbschema = {}; versions.forEach(function(version) { extend(storesSpec, version._cfg.storesSource); dbschema = version._cfg.dbschema = {}; version._parseStoresSpec(storesSpec, dbschema); }); db2._dbSchema = dbschema; removeTablesApi(db2, [db2._allTables, db2, db2.Transaction.prototype]); setApiOnPlace(db2, [db2._allTables, db2, db2.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema); db2._storeNames = keys(dbschema); return this; }; Version2.prototype.upgrade = function(upgradeFunction) { this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction); return this; }; return Version2; }(); function createVersionConstructor(db2) { return makeClassConstructor(Version.prototype, function Version2(versionNumber) { this.db = db2; this._cfg = { version: versionNumber, storesSource: null, dbschema: {}, tables: {}, contentUpgrade: null }; }); } var connections = createConnectionsManager(); function createConnectionsManager() { if (typeof FinalizationRegistry !== "undefined" && typeof WeakRef !== "undefined") { var _refs_1 = /* @__PURE__ */ new Set(); var _registry_1 = new FinalizationRegistry(function(ref) { _refs_1.delete(ref); }); var toArray = function() { return Array.from(_refs_1).map(function(ref) { return ref.deref(); }).filter(function(db2) { return db2 !== void 0; }); }; var add3 = function(db2) { var ref = new WeakRef(db2._novip); _refs_1.add(ref); _registry_1.register(db2._novip, ref, ref); if (_refs_1.size > db2._options.maxConnections) { var oldestRef = _refs_1.values().next().value; _refs_1.delete(oldestRef); _registry_1.unregister(oldestRef); } }; var remove3 = function(db2) { if (!db2) return; var iterator = _refs_1.values(); var result = iterator.next(); while (!result.done) { var ref = result.value; if (ref.deref() === db2._novip) { _refs_1.delete(ref); _registry_1.unregister(ref); return; } result = iterator.next(); } }; return { toArray, add: add3, remove: remove3 }; } else { var connections_1 = []; var toArray = function() { return connections_1; }; var add3 = function(db2) { connections_1.push(db2._novip); }; var remove3 = function(db2) { if (!db2) return; var index = connections_1.indexOf(db2._novip); if (index !== -1) { connections_1.splice(index, 1); } }; return { toArray, add: add3, remove: remove3 }; } } function getDbNamesTable(indexedDB2, IDBKeyRange) { var dbNamesDB = indexedDB2["_dbNamesDB"]; if (!dbNamesDB) { dbNamesDB = indexedDB2["_dbNamesDB"] = new Dexie$1(DBNAMES_DB, { addons: [], indexedDB: indexedDB2, IDBKeyRange }); dbNamesDB.version(1).stores({ dbnames: "name" }); } return dbNamesDB.table("dbnames"); } function hasDatabasesNative(indexedDB2) { return indexedDB2 && typeof indexedDB2.databases === "function"; } function getDatabaseNames(_a2) { var indexedDB2 = _a2.indexedDB, IDBKeyRange = _a2.IDBKeyRange; return hasDatabasesNative(indexedDB2) ? Promise.resolve(indexedDB2.databases()).then(function(infos) { return infos.map(function(info) { return info.name; }).filter(function(name) { return name !== DBNAMES_DB; }); }) : getDbNamesTable(indexedDB2, IDBKeyRange).toCollection().primaryKeys(); } function _onDatabaseCreated(_a2, name) { var indexedDB2 = _a2.indexedDB, IDBKeyRange = _a2.IDBKeyRange; !hasDatabasesNative(indexedDB2) && name !== DBNAMES_DB && getDbNamesTable(indexedDB2, IDBKeyRange).put({ name }).catch(nop); } function _onDatabaseDeleted(_a2, name) { var indexedDB2 = _a2.indexedDB, IDBKeyRange = _a2.IDBKeyRange; !hasDatabasesNative(indexedDB2) && name !== DBNAMES_DB && getDbNamesTable(indexedDB2, IDBKeyRange).delete(name).catch(nop); } function vip(fn) { return newScope(function() { PSD.letThrough = true; return fn(); }); } function idbReady() { var isSafari = !navigator.userAgentData && /Safari\//.test(navigator.userAgent) && !/Chrom(e|ium)\//.test(navigator.userAgent); if (!isSafari || !indexedDB.databases) return Promise.resolve(); var intervalId; return new Promise(function(resolve) { var tryIdb = function() { return indexedDB.databases().finally(resolve); }; intervalId = setInterval(tryIdb, 100); tryIdb(); }).finally(function() { return clearInterval(intervalId); }); } var _a; function isEmptyRange(node) { return !("from" in node); } var RangeSet2 = function(fromOrTree, to) { if (this) { extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 }); } else { var rv = new RangeSet2(); if (fromOrTree && "d" in fromOrTree) { extend(rv, fromOrTree); } return rv; } }; props(RangeSet2.prototype, (_a = { add: function(rangeSet) { mergeRanges2(this, rangeSet); return this; }, addKey: function(key) { addRange(this, key, key); return this; }, addKeys: function(keys2) { var _this = this; keys2.forEach(function(key) { return addRange(_this, key, key); }); return this; }, hasKey: function(key) { var node = getRangeSetIterator(this).next(key).value; return node && cmp3(node.from, key) <= 0 && cmp3(node.to, key) >= 0; } }, _a[iteratorSymbol] = function() { return getRangeSetIterator(this); }, _a)); function addRange(target, from, to) { var diff = cmp3(from, to); if (isNaN(diff)) return; if (diff > 0) throw RangeError(); if (isEmptyRange(target)) return extend(target, { from, to, d: 1 }); var left = target.l; var right = target.r; if (cmp3(to, target.from) < 0) { left ? addRange(left, from, to) : target.l = { from, to, d: 1, l: null, r: null }; return rebalance(target); } if (cmp3(from, target.to) > 0) { right ? addRange(right, from, to) : target.r = { from, to, d: 1, l: null, r: null }; return rebalance(target); } if (cmp3(from, target.from) < 0) { target.from = from; target.l = null; target.d = right ? right.d + 1 : 1; } if (cmp3(to, target.to) > 0) { target.to = to; target.r = null; target.d = target.l ? target.l.d + 1 : 1; } var rightWasCutOff = !target.r; if (left && !target.l) { mergeRanges2(target, left); } if (right && rightWasCutOff) { mergeRanges2(target, right); } } function mergeRanges2(target, newSet) { function _addRangeSet(target2, _a2) { var from = _a2.from, to = _a2.to, l = _a2.l, r = _a2.r; addRange(target2, from, to); if (l) _addRangeSet(target2, l); if (r) _addRangeSet(target2, r); } if (!isEmptyRange(newSet)) _addRangeSet(target, newSet); } function rangesOverlap2(rangeSet1, rangeSet2) { var i1 = getRangeSetIterator(rangeSet2); var nextResult1 = i1.next(); if (nextResult1.done) return false; var a = nextResult1.value; var i2 = getRangeSetIterator(rangeSet1); var nextResult2 = i2.next(a.from); var b = nextResult2.value; while (!nextResult1.done && !nextResult2.done) { if (cmp3(b.from, a.to) <= 0 && cmp3(b.to, a.from) >= 0) return true; cmp3(a.from, b.from) < 0 ? a = (nextResult1 = i1.next(b.from)).value : b = (nextResult2 = i2.next(a.from)).value; } return false; } function getRangeSetIterator(node) { var state = isEmptyRange(node) ? null : { s: 0, n: node }; return { next: function(key) { var keyProvided = arguments.length > 0; while (state) { switch (state.s) { case 0: state.s = 1; if (keyProvided) { while (state.n.l && cmp3(key, state.n.from) < 0) state = { up: state, n: state.n.l, s: 1 }; } else { while (state.n.l) state = { up: state, n: state.n.l, s: 1 }; } case 1: state.s = 2; if (!keyProvided || cmp3(key, state.n.to) <= 0) return { value: state.n, done: false }; case 2: if (state.n.r) { state.s = 3; state = { up: state, n: state.n.r, s: 0 }; continue; } case 3: state = state.up; } } return { done: true }; } }; } function rebalance(target) { var _a2, _b; var diff = (((_a2 = target.r) === null || _a2 === void 0 ? void 0 : _a2.d) || 0) - (((_b = target.l) === null || _b === void 0 ? void 0 : _b.d) || 0); var r = diff > 1 ? "r" : diff < -1 ? "l" : ""; if (r) { var l = r === "r" ? "l" : "r"; var rootClone = __assign({}, target); var oldRootRight = target[r]; target.from = oldRootRight.from; target.to = oldRootRight.to; target[r] = oldRootRight[r]; rootClone[r] = oldRootRight[l]; target[l] = rootClone; rootClone.d = computeDepth(rootClone); } target.d = computeDepth(target); } function computeDepth(_a2) { var r = _a2.r, l = _a2.l; return (r ? l ? Math.max(r.d, l.d) : r.d : l ? l.d : 0) + 1; } function extendObservabilitySet(target, newSet) { keys(newSet).forEach(function(part) { if (target[part]) mergeRanges2(target[part], newSet[part]); else target[part] = cloneSimpleObjectTree(newSet[part]); }); return target; } function obsSetsOverlap(os1, os2) { return os1.all || os2.all || Object.keys(os1).some(function(key) { return os2[key] && rangesOverlap2(os2[key], os1[key]); }); } var cache = {}; var unsignaledParts = {}; var isTaskEnqueued = false; function signalSubscribersLazily(part, optimistic) { extendObservabilitySet(unsignaledParts, part); if (!isTaskEnqueued) { isTaskEnqueued = true; setTimeout(function() { isTaskEnqueued = false; var parts = unsignaledParts; unsignaledParts = {}; signalSubscribersNow(parts, false); }, 0); } } function signalSubscribersNow(updatedParts, deleteAffectedCacheEntries) { if (deleteAffectedCacheEntries === void 0) { deleteAffectedCacheEntries = false; } var queriesToSignal = /* @__PURE__ */ new Set(); if (updatedParts.all) { for (var _i = 0, _a2 = Object.values(cache); _i < _a2.length; _i++) { var tblCache = _a2[_i]; collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); } } else { for (var key in updatedParts) { var parts = /^idb\:\/\/(.*)\/(.*)\//.exec(key); if (parts) { var dbName = parts[1], tableName = parts[2]; var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; if (tblCache) collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); } } } queriesToSignal.forEach(function(requery) { return requery(); }); } function collectTableSubscribers(tblCache, updatedParts, outQueriesToSignal, deleteAffectedCacheEntries) { var updatedEntryLists = []; for (var _i = 0, _a2 = Object.entries(tblCache.queries.query); _i < _a2.length; _i++) { var _b = _a2[_i], indexName = _b[0], entries = _b[1]; var filteredEntries = []; for (var _c = 0, entries_1 = entries; _c < entries_1.length; _c++) { var entry = entries_1[_c]; if (obsSetsOverlap(updatedParts, entry.obsSet)) { entry.subscribers.forEach(function(requery) { return outQueriesToSignal.add(requery); }); } else if (deleteAffectedCacheEntries) { filteredEntries.push(entry); } } if (deleteAffectedCacheEntries) updatedEntryLists.push([indexName, filteredEntries]); } if (deleteAffectedCacheEntries) { for (var _d = 0, updatedEntryLists_1 = updatedEntryLists; _d < updatedEntryLists_1.length; _d++) { var _e = updatedEntryLists_1[_d], indexName = _e[0], filteredEntries = _e[1]; tblCache.queries.query[indexName] = filteredEntries; } } } function dexieOpen(db2) { var state = db2._state; var indexedDB2 = db2._deps.indexedDB; if (state.isBeingOpened || db2.idbdb) return state.dbReadyPromise.then(function() { return state.dbOpenError ? rejection(state.dbOpenError) : db2; }); state.isBeingOpened = true; state.dbOpenError = null; state.openComplete = false; var openCanceller = state.openCanceller; var nativeVerToOpen = Math.round(db2.verno * 10); var schemaPatchMode = false; function throwIfCancelled() { if (state.openCanceller !== openCanceller) throw new exceptions.DatabaseClosed("db.open() was cancelled"); } var resolveDbReady = state.dbReadyResolve, upgradeTransaction = null, wasCreated = false; var tryOpenDB = function() { return new DexiePromise(function(resolve, reject) { throwIfCancelled(); if (!indexedDB2) throw new exceptions.MissingAPI(); var dbName = db2.name; var req = state.autoSchema || !nativeVerToOpen ? indexedDB2.open(dbName) : indexedDB2.open(dbName, nativeVerToOpen); if (!req) throw new exceptions.MissingAPI(); req.onerror = eventRejectHandler(reject); req.onblocked = wrap(db2._fireOnBlocked); req.onupgradeneeded = wrap(function(e) { upgradeTransaction = req.transaction; if (state.autoSchema && !db2._options.allowEmptyDB) { req.onerror = preventDefault; upgradeTransaction.abort(); req.result.close(); var delreq = indexedDB2.deleteDatabase(dbName); delreq.onsuccess = delreq.onerror = wrap(function() { reject(new exceptions.NoSuchDatabase("Database ".concat(dbName, " doesnt exist"))); }); } else { upgradeTransaction.onerror = eventRejectHandler(reject); var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; wasCreated = oldVer < 1; db2.idbdb = req.result; if (schemaPatchMode) { patchCurrentVersion(db2, upgradeTransaction); } runUpgraders(db2, oldVer / 10, upgradeTransaction, reject); } }, reject); req.onsuccess = wrap(function() { upgradeTransaction = null; var idbdb = db2.idbdb = req.result; var objectStoreNames = slice(idbdb.objectStoreNames); if (objectStoreNames.length > 0) try { var tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), "readonly"); if (state.autoSchema) readGlobalSchema(db2, idbdb, tmpTrans); else { adjustToExistingIndexNames(db2, db2._dbSchema, tmpTrans); if (!verifyInstalledSchema(db2, tmpTrans) && !schemaPatchMode) { console.warn("Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this."); idbdb.close(); nativeVerToOpen = idbdb.version + 1; schemaPatchMode = true; return resolve(tryOpenDB()); } } generateMiddlewareStacks(db2, tmpTrans); } catch (e) { } connections.add(db2); idbdb.onversionchange = wrap(function(ev) { state.vcFired = true; db2.on("versionchange").fire(ev); }); idbdb.onclose = wrap(function() { db2.close({ disableAutoOpen: false }); }); if (wasCreated) _onDatabaseCreated(db2._deps, dbName); resolve(); }, reject); }).catch(function(err) { switch (err === null || err === void 0 ? void 0 : err.name) { case "UnknownError": if (state.PR1398_maxLoop > 0) { state.PR1398_maxLoop--; console.warn("Dexie: Workaround for Chrome UnknownError on open()"); return tryOpenDB(); } break; case "VersionError": if (nativeVerToOpen > 0) { nativeVerToOpen = 0; return tryOpenDB(); } break; } return DexiePromise.reject(err); }); }; return DexiePromise.race([ openCanceller, (typeof navigator === "undefined" ? DexiePromise.resolve() : idbReady()).then(tryOpenDB) ]).then(function() { throwIfCancelled(); state.onReadyBeingFired = []; return DexiePromise.resolve(vip(function() { return db2.on.ready.fire(db2.vip); })).then(function fireRemainders() { if (state.onReadyBeingFired.length > 0) { var remainders_1 = state.onReadyBeingFired.reduce(promisableChain, nop); state.onReadyBeingFired = []; return DexiePromise.resolve(vip(function() { return remainders_1(db2.vip); })).then(fireRemainders); } }); }).finally(function() { if (state.openCanceller === openCanceller) { state.onReadyBeingFired = null; state.isBeingOpened = false; } }).catch(function(err) { state.dbOpenError = err; try { upgradeTransaction && upgradeTransaction.abort(); } catch (_a2) { } if (openCanceller === state.openCanceller) { db2._close(); } return rejection(err); }).finally(function() { state.openComplete = true; resolveDbReady(); }).then(function() { if (wasCreated) { var everything_1 = {}; db2.tables.forEach(function(table) { table.schema.indexes.forEach(function(idx) { if (idx.name) everything_1["idb://".concat(db2.name, "/").concat(table.name, "/").concat(idx.name)] = new RangeSet2(-Infinity, [[[]]]); }); everything_1["idb://".concat(db2.name, "/").concat(table.name, "/")] = everything_1["idb://".concat(db2.name, "/").concat(table.name, "/:dels")] = new RangeSet2(-Infinity, [[[]]]); }); globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything_1); signalSubscribersNow(everything_1, true); } return db2; }); } function awaitIterator(iterator) { var callNext = function(result) { return iterator.next(result); }, doThrow = function(error) { return iterator.throw(error); }, onSuccess = step(callNext), onError = step(doThrow); function step(getNext) { return function(val) { var next = getNext(val), value = next.value; return next.done ? value : !value || typeof value.then !== "function" ? isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) : value.then(onSuccess, onError); }; } return step(callNext)(); } function extractTransactionArgs(mode, _tableArgs_, scopeFunc) { var i = arguments.length; if (i < 2) throw new exceptions.InvalidArgument("Too few arguments"); var args = new Array(i - 1); while (--i) args[i - 1] = arguments[i]; scopeFunc = args.pop(); var tables = flatten(args); return [mode, tables, scopeFunc]; } function enterTransactionScope(db2, mode, storeNames, parentTransaction, scopeFunc) { return DexiePromise.resolve().then(function() { var transless = PSD.transless || PSD; var trans = db2._createTransaction(mode, storeNames, db2._dbSchema, parentTransaction); trans.explicit = true; var zoneProps = { trans, transless }; if (parentTransaction) { trans.idbtrans = parentTransaction.idbtrans; } else { try { trans.create(); trans.idbtrans._explicit = true; db2._state.PR1398_maxLoop = 3; } catch (ex) { if (ex.name === errnames.InvalidState && db2.isOpen() && --db2._state.PR1398_maxLoop > 0) { console.warn("Dexie: Need to reopen db"); db2.close({ disableAutoOpen: false }); return db2.open().then(function() { return enterTransactionScope(db2, mode, storeNames, null, scopeFunc); }); } return rejection(ex); } } var scopeFuncIsAsync = isAsyncFunction(scopeFunc); if (scopeFuncIsAsync) { incrementExpectedAwaits(); } var returnValue; var promiseFollowed = DexiePromise.follow(function() { returnValue = scopeFunc.call(trans, trans); if (returnValue) { if (scopeFuncIsAsync) { var decrementor = decrementExpectedAwaits.bind(null, null); returnValue.then(decrementor, decrementor); } else if (typeof returnValue.next === "function" && typeof returnValue.throw === "function") { returnValue = awaitIterator(returnValue); } } }, zoneProps); return (returnValue && typeof returnValue.then === "function" ? DexiePromise.resolve(returnValue).then(function(x) { return trans.active ? x : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn")); }) : promiseFollowed.then(function() { return returnValue; })).then(function(x) { if (parentTransaction) trans._resolve(); return trans._completion.then(function() { return x; }); }).catch(function(e) { trans._reject(e); return rejection(e); }); }); } function pad2(a, value, count) { var result = isArray(a) ? a.slice() : [a]; for (var i = 0; i < count; ++i) result.push(value); return result; } function createVirtualIndexMiddleware(down) { return __assign(__assign({}, down), { table: function(tableName) { var table = down.table(tableName); var schema = table.schema; var indexLookup = /* @__PURE__ */ Object.create(null); var allVirtualIndexes = []; function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) { var keyPathAlias = getKeyPathAlias(keyPath); var indexList = indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []; var keyLength = keyPath == null ? 0 : typeof keyPath === "string" ? 1 : keyPath.length; var isVirtual = keyTail > 0; var virtualIndex = __assign(__assign({}, lowLevelIndex), { name: isVirtual ? "".concat(keyPathAlias, "(virtual-from:").concat(lowLevelIndex.name, ")") : lowLevelIndex.name, lowLevelIndex, isVirtual, keyTail, keyLength, extractKey: getKeyExtractor(keyPath), unique: !isVirtual && lowLevelIndex.unique }); indexList.push(virtualIndex); if (!virtualIndex.isPrimaryKey) { allVirtualIndexes.push(virtualIndex); } if (keyLength > 1) { var virtualKeyPath = keyLength === 2 ? keyPath[0] : keyPath.slice(0, keyLength - 1); addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex); } indexList.sort(function(a, b) { return a.keyTail - b.keyTail; }); return virtualIndex; } var primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey); indexLookup[":id"] = [primaryKey]; for (var _i = 0, _a2 = schema.indexes; _i < _a2.length; _i++) { var index = _a2[_i]; addVirtualIndexes(index.keyPath, 0, index); } function findBestIndex(keyPath) { var result2 = indexLookup[getKeyPathAlias(keyPath)]; return result2 && result2[0]; } function translateRange(range, keyTail) { return { type: range.type === 1 ? 2 : range.type, lower: pad2(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail), lowerOpen: true, upper: pad2(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail), upperOpen: true }; } function translateRequest(req) { var index2 = req.query.index; return index2.isVirtual ? __assign(__assign({}, req), { query: { index: index2.lowLevelIndex, range: translateRange(req.query.range, index2.keyTail) } }) : req; } var result = __assign(__assign({}, table), { schema: __assign(__assign({}, schema), { primaryKey, indexes: allVirtualIndexes, getIndexByKeyPath: findBestIndex }), count: function(req) { return table.count(translateRequest(req)); }, query: function(req) { return table.query(translateRequest(req)); }, openCursor: function(req) { var _a3 = req.query.index, keyTail = _a3.keyTail, isVirtual = _a3.isVirtual, keyLength = _a3.keyLength; if (!isVirtual) return table.openCursor(req); function createVirtualCursor(cursor) { function _continue(key) { key != null ? cursor.continue(pad2(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) : req.unique ? cursor.continue(cursor.key.slice(0, keyLength).concat(req.reverse ? down.MIN_KEY : down.MAX_KEY, keyTail)) : cursor.continue(); } var virtualCursor = Object.create(cursor, { continue: { value: _continue }, continuePrimaryKey: { value: function(key, primaryKey2) { cursor.continuePrimaryKey(pad2(key, down.MAX_KEY, keyTail), primaryKey2); } }, primaryKey: { get: function() { return cursor.primaryKey; } }, key: { get: function() { var key = cursor.key; return keyLength === 1 ? key[0] : key.slice(0, keyLength); } }, value: { get: function() { return cursor.value; } } }); return virtualCursor; } return table.openCursor(translateRequest(req)).then(function(cursor) { return cursor && createVirtualCursor(cursor); }); } }); return result; } }); } var virtualIndexMiddleware = { stack: "dbcore", name: "VirtualIndexMiddleware", level: 1, create: createVirtualIndexMiddleware }; function getObjectDiff(a, b, rv, prfx) { rv = rv || {}; prfx = prfx || ""; keys(a).forEach(function(prop) { if (!hasOwn(b, prop)) { rv[prfx + prop] = void 0; } else { var ap = a[prop], bp = b[prop]; if (typeof ap === "object" && typeof bp === "object" && ap && bp) { var apTypeName = toStringTag(ap); var bpTypeName = toStringTag(bp); if (apTypeName !== bpTypeName) { rv[prfx + prop] = b[prop]; } else if (apTypeName === "Object") { getObjectDiff(ap, bp, rv, prfx + prop + "."); } else if (ap !== bp) { rv[prfx + prop] = b[prop]; } } else if (ap !== bp) rv[prfx + prop] = b[prop]; } }); keys(b).forEach(function(prop) { if (!hasOwn(a, prop)) { rv[prfx + prop] = b[prop]; } }); return rv; } function getEffectiveKeys(primaryKey, req) { if (req.type === "delete") return req.keys; return req.keys || req.values.map(primaryKey.extractKey); } var hooksMiddleware = { stack: "dbcore", name: "HooksMiddleware", level: 2, create: function(downCore) { return __assign(__assign({}, downCore), { table: function(tableName) { var downTable = downCore.table(tableName); var primaryKey = downTable.schema.primaryKey; var tableMiddleware = __assign(__assign({}, downTable), { mutate: function(req) { var dxTrans = PSD.trans; var _a2 = dxTrans.table(tableName).hook, deleting = _a2.deleting, creating = _a2.creating, updating = _a2.updating; switch (req.type) { case "add": if (creating.fire === nop) break; return dxTrans._promise("readwrite", function() { return addPutOrDelete(req); }, true); case "put": if (creating.fire === nop && updating.fire === nop) break; return dxTrans._promise("readwrite", function() { return addPutOrDelete(req); }, true); case "delete": if (deleting.fire === nop) break; return dxTrans._promise("readwrite", function() { return addPutOrDelete(req); }, true); case "deleteRange": if (deleting.fire === nop) break; return dxTrans._promise("readwrite", function() { return deleteRange(req); }, true); } return downTable.mutate(req); function addPutOrDelete(req2) { var dxTrans2 = PSD.trans; var keys2 = req2.keys || getEffectiveKeys(primaryKey, req2); if (!keys2) throw new Error("Keys missing"); req2 = req2.type === "add" || req2.type === "put" ? __assign(__assign({}, req2), { keys: keys2 }) : __assign({}, req2); if (req2.type !== "delete") req2.values = __spreadArray([], req2.values, true); if (req2.keys) req2.keys = __spreadArray([], req2.keys, true); return getExistingValues(downTable, req2, keys2).then(function(existingValues) { var contexts = keys2.map(function(key, i) { var existingValue = existingValues[i]; var ctx = { onerror: null, onsuccess: null }; if (req2.type === "delete") { deleting.fire.call(ctx, key, existingValue, dxTrans2); } else if (req2.type === "add" || existingValue === void 0) { var generatedPrimaryKey = creating.fire.call(ctx, key, req2.values[i], dxTrans2); if (key == null && generatedPrimaryKey != null) { key = generatedPrimaryKey; req2.keys[i] = key; if (!primaryKey.outbound) { setByKeyPath(req2.values[i], primaryKey.keyPath, key); } } } else { var objectDiff = getObjectDiff(existingValue, req2.values[i]); var additionalChanges_1 = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans2); if (additionalChanges_1) { var requestedValue_1 = req2.values[i]; Object.keys(additionalChanges_1).forEach(function(keyPath) { if (hasOwn(requestedValue_1, keyPath)) { requestedValue_1[keyPath] = additionalChanges_1[keyPath]; } else { setByKeyPath(requestedValue_1, keyPath, additionalChanges_1[keyPath]); } }); } } return ctx; }); return downTable.mutate(req2).then(function(_a3) { var failures = _a3.failures, results = _a3.results, numFailures = _a3.numFailures, lastResult = _a3.lastResult; for (var i = 0; i < keys2.length; ++i) { var primKey = results ? results[i] : keys2[i]; var ctx = contexts[i]; if (primKey == null) { ctx.onerror && ctx.onerror(failures[i]); } else { ctx.onsuccess && ctx.onsuccess( req2.type === "put" && existingValues[i] ? req2.values[i] : primKey ); } } return { failures, results, numFailures, lastResult }; }).catch(function(error) { contexts.forEach(function(ctx) { return ctx.onerror && ctx.onerror(error); }); return Promise.reject(error); }); }); } function deleteRange(req2) { return deleteNextChunk(req2.trans, req2.range, 1e4); } function deleteNextChunk(trans, range, limit) { return downTable.query({ trans, values: false, query: { index: primaryKey, range }, limit }).then(function(_a3) { var result = _a3.result; return addPutOrDelete({ type: "delete", keys: result, trans }).then(function(res) { if (res.numFailures > 0) return Promise.reject(res.failures[0]); if (result.length < limit) { return { failures: [], numFailures: 0, lastResult: void 0 }; } else { return deleteNextChunk(trans, __assign(__assign({}, range), { lower: result[result.length - 1], lowerOpen: true }), limit); } }); }); } } }); return tableMiddleware; } }); } }; function getExistingValues(table, req, effectiveKeys) { return req.type === "add" ? Promise.resolve([]) : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: "immutable" }); } function getFromTransactionCache(keys2, cache2, clone) { try { if (!cache2) return null; if (cache2.keys.length < keys2.length) return null; var result = []; for (var i = 0, j = 0; i < cache2.keys.length && j < keys2.length; ++i) { if (cmp3(cache2.keys[i], keys2[j]) !== 0) continue; result.push(clone ? deepClone(cache2.values[i]) : cache2.values[i]); ++j; } return result.length === keys2.length ? result : null; } catch (_a2) { return null; } } var cacheExistingValuesMiddleware = { stack: "dbcore", level: -1, create: function(core) { return { table: function(tableName) { var table = core.table(tableName); return __assign(__assign({}, table), { getMany: function(req) { if (!req.cache) { return table.getMany(req); } var cachedResult = getFromTransactionCache(req.keys, req.trans["_cache"], req.cache === "clone"); if (cachedResult) { return DexiePromise.resolve(cachedResult); } return table.getMany(req).then(function(res) { req.trans["_cache"] = { keys: req.keys, values: req.cache === "clone" ? deepClone(res) : res }; return res; }); }, mutate: function(req) { if (req.type !== "add") req.trans["_cache"] = null; return table.mutate(req); } }); } }; } }; function isCachableContext(ctx, table) { return ctx.trans.mode === "readonly" && !!ctx.subscr && !ctx.trans.explicit && ctx.trans.db._options.cache !== "disabled" && !table.schema.primaryKey.outbound; } function isCachableRequest(type2, req) { switch (type2) { case "query": return req.values && !req.unique; case "get": return false; case "getMany": return false; case "count": return false; case "openCursor": return false; } } var observabilityMiddleware = { stack: "dbcore", level: 0, name: "Observability", create: function(core) { var dbName = core.schema.name; var FULL_RANGE = new RangeSet2(core.MIN_KEY, core.MAX_KEY); return __assign(__assign({}, core), { transaction: function(stores, mode, options) { if (PSD.subscr && mode !== "readonly") { throw new exceptions.ReadOnly("Readwrite transaction in liveQuery context. Querier source: ".concat(PSD.querier)); } return core.transaction(stores, mode, options); }, table: function(tableName) { var table = core.table(tableName); var schema = table.schema; var primaryKey = schema.primaryKey, indexes = schema.indexes; var extractKey2 = primaryKey.extractKey, outbound = primaryKey.outbound; var indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter(function(index) { return index.compound && index.keyPath.includes(primaryKey.keyPath); }); var tableClone = __assign(__assign({}, table), { mutate: function(req) { var _a2, _b; var trans = req.trans; var mutatedParts = req.mutatedParts || (req.mutatedParts = {}); var getRangeSet = function(indexName) { var part = "idb://".concat(dbName, "/").concat(tableName, "/").concat(indexName); return mutatedParts[part] || (mutatedParts[part] = new RangeSet2()); }; var pkRangeSet = getRangeSet(""); var delsRangeSet = getRangeSet(":dels"); var type2 = req.type; var _c = req.type === "deleteRange" ? [req.range] : req.type === "delete" ? [req.keys] : req.values.length < 50 ? [ getEffectiveKeys(primaryKey, req).filter(function(id) { return id; }), req.values ] : [], keys2 = _c[0], newObjs = _c[1]; var oldCache = req.trans["_cache"]; if (isArray(keys2)) { pkRangeSet.addKeys(keys2); var oldObjs = type2 === "delete" || keys2.length === newObjs.length ? getFromTransactionCache(keys2, oldCache) : null; if (!oldObjs) { delsRangeSet.addKeys(keys2); } if (oldObjs || newObjs) { trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs); } } else if (keys2) { var range = { from: (_a2 = keys2.lower) !== null && _a2 !== void 0 ? _a2 : core.MIN_KEY, to: (_b = keys2.upper) !== null && _b !== void 0 ? _b : core.MAX_KEY }; delsRangeSet.add(range); pkRangeSet.add(range); } else { pkRangeSet.add(FULL_RANGE); delsRangeSet.add(FULL_RANGE); schema.indexes.forEach(function(idx) { return getRangeSet(idx.name).add(FULL_RANGE); }); } return table.mutate(req).then(function(res) { if (keys2 && (req.type === "add" || req.type === "put")) { pkRangeSet.addKeys(res.results); if (indexesWithAutoIncPK) { indexesWithAutoIncPK.forEach(function(idx) { var idxVals = req.values.map(function(v) { return idx.extractKey(v); }); var pkPos = idx.keyPath.findIndex(function(prop) { return prop === primaryKey.keyPath; }); for (var i = 0, len = res.results.length; i < len; ++i) { idxVals[i][pkPos] = res.results[i]; } getRangeSet(idx.name).addKeys(idxVals); }); } } trans.mutatedParts = extendObservabilitySet(trans.mutatedParts || {}, mutatedParts); return res; }); } }); var getRange = function(_a2) { var _b, _c; var _d = _a2.query, index = _d.index, range = _d.range; return [ index, new RangeSet2((_b = range.lower) !== null && _b !== void 0 ? _b : core.MIN_KEY, (_c = range.upper) !== null && _c !== void 0 ? _c : core.MAX_KEY) ]; }; var readSubscribers = { get: function(req) { return [primaryKey, new RangeSet2(req.key)]; }, getMany: function(req) { return [primaryKey, new RangeSet2().addKeys(req.keys)]; }, count: getRange, query: getRange, openCursor: getRange }; keys(readSubscribers).forEach(function(method) { tableClone[method] = function(req) { var subscr = PSD.subscr; var isLiveQuery = !!subscr; var cachable = isCachableContext(PSD, table) && isCachableRequest(method, req); var obsSet = cachable ? req.obsSet = {} : subscr; if (isLiveQuery) { var getRangeSet = function(indexName) { var part = "idb://".concat(dbName, "/").concat(tableName, "/").concat(indexName); return obsSet[part] || (obsSet[part] = new RangeSet2()); }; var pkRangeSet_1 = getRangeSet(""); var delsRangeSet_1 = getRangeSet(":dels"); var _a2 = readSubscribers[method](req), queriedIndex = _a2[0], queriedRanges = _a2[1]; if (method === "query" && queriedIndex.isPrimaryKey && !req.values) { delsRangeSet_1.add(queriedRanges); } else { getRangeSet(queriedIndex.name || "").add(queriedRanges); } if (!queriedIndex.isPrimaryKey) { if (method === "count") { delsRangeSet_1.add(FULL_RANGE); } else { var keysPromise_1 = method === "query" && outbound && req.values && table.query(__assign(__assign({}, req), { values: false })); return table[method].apply(this, arguments).then(function(res) { if (method === "query") { if (outbound && req.values) { return keysPromise_1.then(function(_a3) { var resultingKeys = _a3.result; pkRangeSet_1.addKeys(resultingKeys); return res; }); } var pKeys = req.values ? res.result.map(extractKey2) : res.result; if (req.values) { pkRangeSet_1.addKeys(pKeys); } else { delsRangeSet_1.addKeys(pKeys); } } else if (method === "openCursor") { var cursor_1 = res; var wantValues_1 = req.values; return cursor_1 && Object.create(cursor_1, { key: { get: function() { delsRangeSet_1.addKey(cursor_1.primaryKey); return cursor_1.key; } }, primaryKey: { get: function() { var pkey = cursor_1.primaryKey; delsRangeSet_1.addKey(pkey); return pkey; } }, value: { get: function() { wantValues_1 && pkRangeSet_1.addKey(cursor_1.primaryKey); return cursor_1.value; } } }); } return res; }); } } } return table[method].apply(this, arguments); }; }); return tableClone; } }); } }; function trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs) { function addAffectedIndex(ix) { var rangeSet = getRangeSet(ix.name || ""); function extractKey2(obj) { return obj != null ? ix.extractKey(obj) : null; } var addKeyOrKeys = function(key) { return ix.multiEntry && isArray(key) ? key.forEach(function(key2) { return rangeSet.addKey(key2); }) : rangeSet.addKey(key); }; (oldObjs || newObjs).forEach(function(_, i) { var oldKey = oldObjs && extractKey2(oldObjs[i]); var newKey = newObjs && extractKey2(newObjs[i]); if (cmp3(oldKey, newKey) !== 0) { if (oldKey != null) addKeyOrKeys(oldKey); if (newKey != null) addKeyOrKeys(newKey); } }); } schema.indexes.forEach(addAffectedIndex); } function adjustOptimisticFromFailures(tblCache, req, res) { if (res.numFailures === 0) return req; if (req.type === "deleteRange") { return null; } var numBulkOps = req.keys ? req.keys.length : "values" in req && req.values ? req.values.length : 1; if (res.numFailures === numBulkOps) { return null; } var clone = __assign({}, req); if (isArray(clone.keys)) { clone.keys = clone.keys.filter(function(_, i) { return !(i in res.failures); }); } if ("values" in clone && isArray(clone.values)) { clone.values = clone.values.filter(function(_, i) { return !(i in res.failures); }); } return clone; } function isAboveLower(key, range) { return range.lower === void 0 ? true : range.lowerOpen ? cmp3(key, range.lower) > 0 : cmp3(key, range.lower) >= 0; } function isBelowUpper(key, range) { return range.upper === void 0 ? true : range.upperOpen ? cmp3(key, range.upper) < 0 : cmp3(key, range.upper) <= 0; } function isWithinRange(key, range) { return isAboveLower(key, range) && isBelowUpper(key, range); } function applyOptimisticOps(result, req, ops, table, cacheEntry, immutable) { if (!ops || ops.length === 0) return result; var index = req.query.index; var multiEntry = index.multiEntry; var queryRange = req.query.range; var primaryKey = table.schema.primaryKey; var extractPrimKey = primaryKey.extractKey; var extractIndex = index.extractKey; var extractLowLevelIndex = (index.lowLevelIndex || index).extractKey; var finalResult = ops.reduce(function(result2, op) { var modifedResult = result2; var includedValues = []; if (op.type === "add" || op.type === "put") { var includedPKs = new RangeSet2(); for (var i = op.values.length - 1; i >= 0; --i) { var value = op.values[i]; var pk = extractPrimKey(value); if (includedPKs.hasKey(pk)) continue; var key = extractIndex(value); if (multiEntry && isArray(key) ? key.some(function(k) { return isWithinRange(k, queryRange); }) : isWithinRange(key, queryRange)) { includedPKs.addKey(pk); includedValues.push(value); } } } switch (op.type) { case "add": { var existingKeys_1 = new RangeSet2().addKeys(req.values ? result2.map(function(v) { return extractPrimKey(v); }) : result2); modifedResult = result2.concat(req.values ? includedValues.filter(function(v) { var key2 = extractPrimKey(v); if (existingKeys_1.hasKey(key2)) return false; existingKeys_1.addKey(key2); return true; }) : includedValues.map(function(v) { return extractPrimKey(v); }).filter(function(k) { if (existingKeys_1.hasKey(k)) return false; existingKeys_1.addKey(k); return true; })); break; } case "put": { var keySet_1 = new RangeSet2().addKeys(op.values.map(function(v) { return extractPrimKey(v); })); modifedResult = result2.filter( function(item) { return !keySet_1.hasKey(req.values ? extractPrimKey(item) : item); } ).concat( req.values ? includedValues : includedValues.map(function(v) { return extractPrimKey(v); }) ); break; } case "delete": var keysToDelete_1 = new RangeSet2().addKeys(op.keys); modifedResult = result2.filter(function(item) { return !keysToDelete_1.hasKey(req.values ? extractPrimKey(item) : item); }); break; case "deleteRange": var range_1 = op.range; modifedResult = result2.filter(function(item) { return !isWithinRange(extractPrimKey(item), range_1); }); break; } return modifedResult; }, result); if (finalResult === result) return result; var sorter = function(a, b) { return cmp3(extractLowLevelIndex(a), extractLowLevelIndex(b)) || cmp3(extractPrimKey(a), extractPrimKey(b)); }; finalResult.sort(req.direction === "prev" || req.direction === "prevunique" ? function(a, b) { return sorter(b, a); } : sorter); if (req.limit && req.limit < Infinity) { if (finalResult.length > req.limit) { finalResult.length = req.limit; } else if (result.length === req.limit && finalResult.length < req.limit) { cacheEntry.dirty = true; } } return immutable ? Object.freeze(finalResult) : finalResult; } function areRangesEqual(r1, r2) { return cmp3(r1.lower, r2.lower) === 0 && cmp3(r1.upper, r2.upper) === 0 && !!r1.lowerOpen === !!r2.lowerOpen && !!r1.upperOpen === !!r2.upperOpen; } function compareLowers(lower1, lower2, lowerOpen1, lowerOpen2) { if (lower1 === void 0) return lower2 !== void 0 ? -1 : 0; if (lower2 === void 0) return 1; var c = cmp3(lower1, lower2); if (c === 0) { if (lowerOpen1 && lowerOpen2) return 0; if (lowerOpen1) return 1; if (lowerOpen2) return -1; } return c; } function compareUppers(upper1, upper2, upperOpen1, upperOpen2) { if (upper1 === void 0) return upper2 !== void 0 ? 1 : 0; if (upper2 === void 0) return -1; var c = cmp3(upper1, upper2); if (c === 0) { if (upperOpen1 && upperOpen2) return 0; if (upperOpen1) return -1; if (upperOpen2) return 1; } return c; } function isSuperRange(r1, r2) { return compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 && compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0; } function findCompatibleQuery(dbName, tableName, type2, req) { var _a2; var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; if (!tblCache) return []; var queries = tblCache.queries[type2]; if (!queries) return [null, false, tblCache, null]; var indexName = req.query ? req.query.index.name : null; var entries = queries[indexName || ""]; if (!entries) return [null, false, tblCache, null]; switch (type2) { case "query": var reqDirection_1 = (_a2 = req.direction) !== null && _a2 !== void 0 ? _a2 : "next"; var equalEntry = entries.find(function(entry) { var _a3; return entry.req.limit === req.limit && entry.req.values === req.values && ((_a3 = entry.req.direction) !== null && _a3 !== void 0 ? _a3 : "next") === reqDirection_1 && areRangesEqual(entry.req.query.range, req.query.range); }); if (equalEntry) return [ equalEntry, true, tblCache, entries ]; var superEntry = entries.find(function(entry) { var _a3; var limit = "limit" in entry.req ? entry.req.limit : Infinity; return limit >= req.limit && ((_a3 = entry.req.direction) !== null && _a3 !== void 0 ? _a3 : "next") === reqDirection_1 && (req.values ? entry.req.values : true) && isSuperRange(entry.req.query.range, req.query.range); }); return [superEntry, false, tblCache, entries]; case "count": var countQuery = entries.find(function(entry) { return areRangesEqual(entry.req.query.range, req.query.range); }); return [countQuery, !!countQuery, tblCache, entries]; } } function subscribeToCacheEntry(cacheEntry, container, requery, signal) { cacheEntry.subscribers.add(requery); signal.addEventListener("abort", function() { cacheEntry.subscribers.delete(requery); if (cacheEntry.subscribers.size === 0) { enqueForDeletion(cacheEntry, container); } }); } function enqueForDeletion(cacheEntry, container) { setTimeout(function() { if (cacheEntry.subscribers.size === 0) { delArrayItem(container, cacheEntry); } }, 3e3); } var cacheMiddleware = { stack: "dbcore", level: 0, name: "Cache", create: function(core) { var dbName = core.schema.name; var coreMW = __assign(__assign({}, core), { transaction: function(stores, mode, options) { var idbtrans = core.transaction(stores, mode, options); if (mode === "readwrite") { var ac_1 = new AbortController(); var signal = ac_1.signal; var endTransaction = function(wasCommitted) { return function() { ac_1.abort(); if (mode === "readwrite") { var affectedSubscribers_1 = /* @__PURE__ */ new Set(); for (var _i = 0, stores_1 = stores; _i < stores_1.length; _i++) { var storeName = stores_1[_i]; var tblCache = cache["idb://".concat(dbName, "/").concat(storeName)]; if (tblCache) { var table = core.table(storeName); var ops = tblCache.optimisticOps.filter(function(op) { return op.trans === idbtrans; }); if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) { for (var _a2 = 0, _b = Object.values(tblCache.queries.query); _a2 < _b.length; _a2++) { var entries = _b[_a2]; for (var _c = 0, _d = entries.slice(); _c < _d.length; _c++) { var entry = _d[_c]; if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) { delArrayItem(entries, entry); entry.subscribers.forEach(function(requery) { return affectedSubscribers_1.add(requery); }); } } } } else if (ops.length > 0) { tblCache.optimisticOps = tblCache.optimisticOps.filter(function(op) { return op.trans !== idbtrans; }); for (var _e = 0, _f = Object.values(tblCache.queries.query); _e < _f.length; _e++) { var entries = _f[_e]; for (var _g = 0, _h = entries.slice(); _g < _h.length; _g++) { var entry = _h[_g]; if (entry.res != null && idbtrans.mutatedParts) { if (wasCommitted && !entry.dirty) { var freezeResults = Object.isFrozen(entry.res); var modRes = applyOptimisticOps(entry.res, entry.req, ops, table, entry, freezeResults); if (entry.dirty) { delArrayItem(entries, entry); entry.subscribers.forEach(function(requery) { return affectedSubscribers_1.add(requery); }); } else if (modRes !== entry.res) { entry.res = modRes; entry.promise = DexiePromise.resolve({ result: modRes }); } } else { if (entry.dirty) { delArrayItem(entries, entry); } entry.subscribers.forEach(function(requery) { return affectedSubscribers_1.add(requery); }); } } } } } } } affectedSubscribers_1.forEach(function(requery) { return requery(); }); } }; }; idbtrans.addEventListener("abort", endTransaction(false), { signal }); idbtrans.addEventListener("error", endTransaction(false), { signal }); idbtrans.addEventListener("complete", endTransaction(true), { signal }); } return idbtrans; }, table: function(tableName) { var downTable = core.table(tableName); var primKey = downTable.schema.primaryKey; var tableMW = __assign(__assign({}, downTable), { mutate: function(req) { var trans = PSD.trans; if (primKey.outbound || trans.db._options.cache === "disabled" || trans.explicit || trans.idbtrans.mode !== "readwrite") { return downTable.mutate(req); } var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; if (!tblCache) return downTable.mutate(req); var promise = downTable.mutate(req); if ((req.type === "add" || req.type === "put") && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(function(key) { return key == null; }))) { promise.then(function(res) { var reqWithResolvedKeys = __assign(__assign({}, req), { values: req.values.map(function(value, i) { var _a2; if (res.failures[i]) return value; var valueWithKey = ((_a2 = primKey.keyPath) === null || _a2 === void 0 ? void 0 : _a2.includes(".")) ? deepClone(value) : __assign({}, value); setByKeyPath(valueWithKey, primKey.keyPath, res.results[i]); return valueWithKey; }) }); var adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res); tblCache.optimisticOps.push(adjustedReq); queueMicrotask(function() { return req.mutatedParts && signalSubscribersLazily(req.mutatedParts); }); }); } else { tblCache.optimisticOps.push(req); req.mutatedParts && signalSubscribersLazily(req.mutatedParts); promise.then(function(res) { if (res.numFailures > 0) { delArrayItem(tblCache.optimisticOps, req); var adjustedReq = adjustOptimisticFromFailures(tblCache, req, res); if (adjustedReq) { tblCache.optimisticOps.push(adjustedReq); } req.mutatedParts && signalSubscribersLazily(req.mutatedParts); } }); promise.catch(function() { delArrayItem(tblCache.optimisticOps, req); req.mutatedParts && signalSubscribersLazily(req.mutatedParts); }); } return promise; }, query: function(req) { var _a2; if (!isCachableContext(PSD, downTable) || !isCachableRequest("query", req)) return downTable.query(req); var freezeResults = ((_a2 = PSD.trans) === null || _a2 === void 0 ? void 0 : _a2.db._options.cache) === "immutable"; var _b = PSD, requery = _b.requery, signal = _b.signal; var _c = findCompatibleQuery(dbName, tableName, "query", req), cacheEntry = _c[0], exactMatch = _c[1], tblCache = _c[2], container = _c[3]; if (cacheEntry && exactMatch) { cacheEntry.obsSet = req.obsSet; } else { var promise = downTable.query(req).then(function(res) { var result = res.result; if (cacheEntry) cacheEntry.res = result; if (freezeResults) { for (var i = 0, l = result.length; i < l; ++i) { Object.freeze(result[i]); } Object.freeze(result); } return res; }).catch(function(error) { if (container && cacheEntry) delArrayItem(container, cacheEntry); return Promise.reject(error); }); cacheEntry = { obsSet: req.obsSet, promise, subscribers: /* @__PURE__ */ new Set(), type: "query", req, dirty: false }; if (container) { container.push(cacheEntry); } else { container = [cacheEntry]; if (!tblCache) { tblCache = cache["idb://".concat(dbName, "/").concat(tableName)] = { queries: { query: {}, count: {} }, objs: /* @__PURE__ */ new Map(), optimisticOps: [], unsignaledParts: {} }; } tblCache.queries.query[req.query.index.name || ""] = container; } } subscribeToCacheEntry(cacheEntry, container, requery, signal); return cacheEntry.promise.then(function(res) { var result = applyOptimisticOps(res.result, req, tblCache === null || tblCache === void 0 ? void 0 : tblCache.optimisticOps, downTable, cacheEntry, freezeResults); return { result: freezeResults ? result : deepClone(result) }; }); } }); return tableMW; } }); return coreMW; } }; function vipify(target, vipDb) { return new Proxy(target, { get: function(target2, prop, receiver) { if (prop === "db") return vipDb; return Reflect.get(target2, prop, receiver); } }); } var Dexie$1 = function() { function Dexie4(name, options) { var _this = this; this._middlewares = {}; this.verno = 0; var deps = Dexie4.dependencies; this._options = options = __assign({ addons: Dexie4.addons, autoOpen: true, indexedDB: deps.indexedDB, IDBKeyRange: deps.IDBKeyRange, cache: "cloned", maxConnections: DEFAULT_MAX_CONNECTIONS }, options); this._deps = { indexedDB: options.indexedDB, IDBKeyRange: options.IDBKeyRange }; var addons = options.addons; this._dbSchema = {}; this._versions = []; this._storeNames = []; this._allTables = {}; this.idbdb = null; this._novip = this; var state = { dbOpenError: null, isBeingOpened: false, onReadyBeingFired: null, openComplete: false, dbReadyResolve: nop, dbReadyPromise: null, cancelOpen: nop, openCanceller: null, autoSchema: true, PR1398_maxLoop: 3, autoOpen: options.autoOpen }; state.dbReadyPromise = new DexiePromise(function(resolve) { state.dbReadyResolve = resolve; }); state.openCanceller = new DexiePromise(function(_, reject) { state.cancelOpen = reject; }); this._state = state; this.name = name; this.on = Events(this, "populate", "blocked", "versionchange", "close", { ready: [promisableChain, nop] }); this.once = function(event, callback) { var fn = function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } _this.on(event).unsubscribe(fn); callback.apply(_this, args); }; return _this.on(event, fn); }; this.on.ready.subscribe = override(this.on.ready.subscribe, function(subscribe) { return function(subscriber, bSticky) { Dexie4.vip(function() { var state2 = _this._state; if (state2.openComplete) { if (!state2.dbOpenError) DexiePromise.resolve().then(subscriber); if (bSticky) subscribe(subscriber); } else if (state2.onReadyBeingFired) { state2.onReadyBeingFired.push(subscriber); if (bSticky) subscribe(subscriber); } else { subscribe(subscriber); var db_1 = _this; if (!bSticky) subscribe(function unsubscribe() { db_1.on.ready.unsubscribe(subscriber); db_1.on.ready.unsubscribe(unsubscribe); }); } }); }; }); this.Collection = createCollectionConstructor(this); this.Table = createTableConstructor(this); this.Transaction = createTransactionConstructor(this); this.Version = createVersionConstructor(this); this.WhereClause = createWhereClauseConstructor(this); this.on("versionchange", function(ev) { if (ev.newVersion > 0) console.warn("Another connection wants to upgrade database '".concat(_this.name, "'. Closing db now to resume the upgrade.")); else console.warn("Another connection wants to delete database '".concat(_this.name, "'. Closing db now to resume the delete request.")); _this.close({ disableAutoOpen: false }); }); this.on("blocked", function(ev) { if (!ev.newVersion || ev.newVersion < ev.oldVersion) console.warn("Dexie.delete('".concat(_this.name, "') was blocked")); else console.warn("Upgrade '".concat(_this.name, "' blocked by other connection holding version ").concat(ev.oldVersion / 10)); }); this._maxKey = getMaxKey(options.IDBKeyRange); this._createTransaction = function(mode, storeNames, dbschema, parentTransaction) { return new _this.Transaction(mode, storeNames, dbschema, _this._options.chromeTransactionDurability, parentTransaction); }; this._fireOnBlocked = function(ev) { _this.on("blocked").fire(ev); connections.toArray().filter(function(c) { return c.name === _this.name && c !== _this && !c._state.vcFired; }).map(function(c) { return c.on("versionchange").fire(ev); }); }; this.use(cacheExistingValuesMiddleware); this.use(cacheMiddleware); this.use(observabilityMiddleware); this.use(virtualIndexMiddleware); this.use(hooksMiddleware); var vipDB = new Proxy(this, { get: function(_, prop, receiver) { if (prop === "_vip") return true; if (prop === "table") return function(tableName) { return vipify(_this.table(tableName), vipDB); }; var rv = Reflect.get(_, prop, receiver); if (rv instanceof Table) return vipify(rv, vipDB); if (prop === "tables") return rv.map(function(t) { return vipify(t, vipDB); }); if (prop === "_createTransaction") return function() { var tx = rv.apply(this, arguments); return vipify(tx, vipDB); }; return rv; } }); this.vip = vipDB; addons.forEach(function(addon) { return addon(_this); }); } Dexie4.prototype.version = function(versionNumber) { if (isNaN(versionNumber) || versionNumber < 0.1) throw new exceptions.Type("Given version is not a positive number"); versionNumber = Math.round(versionNumber * 10) / 10; if (this.idbdb || this._state.isBeingOpened) throw new exceptions.Schema("Cannot add version when database is open"); this.verno = Math.max(this.verno, versionNumber); var versions = this._versions; var versionInstance = versions.filter(function(v) { return v._cfg.version === versionNumber; })[0]; if (versionInstance) return versionInstance; versionInstance = new this.Version(versionNumber); versions.push(versionInstance); versions.sort(lowerVersionFirst); versionInstance.stores({}); this._state.autoSchema = false; return versionInstance; }; Dexie4.prototype._whenReady = function(fn) { var _this = this; return this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip) ? fn() : new DexiePromise(function(resolve, reject) { if (_this._state.openComplete) { return reject(new exceptions.DatabaseClosed(_this._state.dbOpenError)); } if (!_this._state.isBeingOpened) { if (!_this._state.autoOpen) { reject(new exceptions.DatabaseClosed()); return; } _this.open().catch(nop); } _this._state.dbReadyPromise.then(resolve, reject); }).then(fn); }; Dexie4.prototype.use = function(_a2) { var stack = _a2.stack, create = _a2.create, level = _a2.level, name = _a2.name; if (name) this.unuse({ stack, name }); var middlewares = this._middlewares[stack] || (this._middlewares[stack] = []); middlewares.push({ stack, create, level: level == null ? 10 : level, name }); middlewares.sort(function(a, b) { return a.level - b.level; }); return this; }; Dexie4.prototype.unuse = function(_a2) { var stack = _a2.stack, name = _a2.name, create = _a2.create; if (stack && this._middlewares[stack]) { this._middlewares[stack] = this._middlewares[stack].filter(function(mw) { return create ? mw.create !== create : name ? mw.name !== name : false; }); } return this; }; Dexie4.prototype.open = function() { var _this = this; return usePSD( globalPSD, function() { return dexieOpen(_this); } ); }; Dexie4.prototype._close = function() { this.on.close.fire(new CustomEvent("close")); var state = this._state; connections.remove(this); if (this.idbdb) { try { this.idbdb.close(); } catch (e) { } this.idbdb = null; } if (!state.isBeingOpened) { state.dbReadyPromise = new DexiePromise(function(resolve) { state.dbReadyResolve = resolve; }); state.openCanceller = new DexiePromise(function(_, reject) { state.cancelOpen = reject; }); } }; Dexie4.prototype.close = function(_a2) { var _b = _a2 === void 0 ? { disableAutoOpen: true } : _a2, disableAutoOpen = _b.disableAutoOpen; var state = this._state; if (disableAutoOpen) { if (state.isBeingOpened) { state.cancelOpen(new exceptions.DatabaseClosed()); } this._close(); state.autoOpen = false; state.dbOpenError = new exceptions.DatabaseClosed(); } else { this._close(); state.autoOpen = this._options.autoOpen || state.isBeingOpened; state.openComplete = false; state.dbOpenError = null; } }; Dexie4.prototype.delete = function(closeOptions) { var _this = this; if (closeOptions === void 0) { closeOptions = { disableAutoOpen: true }; } var hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== "object"; var state = this._state; return new DexiePromise(function(resolve, reject) { var doDelete = function() { _this.close(closeOptions); var req = _this._deps.indexedDB.deleteDatabase(_this.name); req.onsuccess = wrap(function() { _onDatabaseDeleted(_this._deps, _this.name); resolve(); }); req.onerror = eventRejectHandler(reject); req.onblocked = _this._fireOnBlocked; }; if (hasInvalidArguments) throw new exceptions.InvalidArgument("Invalid closeOptions argument to db.delete()"); if (state.isBeingOpened) { state.dbReadyPromise.then(doDelete); } else { doDelete(); } }); }; Dexie4.prototype.backendDB = function() { return this.idbdb; }; Dexie4.prototype.isOpen = function() { return this.idbdb !== null; }; Dexie4.prototype.hasBeenClosed = function() { var dbOpenError = this._state.dbOpenError; return dbOpenError && dbOpenError.name === "DatabaseClosed"; }; Dexie4.prototype.hasFailed = function() { return this._state.dbOpenError !== null; }; Dexie4.prototype.dynamicallyOpened = function() { return this._state.autoSchema; }; Object.defineProperty(Dexie4.prototype, "tables", { get: function() { var _this = this; return keys(this._allTables).map(function(name) { return _this._allTables[name]; }); }, enumerable: false, configurable: true }); Dexie4.prototype.transaction = function() { var args = extractTransactionArgs.apply(this, arguments); return this._transaction.apply(this, args); }; Dexie4.prototype._transaction = function(mode, tables, scopeFunc) { var _this = this; var parentTransaction = PSD.trans; if (!parentTransaction || parentTransaction.db !== this || mode.indexOf("!") !== -1) parentTransaction = null; var onlyIfCompatible = mode.indexOf("?") !== -1; mode = mode.replace("!", "").replace("?", ""); var idbMode, storeNames; try { storeNames = tables.map(function(table) { var storeName = table instanceof _this.Table ? table.name : table; if (typeof storeName !== "string") throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed"); return storeName; }); if (mode == "r" || mode === READONLY) idbMode = READONLY; else if (mode == "rw" || mode == READWRITE) idbMode = READWRITE; else throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode); if (parentTransaction) { if (parentTransaction.mode === READONLY && idbMode === READWRITE) { if (onlyIfCompatible) { parentTransaction = null; } else throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY"); } if (parentTransaction) { storeNames.forEach(function(storeName) { if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) { if (onlyIfCompatible) { parentTransaction = null; } else throw new exceptions.SubTransaction("Table " + storeName + " not included in parent transaction."); } }); } if (onlyIfCompatible && parentTransaction && !parentTransaction.active) { parentTransaction = null; } } } catch (e) { return parentTransaction ? parentTransaction._promise(null, function(_, reject) { reject(e); }) : rejection(e); } var enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc); return parentTransaction ? parentTransaction._promise(idbMode, enterTransaction, "lock") : PSD.trans ? usePSD(PSD.transless, function() { return _this._whenReady(enterTransaction); }) : this._whenReady(enterTransaction); }; Dexie4.prototype.table = function(tableName) { if (!hasOwn(this._allTables, tableName)) { throw new exceptions.InvalidTable("Table ".concat(tableName, " does not exist")); } return this._allTables[tableName]; }; return Dexie4; }(); var symbolObservable = typeof Symbol !== "undefined" && "observable" in Symbol ? Symbol.observable : "@@observable"; var Observable = function() { function Observable2(subscribe) { this._subscribe = subscribe; } Observable2.prototype.subscribe = function(x, error, complete) { return this._subscribe(!x || typeof x === "function" ? { next: x, error, complete } : x); }; Observable2.prototype[symbolObservable] = function() { return this; }; return Observable2; }(); var domDeps; try { domDeps = { indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB, IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange }; } catch (e) { domDeps = { indexedDB: null, IDBKeyRange: null }; } function liveQuery2(querier) { var hasValue = false; var currentValue; var observable = new Observable(function(observer) { var scopeFuncIsAsync = isAsyncFunction(querier); function execute(ctx) { var wasRootExec = beginMicroTickScope(); try { if (scopeFuncIsAsync) { incrementExpectedAwaits(); } var rv = newScope(querier, ctx); if (scopeFuncIsAsync) { rv = rv.finally(decrementExpectedAwaits); } return rv; } finally { wasRootExec && endMicroTickScope(); } } var closed = false; var abortController; var accumMuts = {}; var currentObs = {}; var subscription = { get closed() { return closed; }, unsubscribe: function() { if (closed) return; closed = true; if (abortController) abortController.abort(); if (startedListening) globalEvents.storagemutated.unsubscribe(mutationListener); } }; observer.start && observer.start(subscription); var startedListening = false; var doQuery = function() { return execInGlobalContext(_doQuery); }; function shouldNotify() { return obsSetsOverlap(currentObs, accumMuts); } var mutationListener = function(parts) { extendObservabilitySet(accumMuts, parts); if (shouldNotify()) { doQuery(); } }; var _doQuery = function() { if (closed || !domDeps.indexedDB) { return; } accumMuts = {}; var subscr = {}; if (abortController) abortController.abort(); abortController = new AbortController(); var ctx = { subscr, signal: abortController.signal, requery: doQuery, querier, trans: null }; var ret = execute(ctx); if (!startedListening) { globalEvents.storagemutated.subscribe(mutationListener); startedListening = true; } Promise.resolve(ret).then(function(result) { hasValue = true; currentValue = result; if (closed || ctx.signal.aborted) { return; } if (shouldNotify()) { doQuery(); } else { currentObs = subscr; if (shouldNotify()) { doQuery(); } else { accumMuts = {}; execInGlobalContext(function() { return !closed && observer.next && observer.next(result); }); } } }, function(err) { hasValue = false; if (!["DatabaseClosedError", "AbortError"].includes(err === null || err === void 0 ? void 0 : err.name)) { if (!closed) execInGlobalContext(function() { if (closed) return; observer.error && observer.error(err); }); } }); }; setTimeout(doQuery, 0); return subscription; }); observable.hasValue = function() { return hasValue; }; observable.getValue = function() { return currentValue; }; return observable; } var Dexie3 = Dexie$1; props(Dexie3, __assign(__assign({}, fullNameExceptions), { delete: function(databaseName) { var db2 = new Dexie3(databaseName, { addons: [] }); return db2.delete(); }, exists: function(name) { return new Dexie3(name, { addons: [] }).open().then(function(db2) { db2.close(); return true; }).catch("NoSuchDatabaseError", function() { return false; }); }, getDatabaseNames: function(cb) { try { return getDatabaseNames(Dexie3.dependencies).then(cb); } catch (_a2) { return rejection(new exceptions.MissingAPI()); } }, defineClass: function() { function Class(content) { extend(this, content); } return Class; }, ignoreTransaction: function(scopeFunc) { return PSD.trans ? usePSD(PSD.transless || globalPSD, scopeFunc) : scopeFunc(); }, vip, async: function(generatorFn) { return function() { try { var rv = awaitIterator(generatorFn.apply(this, arguments)); if (!rv || typeof rv.then !== "function") return DexiePromise.resolve(rv); return rv; } catch (e) { return rejection(e); } }; }, spawn: function(generatorFn, args, thiz) { try { var rv = awaitIterator(generatorFn.apply(thiz, args || [])); if (!rv || typeof rv.then !== "function") return DexiePromise.resolve(rv); return rv; } catch (e) { return rejection(e); } }, currentTransaction: { get: function() { return PSD.trans || null; } }, waitFor: function(promiseOrFunction, optionalTimeout) { var promise = DexiePromise.resolve(typeof promiseOrFunction === "function" ? Dexie3.ignoreTransaction(promiseOrFunction) : promiseOrFunction).timeout(optionalTimeout || 6e4); return PSD.trans ? PSD.trans.waitFor(promise) : promise; }, Promise: DexiePromise, debug: { get: function() { return debug; }, set: function(value) { setDebug(value); } }, derive, extend, props, override, Events, on: globalEvents, liveQuery: liveQuery2, extendObservabilitySet, getByKeyPath, setByKeyPath, delByKeyPath, shallowClone, deepClone, getObjectDiff, cmp: cmp3, asap: asap$1, minKey, addons: [], connections: { get: connections.toArray }, errnames, dependencies: domDeps, cache, semVer: DEXIE_VERSION, version: DEXIE_VERSION.split(".").map(function(n) { return parseInt(n); }).reduce(function(p, c, i) { return p + c / Math.pow(10, i * 2); }) })); Dexie3.maxKey = getMaxKey(Dexie3.dependencies.IDBKeyRange); if (typeof dispatchEvent !== "undefined" && typeof addEventListener !== "undefined") { globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, function(updatedParts) { if (!propagatingLocally) { var event_1; event_1 = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, { detail: updatedParts }); propagatingLocally = true; dispatchEvent(event_1); propagatingLocally = false; } }); addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, function(_a2) { var detail = _a2.detail; if (!propagatingLocally) { propagateLocally(detail); } }); } function propagateLocally(updateParts) { var wasMe = propagatingLocally; try { propagatingLocally = true; globalEvents.storagemutated.fire(updateParts); signalSubscribersNow(updateParts, true); } finally { propagatingLocally = wasMe; } } var propagatingLocally = false; var bc; var createBC = function() { }; if (typeof BroadcastChannel !== "undefined") { createBC = function() { bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME); bc.onmessage = function(ev) { return ev.data && propagateLocally(ev.data); }; }; createBC(); if (typeof bc.unref === "function") { bc.unref(); } globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, function(changedParts) { if (!propagatingLocally) { bc.postMessage(changedParts); } }); } if (typeof addEventListener !== "undefined") { addEventListener("pagehide", function(event) { if (!Dexie$1.disableBfCache && event.persisted) { if (debug) console.debug("Dexie: handling persisted pagehide"); bc === null || bc === void 0 ? void 0 : bc.close(); for (var _i = 0, _a2 = connections.toArray(); _i < _a2.length; _i++) { var db2 = _a2[_i]; db2.close({ disableAutoOpen: false }); } } }); addEventListener("pageshow", function(event) { if (!Dexie$1.disableBfCache && event.persisted) { if (debug) console.debug("Dexie: handling persisted pageshow"); createBC(); propagateLocally({ all: new RangeSet2(-Infinity, [[]]) }); } }); } function add2(value) { return new PropModification2({ add: value }); } function remove2(value) { return new PropModification2({ remove: value }); } function replacePrefix2(a, b) { return new PropModification2({ replacePrefix: [a, b] }); } DexiePromise.rejectionMapper = mapError; setDebug(debug); var namedExports = /* @__PURE__ */ Object.freeze({ __proto__: null, DEFAULT_MAX_CONNECTIONS, Dexie: Dexie$1, Entity: Entity2, PropModification: PropModification2, RangeSet: RangeSet2, add: add2, cmp: cmp3, default: Dexie$1, liveQuery: liveQuery2, mergeRanges: mergeRanges2, rangesOverlap: rangesOverlap2, remove: remove2, replacePrefix: replacePrefix2 }); __assign(Dexie$1, namedExports, { default: Dexie$1 }); return Dexie$1; }); } }); // intern-log/node_modules/.pnpm/dexie@4.4.6/node_modules/dexie/import-wrapper.mjs var import_dexie, DexieSymbol, Dexie, liveQuery, mergeRanges, rangesOverlap, RangeSet, cmp2, Entity, PropModification, replacePrefix, add, remove, DexieYProvider, import_wrapper_default; var init_import_wrapper = __esm({ "intern-log/node_modules/.pnpm/dexie@4.4.6/node_modules/dexie/import-wrapper.mjs"() { import_dexie = __toESM(require_dexie(), 1); DexieSymbol = Symbol.for("Dexie"); Dexie = globalThis[DexieSymbol] || (globalThis[DexieSymbol] = import_dexie.default); if (import_dexie.default.semVer !== Dexie.semVer) { throw new Error(`Two different versions of Dexie loaded in the same app: ${import_dexie.default.semVer} and ${Dexie.semVer}`); } ({ liveQuery, mergeRanges, rangesOverlap, RangeSet, cmp: cmp2, Entity, PropModification, replacePrefix, add, remove, DexieYProvider } = Dexie); import_wrapper_default = Dexie; } }); // intern-log/src/db/schema.ts var schema_exports = {}; __export(schema_exports, { CATEGORIES: () => CATEGORIES, DEFAULT_LOCATIONS: () => DEFAULT_LOCATIONS, EXPENSE_CATEGORIES: () => EXPENSE_CATEGORIES, INCOME_CATEGORIES: () => INCOME_CATEGORIES, SCHEMA_VERSION: () => SCHEMA_VERSION, WorklogDB: () => WorklogDB, bindDatabase: () => bindDatabase, categoryLabel: () => categoryLabel, db: () => db, unbindDatabase: () => unbindDatabase }); function bindDatabase(instance) { db = instance; } function unbindDatabase() { if (db) db.close(); db = void 0; } function categoryLabel(key) { const found = CATEGORIES.find((c) => c.key === key); return found ? found.label : "\u5176\u4ED6"; } var WorklogDB, db, SCHEMA_VERSION, EXPENSE_CATEGORIES, INCOME_CATEGORIES, DEFAULT_LOCATIONS, CATEGORIES; var init_schema = __esm({ "intern-log/src/db/schema.ts"() { "use strict"; init_import_wrapper(); WorklogDB = class extends import_wrapper_default { constructor(dbName = "intern_worklog") { super(dbName); this.version(1).stores({ project: "++id, &name, archived", work_log: "++id, &date", log_item: "++id, work_log_id, project_id, category", attendance: "++id, &date", weekly_note: "++id, &week_start", setting: "key" }); this.version(2).stores({ memo: "++id, updated_at", credential: "++id, system, updated_at" }); this.version(3).stores({ transaction: "++id, date, type, category" }); this.version(4).stores({ sync_mirror: "++id, table, uuid", tombstone: "++id, table, uuid, deleted_at" }); } }; SCHEMA_VERSION = 4; EXPENSE_CATEGORIES = ["\u9910\u996E", "\u4EA4\u901A", "\u4F4F\u623F", "\u901A\u8BAF", "\u5B66\u4E60", "\u5A31\u4E50", "\u5176\u4ED6"]; INCOME_CATEGORIES = ["\u5DE5\u8D44", "\u62A5\u9500", "\u5176\u4ED6"]; DEFAULT_LOCATIONS = ["\u516C\u53F8", "\u5BA2\u6237\u73B0\u573A", "\u51FA\u5DEE", "\u5C45\u5BB6\u529E\u516C"]; CATEGORIES = [ { key: "dev", label: "\u5F00\u53D1" }, { key: "bugfix", label: "BUG\u4FEE\u590D" }, { key: "test", label: "\u6D4B\u8BD5" }, { key: "learning", label: "\u5B66\u4E60\u6210\u957F" }, { key: "meeting", label: "\u4F1A\u8BAE\u6C9F\u901A" }, { key: "doc", label: "\u6587\u6863\u8F93\u51FA" }, { key: "other", label: "\u5176\u4ED6" } ]; } }); // intern-log/src/lib/date.ts function pad(n) { return n < 10 ? "0" + n : String(n); } function toDateStr(d) { return d.getFullYear() + "-" + pad(d.getMonth() + 1) + "-" + pad(d.getDate()); } function nowLocalISO() { const d = /* @__PURE__ */ new Date(); return toDateStr(d) + "T" + pad(d.getHours()) + ":" + pad(d.getMinutes()) + ":" + pad(d.getSeconds()); } var init_date = __esm({ "intern-log/src/lib/date.ts"() { "use strict"; } }); // intern-log/src/db/repo.ts async function getSetting(key, fallback) { const row = await db.setting.get(key); return row ? row.value : fallback; } async function setSetting(key, value) { await db.setting.put({ key, value }); } var init_repo = __esm({ "intern-log/src/db/repo.ts"() { "use strict"; init_schema(); init_date(); } }); // intern-log/src/lib/crypto.ts var init_crypto = __esm({ "intern-log/src/lib/crypto.ts"() { "use strict"; } }); // intern-log/src/db/vault.ts var init_vault = __esm({ "intern-log/src/db/vault.ts"() { "use strict"; init_schema(); init_repo(); init_crypto(); init_date(); } }); // intern-log/src/db/auth.ts function getCloudCreds() { try { const raw = localStorage.getItem(CREDS_KEY); if (!raw) return null; const c = JSON.parse(raw); if (c && c.username && c.password) return c; } catch { } return null; } var UserRegistry, registry, CREDS_KEY; var init_auth = __esm({ "intern-log/src/db/auth.ts"() { "use strict"; init_import_wrapper(); init_schema(); init_vault(); init_crypto(); UserRegistry = class extends import_wrapper_default { constructor() { super("intern_worklog_users"); this.version(1).stores({ user: "id, &username" }); } }; registry = new UserRegistry(); CREDS_KEY = "dsh_cloud_creds"; } }); // intern-log/src/sync/engine.ts var engine_exports = {}; __export(engine_exports, { DEFAULT_SYNC_BASE: () => DEFAULT_SYNC_BASE, SYNC_TABLES: () => SYNC_TABLES, autoSyncNow: () => autoSyncNow, enableRealtimeSync: () => enableRealtimeSync, ensureCloudBinding: () => ensureCloudBinding, getCloudUser: () => getCloudUser, getSyncBase: () => getSyncBase, getSyncLastTime: () => getSyncLastTime, isSyncConfigured: () => isSyncConfigured, registerCloudAccount: () => registerCloudAccount, runSync: () => runSync, stopRealtime: () => stopRealtime, syncWithStoredConfig: () => syncWithStoredConfig }); function newUuid() { if (typeof crypto !== "undefined" && crypto.randomUUID) return crypto.randomUUID(); return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => { const r = Math.random() * 16 | 0; return (c === "x" ? r : r & 3 | 8).toString(16); }); } function stripId(row) { const copy = { ...row }; delete copy.id; return copy; } function rowHash(row) { return JSON.stringify(row); } async function getTable(name) { return db.table(name).toArray(); } function pkOf(t, row) { return t === "setting" ? row.key : row.id; } async function ensureSyncFields() { for (const t of TABLES) { const table = db.table(t); const rows = await table.toArray(); for (const row of rows) { if (t === "setting" && EXCLUDE_SETTING_KEYS.has(row.key)) continue; const patch = {}; if (!row.uuid) patch.uuid = newUuid(); if (!row.updated_at) patch.updated_at = row.created_at || nowLocalISO(); if (Object.keys(patch).length) await table.update(pkOf(t, row), patch); } } } async function getSyncBase() { return await getSetting("sync_base_url", "") || DEFAULT_SYNC_BASE; } async function loadSyncConfig() { const creds = getCloudCreds(); if (!creds) throw new Error("\u672A\u767B\u5F55\uFF0C\u65E0\u6CD5\u540C\u6B65"); return { baseUrl: await getSyncBase(), username: creds.username, password: creds.password }; } async function syncWithStoredConfig() { return runSync(await loadSyncConfig()); } async function ensureCloudBinding() { const creds = getCloudCreds(); if (!creds) throw new Error("\u672A\u767B\u5F55"); const base = await getSyncBase(); const headers = { "Content-Type": "application/json" }; const body = JSON.stringify({ username: creds.username, password: creds.password }); let resp = await fetch(base + "/api/auth/register", { method: "POST", headers, body }); if (resp.status === 409) { resp = await fetch(base + "/api/auth/login", { method: "POST", headers, body }); if (!resp.ok) throw new Error("\u4E91\u7AEF\u5DF2\u5B58\u5728\u540C\u540D\u8D26\u53F7\u4E14\u5BC6\u7801\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u68C0\u67E5"); } else if (!resp.ok) { throw new Error("\u4E91\u7AEF\u7ED1\u5B9A\u5931\u8D25\uFF1A" + resp.status); } } function getCloudUser() { const c = getCloudCreds(); return c ? c.username : null; } async function isSyncConfigured() { return getCloudCreds() != null; } async function getSyncLastTime() { return getSetting("sync_last_time", ""); } async function registerCloudAccount(baseUrl, username, password) { const base = baseUrl.trim().replace(/\/+$/, ""); if (!base || !username.trim() || password.length < 6) { throw new Error("\u8BF7\u5B8C\u6574\u586B\u5199\u540C\u6B65\u5730\u5740\u3001\u7528\u6237\u540D\u4E0E\u81F3\u5C11 6 \u4F4D\u7684\u5BC6\u7801"); } let resp; try { resp = await fetch(base + "/api/auth/register", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username: username.trim(), password }) }); } catch { throw new Error("\u65E0\u6CD5\u8BBF\u95EE\u540C\u6B65\u670D\u52A1\uFF1A\u8BF7\u68C0\u67E5\u5730\u5740\u3001\u7AEF\u53E3\u4E0E\u7F51\u7EDC"); } if (resp.status === 409) throw new Error("\u4E91\u7AEF\u7528\u6237\u540D\u5DF2\u5B58\u5728\uFF0C\u53EF\u76F4\u63A5\u540C\u6B65"); if (!resp.ok) throw new Error("\u4E91\u7AEF\u6CE8\u518C\u5931\u8D25\uFF1A" + resp.status); } async function loginCloud(base, config) { const resp = await fetch(base + "/api/auth/login", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username: config.username.trim(), password: config.password }) }); if (!resp.ok) throw new Error("\u4E91\u7AEF\u8D26\u53F7\u6216\u5BC6\u7801\u4E0D\u6B63\u786E"); const j = await resp.json(); if (!j || !j.token) throw new Error("\u4E91\u7AEF\u767B\u5F55\u5F02\u5E38"); return String(j.token); } async function ensureToken(base, config) { let token = await getSetting("sync_token", ""); if (token) return token; token = await loginCloud(base, config); await setSetting("sync_token", token); return token; } async function autoSyncNow() { if (syncRunning) { pendingSync = true; return; } try { if (!await isSyncConfigured()) return; await runSync(await loadSyncConfig()); } catch { } } function enableRealtimeSync() { if (realtimeAttached) return; realtimeAttached = true; const sub = liveQuery(async () => { const counts = {}; for (const t of TABLES) counts[t] = await db.table(t).count(); return counts; }); realtimeSub = sub.subscribe({ next: () => { if (changesSuppressed || syncRunning) return; if (changeDebounce) globalThis.clearTimeout(changeDebounce); changeDebounce = globalThis.setTimeout(() => { void autoSyncNow(); }, 3e3); }, error: () => { } }); } function stopRealtime() { if (realtimeSub) { realtimeSub.unsubscribe(); realtimeSub = null; } if (sse) { sse.close(); sse = null; sseKey = ""; } if (changeDebounce) { globalThis.clearTimeout(changeDebounce); changeDebounce = null; } } function ensureSSE(base, token) { const key = base + "|" + token; if (sse && sseKey === key) return; if (sse) { sse.close(); sse = null; } try { sse = new EventSource(base + "/api/events?token=" + encodeURIComponent(token)); sseKey = key; sse.onmessage = () => { void autoSyncNow(); }; } catch { sse = null; } } async function runSync(config) { if (syncRunning) { pendingSync = true; return { pushed: 0, pulled: 0, removed: 0, at: "" }; } syncRunning = true; changesSuppressed = true; try { const result = await doRunSync(config); if (pendingSync) { pendingSync = false; globalThis.setTimeout(() => { void autoSyncNow(); }, 800); } return result; } finally { syncRunning = false; changesSuppressed = false; } } async function doRunSync(config) { const base = config.baseUrl.trim().replace(/\/+$/, ""); if (!base) throw new Error("\u8BF7\u5148\u914D\u7F6E\u540C\u6B65\u670D\u52A1\u5730\u5740"); await ensureSyncFields(); const mirrorRows = await db.sync_mirror.toArray(); const mirror = /* @__PURE__ */ new Map(); for (const m of mirrorRows) mirror.set(m.table + "|" + m.uuid, m); const pushTables = {}; const tombstones = []; let pushed = 0; for (const t of TABLES) { let rows = await getTable(t); if (t === "setting") rows = rows.filter((r) => !EXCLUDE_SETTING_KEYS.has(r.key)); const current = /* @__PURE__ */ new Map(); for (const row of rows) current.set(row.uuid, row); for (const [u, row] of current) { const clean = stripId(row); const h = rowHash(clean); const m = mirror.get(t + "|" + u); if (!m || m.hash !== h) { pushTables[t] = pushTables[t] || []; pushTables[t].push(clean); pushed++; } } for (const [key, m] of mirror) { if (key.startsWith(t + "|") && !current.has(m.uuid)) { tombstones.push({ table: t, uuid: m.uuid, deleted_at: nowLocalISO() }); } } pushTables[t] = pushTables[t] || []; } const token = await ensureToken(base, config); const doPush = (tk) => fetch(base + "/api/sync", { method: "POST", headers: { "Content-Type": "application/json", Authorization: "Bearer " + tk }, body: JSON.stringify({ device: "client", tables: pushTables, tombstones }) }); let resp = await doPush(token); if (resp.status === 401) { await setSetting("sync_token", ""); const token2 = await loginCloud(base, config); await setSetting("sync_token", token2); resp = await doPush(token2); } if (!resp.ok) throw new Error("\u540C\u6B65\u670D\u52A1\u8FD4\u56DE " + resp.status); const data = await resp.json(); const serverTables = data.tables || {}; const serverTombstones = data.tombstones || []; let pulled = 0; let removed = 0; const finalMirror = []; for (const t of TABLES) { const table = db.table(t); const localRows = await table.toArray(); const byUuid = /* @__PURE__ */ new Map(); for (const row of localRows) byUuid.set(row.uuid, row); const serverRows = serverTables[t] || []; const serverByUuid = /* @__PURE__ */ new Map(); for (const row of serverRows) serverByUuid.set(row.uuid, row); const dead = new Set(serverTombstones.filter((x) => x.table === t).map((x) => x.uuid)); for (const [u, row] of byUuid) { if (dead.has(u)) { await table.delete(pkOf(t, row)); removed++; } } for (const srow of serverRows) { if (dead.has(srow.uuid)) continue; const local = byUuid.get(srow.uuid); if (!local) { await table.add({ ...srow }); pulled++; } else { const localUa = String(local.updated_at || ""); const serverUa = String(srow.updated_at || ""); if (serverUa > localUa) { const patch = { ...srow }; if (t === "setting") delete patch.key; await table.update(pkOf(t, local), patch); pulled++; } } } const finalRows = await table.toArray(); for (const row of finalRows) { if (t === "setting" && EXCLUDE_SETTING_KEYS.has(row.key)) continue; finalMirror.push({ table: t, uuid: row.uuid, hash: rowHash(stripId(row)) }); } } await db.sync_mirror.clear(); if (finalMirror.length) await db.sync_mirror.bulkAdd(finalMirror.map((m) => ({ ...m }))); ensureSSE(base, token); const at = nowLocalISO(); await setSetting("sync_last_time", at); return { pushed, pulled, removed, at }; } var DEFAULT_SYNC_BASE, TABLES, EXCLUDE_SETTING_KEYS, SYNC_TABLES, syncRunning, pendingSync, changesSuppressed, changeDebounce, sse, sseKey, realtimeAttached, realtimeSub; var init_engine = __esm({ "intern-log/src/sync/engine.ts"() { "use strict"; init_import_wrapper(); init_schema(); init_repo(); init_auth(); init_date(); DEFAULT_SYNC_BASE = "https://daywk.linyux.cn"; TABLES = ["project", "work_log", "log_item", "attendance", "weekly_note", "setting", "memo", "credential", "transaction"]; EXCLUDE_SETTING_KEYS = /* @__PURE__ */ new Set(["sync_cursor", "sync_last_time", "sync_token", "last_project", "last_category"]); SYNC_TABLES = TABLES; syncRunning = false; pendingSync = false; changesSuppressed = false; changeDebounce = null; sse = null; sseKey = ""; realtimeAttached = false; realtimeSub = null; } }); // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/errors.js var messages = { AbortError: "A request was aborted, for example through a call to IDBTransaction.abort.", ConstraintError: "A mutation operation in the transaction failed because a constraint was not satisfied. For example, an object such as an object store or index already exists and a request attempted to create a new one.", DataCloneError: "The data being stored could not be cloned by the internal structured cloning algorithm.", DataError: "Data provided to an operation does not meet requirements.", InvalidAccessError: "An invalid operation was performed on an object. For example transaction creation attempt was made, but an empty scope was provided.", InvalidStateError: "An operation was called on an object on which it is not allowed or at a time when it is not allowed. Also occurs if a request is made on a source object that has been deleted or removed. Use TransactionInactiveError or ReadOnlyError when possible, as they are more specific variations of InvalidStateError.", NotFoundError: "The operation failed because the requested database object could not be found. For example, an object store did not exist but was being opened.", ReadOnlyError: 'The mutating operation was attempted in a "readonly" transaction.', TransactionInactiveError: "A request was placed against a transaction which is currently not active, or which is finished.", SyntaxError: "The keypath argument contains an invalid key path", VersionError: "An attempt was made to open a database using a lower version than the existing version." }; var setErrorCode = (error, value) => { Object.defineProperty(error, "code", { value, writable: false, enumerable: true, configurable: false }); }; var AbortError = class extends DOMException { constructor(message = messages.AbortError) { super(message, "AbortError"); } }; var ConstraintError = class extends DOMException { constructor(message = messages.ConstraintError) { super(message, "ConstraintError"); } }; var DataError = class extends DOMException { constructor(message = messages.DataError) { super(message, "DataError"); setErrorCode(this, 0); } }; var InvalidAccessError = class extends DOMException { constructor(message = messages.InvalidAccessError) { super(message, "InvalidAccessError"); } }; var InvalidStateError = class extends DOMException { constructor(message = messages.InvalidStateError) { super(message, "InvalidStateError"); setErrorCode(this, 11); } }; var NotFoundError = class extends DOMException { constructor(message = messages.NotFoundError) { super(message, "NotFoundError"); } }; var ReadOnlyError = class extends DOMException { constructor(message = messages.ReadOnlyError) { super(message, "ReadOnlyError"); } }; var SyntaxError2 = class extends DOMException { constructor(message = messages.VersionError) { super(message, "SyntaxError"); setErrorCode(this, 12); } }; var TransactionInactiveError = class extends DOMException { constructor(message = messages.TransactionInactiveError) { super(message, "TransactionInactiveError"); setErrorCode(this, 0); } }; var VersionError = class extends DOMException { constructor(message = messages.VersionError) { super(message, "VersionError"); } }; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/isSharedArrayBuffer.js function isSharedArrayBuffer(input) { return typeof SharedArrayBuffer !== "undefined" && input instanceof SharedArrayBuffer; } // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/valueToKeyWithoutThrowing.js var INVALID_TYPE = Symbol("INVALID_TYPE"); var INVALID_VALUE = Symbol("INVALID_VALUE"); var valueToKeyWithoutThrowing = (input, seen) => { if (typeof input === "number") { if (isNaN(input)) { return INVALID_VALUE; } return input; } else if (Object.prototype.toString.call(input) === "[object Date]") { const ms = input.valueOf(); if (isNaN(ms)) { return INVALID_VALUE; } return new Date(ms); } else if (typeof input === "string") { return input; } else if ( // https://w3c.github.io/IndexedDB/#ref-for-dfn-buffer-source-type input instanceof ArrayBuffer || isSharedArrayBuffer(input) || typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView && ArrayBuffer.isView(input) ) { if ("detached" in input ? input.detached : input.byteLength === 0) { return INVALID_VALUE; } let arrayBuffer; let offset = 0; let length = 0; if (input instanceof ArrayBuffer || isSharedArrayBuffer(input)) { arrayBuffer = input; length = input.byteLength; } else { arrayBuffer = input.buffer; offset = input.byteOffset; length = input.byteLength; } return arrayBuffer.slice(offset, offset + length); } else if (Array.isArray(input)) { if (seen === void 0) { seen = /* @__PURE__ */ new Set(); } else if (seen.has(input)) { return INVALID_VALUE; } seen.add(input); let hasInvalid = false; const keys = Array.from({ length: input.length }, (_, i) => { if (hasInvalid) { return; } const hop = Object.hasOwn(input, i); if (!hop) { hasInvalid = true; return; } const entry = input[i]; const key = valueToKeyWithoutThrowing(entry, seen); if (key === INVALID_VALUE || key === INVALID_TYPE) { hasInvalid = true; return; } return key; }); if (hasInvalid) { return INVALID_VALUE; } return keys; } else { return INVALID_TYPE; } }; var valueToKeyWithoutThrowing_default = valueToKeyWithoutThrowing; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/valueToKey.js var valueToKey = (input, seen) => { const result = valueToKeyWithoutThrowing_default(input, seen); if (result === INVALID_VALUE || result === INVALID_TYPE) { throw new DataError(); } return result; }; var valueToKey_default = valueToKey; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/cmp.js var getType = (x) => { if (typeof x === "number") { return "Number"; } if (Object.prototype.toString.call(x) === "[object Date]") { return "Date"; } if (Array.isArray(x)) { return "Array"; } if (typeof x === "string") { return "String"; } if (x instanceof ArrayBuffer) { return "Binary"; } throw new DataError(); }; var cmp = (first, second) => { if (second === void 0) { throw new TypeError(); } first = valueToKey_default(first); second = valueToKey_default(second); const t1 = getType(first); const t2 = getType(second); if (t1 !== t2) { if (t1 === "Array") { return 1; } if (t1 === "Binary" && (t2 === "String" || t2 === "Date" || t2 === "Number")) { return 1; } if (t1 === "String" && (t2 === "Date" || t2 === "Number")) { return 1; } if (t1 === "Date" && t2 === "Number") { return 1; } return -1; } if (t1 === "Binary") { first = new Uint8Array(first); second = new Uint8Array(second); } if (t1 === "Array" || t1 === "Binary") { const length = Math.min(first.length, second.length); for (let i = 0; i < length; i++) { const result = cmp(first[i], second[i]); if (result !== 0) { return result; } } if (first.length > second.length) { return 1; } if (first.length < second.length) { return -1; } return 0; } if (t1 === "Date") { if (first.getTime() === second.getTime()) { return 0; } } else { if (first === second) { return 0; } } return first > second ? 1 : -1; }; var cmp_default = cmp; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/FDBKeyRange.js var FDBKeyRange = class _FDBKeyRange { static only(value) { if (arguments.length === 0) { throw new TypeError(); } value = valueToKey_default(value); return new _FDBKeyRange(value, value, false, false); } static lowerBound(lower, open = false) { if (arguments.length === 0) { throw new TypeError(); } lower = valueToKey_default(lower); return new _FDBKeyRange(lower, void 0, open, true); } static upperBound(upper, open = false) { if (arguments.length === 0) { throw new TypeError(); } upper = valueToKey_default(upper); return new _FDBKeyRange(void 0, upper, true, open); } static bound(lower, upper, lowerOpen = false, upperOpen = false) { if (arguments.length < 2) { throw new TypeError(); } const cmpResult = cmp_default(lower, upper); if (cmpResult === 1 || cmpResult === 0 && (lowerOpen || upperOpen)) { throw new DataError(); } lower = valueToKey_default(lower); upper = valueToKey_default(upper); return new _FDBKeyRange(lower, upper, lowerOpen, upperOpen); } constructor(lower, upper, lowerOpen, upperOpen) { this.lower = lower; this.upper = upper; this.lowerOpen = lowerOpen; this.upperOpen = upperOpen; } // https://w3c.github.io/IndexedDB/#dom-idbkeyrange-includes includes(key) { if (arguments.length === 0) { throw new TypeError(); } key = valueToKey_default(key); if (this.lower !== void 0) { const cmpResult = cmp_default(this.lower, key); if (cmpResult === 1 || cmpResult === 0 && this.lowerOpen) { return false; } } if (this.upper !== void 0) { const cmpResult = cmp_default(this.upper, key); if (cmpResult === -1 || cmpResult === 0 && this.upperOpen) { return false; } } return true; } get [Symbol.toStringTag]() { return "IDBKeyRange"; } }; var FDBKeyRange_default = FDBKeyRange; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/extractKey.js var extractKey = (keyPath, value) => { if (Array.isArray(keyPath)) { const result = []; for (let item of keyPath) { if (item !== void 0 && item !== null && typeof item !== "string" && item.toString) { item = item.toString(); } const key = extractKey(item, value).key; result.push(valueToKey_default(key)); } return { type: "found", key: result }; } if (keyPath === "") { return { type: "found", key: value }; } let remainingKeyPath = keyPath; let object = value; while (remainingKeyPath !== null) { let identifier; const i = remainingKeyPath.indexOf("."); if (i >= 0) { identifier = remainingKeyPath.slice(0, i); remainingKeyPath = remainingKeyPath.slice(i + 1); } else { identifier = remainingKeyPath; remainingKeyPath = null; } const isSpecialIdentifier = identifier === "length" && (typeof object === "string" || Array.isArray(object)) || (identifier === "size" || identifier === "type") && typeof Blob !== "undefined" && object instanceof Blob || (identifier === "name" || identifier === "lastModified") && typeof File !== "undefined" && object instanceof File; if (!isSpecialIdentifier && (typeof object !== "object" || object === null || !Object.hasOwn(object, identifier))) { return { type: "notFound" }; } object = object[identifier]; } return { type: "found", key: object }; }; var extractKey_default = extractKey; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/cloneValueForInsertion.js function cloneValueForInsertion(value, transaction) { if (transaction._state !== "active") { throw new Error("Assert: transaction state is active"); } transaction._state = "inactive"; try { return structuredClone(value); } finally { transaction._state = "active"; } } // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/FDBCursor.js var getEffectiveObjectStore = (cursor) => { if (cursor.source instanceof FDBObjectStore_default) { return cursor.source; } return cursor.source.objectStore; }; var makeKeyRange = (range, lowers, uppers) => { let lower = range !== void 0 ? range.lower : void 0; let upper = range !== void 0 ? range.upper : void 0; for (const lowerTemp of lowers) { if (lowerTemp === void 0) { continue; } if (lower === void 0 || cmp_default(lower, lowerTemp) === 1) { lower = lowerTemp; } } for (const upperTemp of uppers) { if (upperTemp === void 0) { continue; } if (upper === void 0 || cmp_default(upper, upperTemp) === -1) { upper = upperTemp; } } if (lower !== void 0 && upper !== void 0) { return FDBKeyRange_default.bound(lower, upper); } if (lower !== void 0) { return FDBKeyRange_default.lowerBound(lower); } if (upper !== void 0) { return FDBKeyRange_default.upperBound(upper); } }; var FDBCursor = class { _gotValue = false; _position = void 0; // Key of previously returned record _objectStorePosition = void 0; _keyOnly = false; _key = void 0; _primaryKey = void 0; constructor(source, range, direction = "next", request, keyOnly = false) { this._range = range; this._source = source; this._direction = direction; this._request = request; this._keyOnly = keyOnly; } // Read only properties get source() { return this._source; } set source(val) { } get request() { return this._request; } set request(val) { } get direction() { return this._direction; } set direction(val) { } get key() { return this._key; } set key(val) { } get primaryKey() { return this._primaryKey; } set primaryKey(val) { } // https://w3c.github.io/IndexedDB/#iterate-a-cursor _iterate(key, primaryKey) { const sourceIsObjectStore = this.source instanceof FDBObjectStore_default; const records = this.source instanceof FDBObjectStore_default ? this.source._rawObjectStore.records : this.source._rawIndex.records; let foundRecord; if (this.direction === "next") { const range = makeKeyRange(this._range, [key, this._position], []); for (const record of records.values(range)) { const cmpResultKey = key !== void 0 ? cmp_default(record.key, key) : void 0; const cmpResultPosition = this._position !== void 0 ? cmp_default(record.key, this._position) : void 0; if (key !== void 0) { if (cmpResultKey === -1) { continue; } } if (primaryKey !== void 0) { if (cmpResultKey === -1) { continue; } const cmpResultPrimaryKey = cmp_default(record.value, primaryKey); if (cmpResultKey === 0 && cmpResultPrimaryKey === -1) { continue; } } if (this._position !== void 0 && sourceIsObjectStore) { if (cmpResultPosition !== 1) { continue; } } if (this._position !== void 0 && !sourceIsObjectStore) { if (cmpResultPosition === -1) { continue; } if (cmpResultPosition === 0 && cmp_default(record.value, this._objectStorePosition) !== 1) { continue; } } if (this._range !== void 0) { if (!this._range.includes(record.key)) { continue; } } foundRecord = record; break; } } else if (this.direction === "nextunique") { const range = makeKeyRange(this._range, [key, this._position], []); for (const record of records.values(range)) { if (key !== void 0) { if (cmp_default(record.key, key) === -1) { continue; } } if (this._position !== void 0) { if (cmp_default(record.key, this._position) !== 1) { continue; } } if (this._range !== void 0) { if (!this._range.includes(record.key)) { continue; } } foundRecord = record; break; } } else if (this.direction === "prev") { const range = makeKeyRange(this._range, [], [key, this._position]); for (const record of records.values(range, "prev")) { const cmpResultKey = key !== void 0 ? cmp_default(record.key, key) : void 0; const cmpResultPosition = this._position !== void 0 ? cmp_default(record.key, this._position) : void 0; if (key !== void 0) { if (cmpResultKey === 1) { continue; } } if (primaryKey !== void 0) { if (cmpResultKey === 1) { continue; } const cmpResultPrimaryKey = cmp_default(record.value, primaryKey); if (cmpResultKey === 0 && cmpResultPrimaryKey === 1) { continue; } } if (this._position !== void 0 && sourceIsObjectStore) { if (cmpResultPosition !== -1) { continue; } } if (this._position !== void 0 && !sourceIsObjectStore) { if (cmpResultPosition === 1) { continue; } if (cmpResultPosition === 0 && cmp_default(record.value, this._objectStorePosition) !== -1) { continue; } } if (this._range !== void 0) { if (!this._range.includes(record.key)) { continue; } } foundRecord = record; break; } } else if (this.direction === "prevunique") { let tempRecord; const range = makeKeyRange(this._range, [], [key, this._position]); for (const record of records.values(range, "prev")) { if (key !== void 0) { if (cmp_default(record.key, key) === 1) { continue; } } if (this._position !== void 0) { if (cmp_default(record.key, this._position) !== -1) { continue; } } if (this._range !== void 0) { if (!this._range.includes(record.key)) { continue; } } tempRecord = record; break; } if (tempRecord) { foundRecord = records.get(tempRecord.key); } } let result; if (!foundRecord) { this._key = void 0; if (!sourceIsObjectStore) { this._objectStorePosition = void 0; } if (!this._keyOnly && this.toString() === "[object IDBCursorWithValue]") { this.value = void 0; } result = null; } else { this._position = foundRecord.key; if (!sourceIsObjectStore) { this._objectStorePosition = foundRecord.value; } this._key = foundRecord.key; if (sourceIsObjectStore) { this._primaryKey = structuredClone(foundRecord.key); if (!this._keyOnly && this.toString() === "[object IDBCursorWithValue]") { this.value = structuredClone(foundRecord.value); } } else { this._primaryKey = structuredClone(foundRecord.value); if (!this._keyOnly && this.toString() === "[object IDBCursorWithValue]") { if (this.source instanceof FDBObjectStore_default) { throw new Error("This should never happen"); } const value = this.source.objectStore._rawObjectStore.getValue(foundRecord.value); this.value = structuredClone(value); } } this._gotValue = true; result = this; } return result; } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-update-IDBRequest-any-value update(value) { if (value === void 0) { throw new TypeError(); } const effectiveObjectStore = getEffectiveObjectStore(this); const effectiveKey = Object.hasOwn(this.source, "_rawIndex") ? this.primaryKey : this._position; const transaction = effectiveObjectStore.transaction; if (transaction._state !== "active") { throw new TransactionInactiveError(); } if (transaction.mode === "readonly") { throw new ReadOnlyError(); } if (effectiveObjectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } if (!(this.source instanceof FDBObjectStore_default) && this.source._rawIndex.deleted) { throw new InvalidStateError(); } if (!this._gotValue || !Object.hasOwn(this, "value")) { throw new InvalidStateError(); } const clone = cloneValueForInsertion(value, transaction); if (effectiveObjectStore.keyPath !== null) { let tempKey; try { tempKey = extractKey_default(effectiveObjectStore.keyPath, clone).key; } catch (err) { } if (cmp_default(tempKey, effectiveKey) !== 0) { throw new DataError(); } } const record = { key: effectiveKey, value: clone }; return transaction._execRequestAsync({ operation: effectiveObjectStore._rawObjectStore.storeRecord.bind(effectiveObjectStore._rawObjectStore, record, false, transaction._rollbackLog), source: this }); } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-advance-void-unsigned-long-count advance(count) { if (!Number.isInteger(count) || count <= 0) { throw new TypeError(); } const effectiveObjectStore = getEffectiveObjectStore(this); const transaction = effectiveObjectStore.transaction; if (transaction._state !== "active") { throw new TransactionInactiveError(); } if (effectiveObjectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } if (!(this.source instanceof FDBObjectStore_default) && this.source._rawIndex.deleted) { throw new InvalidStateError(); } if (!this._gotValue) { throw new InvalidStateError(); } if (this._request) { this._request.readyState = "pending"; } transaction._execRequestAsync({ operation: () => { let result; for (let i = 0; i < count; i++) { result = this._iterate(); if (!result) { break; } } return result; }, request: this._request, source: this.source }); this._gotValue = false; } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-continue-void-any-key continue(key) { const effectiveObjectStore = getEffectiveObjectStore(this); const transaction = effectiveObjectStore.transaction; if (transaction._state !== "active") { throw new TransactionInactiveError(); } if (effectiveObjectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } if (!(this.source instanceof FDBObjectStore_default) && this.source._rawIndex.deleted) { throw new InvalidStateError(); } if (!this._gotValue) { throw new InvalidStateError(); } if (key !== void 0) { key = valueToKey_default(key); const cmpResult = cmp_default(key, this._position); if (cmpResult <= 0 && (this.direction === "next" || this.direction === "nextunique") || cmpResult >= 0 && (this.direction === "prev" || this.direction === "prevunique")) { throw new DataError(); } } if (this._request) { this._request.readyState = "pending"; } transaction._execRequestAsync({ operation: this._iterate.bind(this, key), request: this._request, source: this.source }); this._gotValue = false; } // hthttps://w3c.github.io/IndexedDB/#dom-idbcursor-continueprimarykey continuePrimaryKey(key, primaryKey) { const effectiveObjectStore = getEffectiveObjectStore(this); const transaction = effectiveObjectStore.transaction; if (transaction._state !== "active") { throw new TransactionInactiveError(); } if (effectiveObjectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } if (!(this.source instanceof FDBObjectStore_default) && this.source._rawIndex.deleted) { throw new InvalidStateError(); } if (this.source instanceof FDBObjectStore_default || this.direction !== "next" && this.direction !== "prev") { throw new InvalidAccessError(); } if (!this._gotValue) { throw new InvalidStateError(); } if (key === void 0 || primaryKey === void 0) { throw new DataError(); } key = valueToKey_default(key); const cmpResult = cmp_default(key, this._position); if (cmpResult === -1 && this.direction === "next" || cmpResult === 1 && this.direction === "prev") { throw new DataError(); } const cmpResult2 = cmp_default(primaryKey, this._objectStorePosition); if (cmpResult === 0) { if (cmpResult2 <= 0 && this.direction === "next" || cmpResult2 >= 0 && this.direction === "prev") { throw new DataError(); } } if (this._request) { this._request.readyState = "pending"; } transaction._execRequestAsync({ operation: this._iterate.bind(this, key, primaryKey), request: this._request, source: this.source }); this._gotValue = false; } delete() { const effectiveObjectStore = getEffectiveObjectStore(this); const effectiveKey = Object.hasOwn(this.source, "_rawIndex") ? this.primaryKey : this._position; const transaction = effectiveObjectStore.transaction; if (transaction._state !== "active") { throw new TransactionInactiveError(); } if (transaction.mode === "readonly") { throw new ReadOnlyError(); } if (effectiveObjectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } if (!(this.source instanceof FDBObjectStore_default) && this.source._rawIndex.deleted) { throw new InvalidStateError(); } if (!this._gotValue || !Object.hasOwn(this, "value")) { throw new InvalidStateError(); } return transaction._execRequestAsync({ operation: effectiveObjectStore._rawObjectStore.deleteRecord.bind(effectiveObjectStore._rawObjectStore, effectiveKey, transaction._rollbackLog), source: this }); } get [Symbol.toStringTag]() { return "IDBCursor"; } }; var FDBCursor_default = FDBCursor; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/FDBCursorWithValue.js var FDBCursorWithValue = class extends FDBCursor_default { value = void 0; constructor(source, range, direction, request) { super(source, range, direction, request); } get [Symbol.toStringTag]() { return "IDBCursorWithValue"; } }; var FDBCursorWithValue_default = FDBCursorWithValue; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/FakeEventTarget.js var stopped = (event, listener) => { return event.immediatePropagationStopped || event.eventPhase === event.CAPTURING_PHASE && listener.capture === false || event.eventPhase === event.BUBBLING_PHASE && listener.capture === true; }; var invokeEventListeners = (event, obj) => { event.currentTarget = obj; const errors = []; const invoke = (callbackOrObject) => { try { const callback2 = typeof callbackOrObject === "function" ? callbackOrObject : callbackOrObject.handleEvent; callback2.call(event.currentTarget, event); } catch (err) { errors.push(err); } }; for (const listener of obj.listeners.slice()) { if (event.type !== listener.type || stopped(event, listener)) { continue; } invoke(listener.callback); } const typeToProp = { abort: "onabort", blocked: "onblocked", close: "onclose", complete: "oncomplete", error: "onerror", success: "onsuccess", upgradeneeded: "onupgradeneeded", versionchange: "onversionchange" }; const prop = typeToProp[event.type]; if (prop === void 0) { throw new Error(`Unknown event type: "${event.type}"`); } const callback = event.currentTarget[prop]; if (callback) { const listener = { callback, capture: false, type: event.type }; if (!stopped(event, listener)) { invoke(listener.callback); } } if (errors.length) { throw new AggregateError(errors); } }; var FakeEventTarget = class { listeners = []; // These will be overridden in individual subclasses and made not readonly addEventListener(type, callback, options) { const capture = !!(typeof options === "object" && options ? options.capture : options); this.listeners.push({ callback, capture, type }); } removeEventListener(type, callback, options) { const capture = !!(typeof options === "object" && options ? options.capture : options); const i = this.listeners.findIndex((listener) => { return listener.type === type && listener.callback === callback && listener.capture === capture; }); this.listeners.splice(i, 1); } // http://www.w3.org/TR/dom/#dispatching-events dispatchEvent(event) { if (event.dispatched || !event.initialized) { throw new InvalidStateError("The object is in an invalid state."); } event.isTrusted = false; event.dispatched = true; event.target = this; event.eventPhase = event.CAPTURING_PHASE; for (const obj of event.eventPath) { if (!event.propagationStopped) { invokeEventListeners(event, obj); } } event.eventPhase = event.AT_TARGET; if (!event.propagationStopped) { invokeEventListeners(event, event.target); } if (event.bubbles) { event.eventPath.reverse(); event.eventPhase = event.BUBBLING_PHASE; for (const obj of event.eventPath) { if (!event.propagationStopped) { invokeEventListeners(event, obj); } } } event.dispatched = false; event.eventPhase = event.NONE; event.currentTarget = null; if (event.canceled) { return false; } return true; } }; var FakeEventTarget_default = FakeEventTarget; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/FDBRequest.js var FDBRequest = class extends FakeEventTarget_default { _result = null; _error = null; source = null; transaction = null; readyState = "pending"; onsuccess = null; onerror = null; get error() { if (this.readyState === "pending") { throw new InvalidStateError(); } return this._error; } set error(value) { this._error = value; } get result() { if (this.readyState === "pending") { throw new InvalidStateError(); } return this._result; } set result(value) { this._result = value; } get [Symbol.toStringTag]() { return "IDBRequest"; } }; var FDBRequest_default = FDBRequest; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/FakeDOMStringList.js var FakeDOMStringList = class { constructor(...values) { this._values = values; for (let i = 0; i < values.length; i++) { this[i] = values[i]; } } contains(value) { return this._values.includes(value); } item(i) { if (i < 0 || i >= this._values.length) { return null; } return this._values[i]; } get length() { return this._values.length; } [Symbol.iterator]() { return this._values[Symbol.iterator](); } // Handled by proxy // Used internally, should not be used by others. I could maybe get rid of these and replace rather than mutate, but too lazy to check the spec. _push(...values) { for (let i = 0; i < values.length; i++) { this[this._values.length + i] = values[i]; } this._values.push(...values); } _sort(...values) { this._values.sort(...values); for (let i = 0; i < this._values.length; i++) { this[i] = this._values[i]; } return this; } }; var FakeDOMStringList_default = FakeDOMStringList; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/valueToKeyRange.js var valueToKeyRange = (value, nullDisallowedFlag = false) => { if (value instanceof FDBKeyRange_default) { return value; } if (value === null || value === void 0) { if (nullDisallowedFlag) { throw new DataError(); } return new FDBKeyRange_default(void 0, void 0, false, false); } const key = valueToKey_default(value); return FDBKeyRange_default.only(key); }; var valueToKeyRange_default = valueToKeyRange; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/getKeyPath.js var convertKey = (key) => typeof key === "object" && key ? key + "" : key; function getKeyPath(keyPath) { return Array.isArray(keyPath) ? keyPath.map(convertKey) : convertKey(keyPath); } // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/isPotentiallyValidKeyRange.js var isPotentiallyValidKeyRange = (value) => { if (value instanceof FDBKeyRange_default) { return true; } const key = valueToKeyWithoutThrowing_default(value); return key !== INVALID_TYPE; }; var isPotentiallyValidKeyRange_default = isPotentiallyValidKeyRange; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/enforceRange.js var enforceRange = (num, type) => { const min = 0; const max = type === "unsigned long" ? 4294967295 : 9007199254740991; if (isNaN(num) || num < min || num > max) { throw new TypeError(); } if (num >= 0) { return Math.floor(num); } }; var enforceRange_default = enforceRange; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/extractGetAllOptions.js var extractGetAllOptions = (queryOrOptions, count, numArguments) => { let query; let direction; if (queryOrOptions === void 0 || queryOrOptions === null || isPotentiallyValidKeyRange_default(queryOrOptions)) { query = queryOrOptions; if (numArguments > 1 && count !== void 0) { count = enforceRange_default(count, "unsigned long"); } } else { const getAllOptions = queryOrOptions; if (getAllOptions.query !== void 0) { query = getAllOptions.query; } if (getAllOptions.count !== void 0) { count = enforceRange_default(getAllOptions.count, "unsigned long"); } if (getAllOptions.direction !== void 0) { direction = getAllOptions.direction; } } return { query, count, direction }; }; var extractGetAllOptions_default = extractGetAllOptions; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/FDBIndex.js var confirmActiveTransaction = (index) => { if (index._rawIndex.deleted || index.objectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } if (index.objectStore.transaction._state !== "active") { throw new TransactionInactiveError(); } }; var FDBIndex = class { constructor(objectStore, rawIndex) { this._rawIndex = rawIndex; this._name = rawIndex.name; this.objectStore = objectStore; this.keyPath = getKeyPath(rawIndex.keyPath); this.multiEntry = rawIndex.multiEntry; this.unique = rawIndex.unique; } get name() { return this._name; } // https://w3c.github.io/IndexedDB/#dom-idbindex-name set name(name) { const transaction = this.objectStore.transaction; if (!transaction.db._runningVersionchangeTransaction) { throw transaction._state === "active" ? new InvalidStateError() : new TransactionInactiveError(); } if (transaction._state !== "active") { throw new TransactionInactiveError(); } if (this._rawIndex.deleted || this.objectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } name = String(name); if (name === this._name) { return; } if (this.objectStore.indexNames.contains(name)) { throw new ConstraintError(); } const oldName = this._name; const oldIndexNames = [...this.objectStore.indexNames]; this._name = name; this._rawIndex.name = name; this.objectStore._indexesCache.delete(oldName); this.objectStore._indexesCache.set(name, this); this.objectStore._rawObjectStore.rawIndexes.delete(oldName); this.objectStore._rawObjectStore.rawIndexes.set(name, this._rawIndex); this.objectStore.indexNames = new FakeDOMStringList_default(...Array.from(this.objectStore._rawObjectStore.rawIndexes.keys()).filter((indexName) => { const index = this.objectStore._rawObjectStore.rawIndexes.get(indexName); return index && !index.deleted; }).sort()); if (!this.objectStore.transaction._createdIndexes.has(this._rawIndex)) { transaction._rollbackLog.push(() => { this._name = oldName; this._rawIndex.name = oldName; this.objectStore._indexesCache.delete(name); this.objectStore._indexesCache.set(oldName, this); this.objectStore._rawObjectStore.rawIndexes.delete(name); this.objectStore._rawObjectStore.rawIndexes.set(oldName, this._rawIndex); this.objectStore.indexNames = new FakeDOMStringList_default(...oldIndexNames); }); } } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openCursor-IDBRequest-any-range-IDBCursorDirection-direction openCursor(range, direction) { confirmActiveTransaction(this); if (range === null) { range = void 0; } if (range !== void 0 && !(range instanceof FDBKeyRange_default)) { range = FDBKeyRange_default.only(valueToKey_default(range)); } const request = new FDBRequest_default(); request.source = this; request.transaction = this.objectStore.transaction; const cursor = new FDBCursorWithValue_default(this, range, direction, request); return this.objectStore.transaction._execRequestAsync({ operation: cursor._iterate.bind(cursor), request, source: this }); } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openKeyCursor-IDBRequest-any-range-IDBCursorDirection-direction openKeyCursor(range, direction) { confirmActiveTransaction(this); if (range === null) { range = void 0; } if (range !== void 0 && !(range instanceof FDBKeyRange_default)) { range = FDBKeyRange_default.only(valueToKey_default(range)); } const request = new FDBRequest_default(); request.source = this; request.transaction = this.objectStore.transaction; const cursor = new FDBCursor_default(this, range, direction, request, true); return this.objectStore.transaction._execRequestAsync({ operation: cursor._iterate.bind(cursor), request, source: this }); } get(key) { confirmActiveTransaction(this); if (!(key instanceof FDBKeyRange_default)) { key = valueToKey_default(key); } return this.objectStore.transaction._execRequestAsync({ operation: this._rawIndex.getValue.bind(this._rawIndex, key), source: this }); } // http://w3c.github.io/IndexedDB/#dom-idbindex-getall getAll(queryOrOptions, count) { const options = extractGetAllOptions_default(queryOrOptions, count, arguments.length); confirmActiveTransaction(this); const range = valueToKeyRange_default(options.query); return this.objectStore.transaction._execRequestAsync({ operation: this._rawIndex.getAllValues.bind(this._rawIndex, range, options.count, options.direction), source: this }); } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-getKey-IDBRequest-any-key getKey(key) { confirmActiveTransaction(this); if (!(key instanceof FDBKeyRange_default)) { key = valueToKey_default(key); } return this.objectStore.transaction._execRequestAsync({ operation: this._rawIndex.getKey.bind(this._rawIndex, key), source: this }); } // http://w3c.github.io/IndexedDB/#dom-idbindex-getallkeys getAllKeys(queryOrOptions, count) { const options = extractGetAllOptions_default(queryOrOptions, count, arguments.length); confirmActiveTransaction(this); const range = valueToKeyRange_default(options.query); return this.objectStore.transaction._execRequestAsync({ operation: this._rawIndex.getAllKeys.bind(this._rawIndex, range, options.count, options.direction), source: this }); } // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords getAllRecords(options) { let query; let count; let direction; if (options !== void 0) { if (options.query !== void 0) { query = options.query; } if (options.count !== void 0) { count = enforceRange_default(options.count, "unsigned long"); } if (options.direction !== void 0) { direction = options.direction; } } confirmActiveTransaction(this); const range = valueToKeyRange_default(query); return this.objectStore.transaction._execRequestAsync({ operation: this._rawIndex.getAllRecords.bind(this._rawIndex, range, count, direction), source: this }); } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-count-IDBRequest-any-key count(key) { confirmActiveTransaction(this); if (key === null) { key = void 0; } if (key !== void 0 && !(key instanceof FDBKeyRange_default)) { key = FDBKeyRange_default.only(valueToKey_default(key)); } return this.objectStore.transaction._execRequestAsync({ operation: () => { return this._rawIndex.count(key); }, source: this }); } get [Symbol.toStringTag]() { return "IDBIndex"; } }; var FDBIndex_default = FDBIndex; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/canInjectKey.js var canInjectKey = (keyPath, value) => { if (Array.isArray(keyPath)) { throw new Error("The key paths used in this section are always strings and never sequences, since it is not possible to create a object store which has a key generator and also has a key path that is a sequence."); } const identifiers = keyPath.split("."); if (identifiers.length === 0) { throw new Error("Assert: identifiers is not empty"); } identifiers.pop(); for (const identifier of identifiers) { if (typeof value !== "object" && !Array.isArray(value)) { return false; } const hop = Object.hasOwn(value, identifier); if (!hop) { return true; } value = value[identifier]; } return typeof value === "object" || Array.isArray(value); }; var canInjectKey_default = canInjectKey; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/FDBRecord.js var FDBRecord = class { constructor(key, primaryKey, value) { this._key = key; this._primaryKey = primaryKey; this._value = value; } get key() { return this._key; } set key(_) { } get primaryKey() { return this._primaryKey; } set primaryKey(_) { } get value() { return this._value; } set value(_) { } get [Symbol.toStringTag]() { return "IDBRecord"; } }; var FDBRecord_default = FDBRecord; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/binarySearchTree.js var MAX_TOMBSTONE_FACTOR = 2 / 3; var EVERYTHING_KEY_RANGE = new FDBKeyRange_default(void 0, void 0, false, false); var BinarySearchTree = class { _numTombstones = 0; _numNodes = 0; /** * * @param keysAreUnique - whether keys can be unique, and thus whether we cn skip checking `record.value` when * comparing. This is basically used to distinguish ObjectStores (where the value is the entire object, not used * as a key) from non-unique Indexes (where both the key and the value are meaningful keys used for sorting) */ constructor(keysAreUnique) { this._keysAreUnique = !!keysAreUnique; } size() { return this._numNodes - this._numTombstones; } get(record) { return this._getByComparator(this._root, (otherRecord) => this._compare(record, otherRecord)); } contains(record) { return !!this.get(record); } _compare(a, b) { const keyComparison = cmp_default(a.key, b.key); if (keyComparison !== 0) { return keyComparison; } return this._keysAreUnique ? 0 : cmp_default(a.value, b.value); } _getByComparator(node, comparator) { let current = node; while (current) { const comparison = comparator(current.record); if (comparison < 0) { current = current.left; } else if (comparison > 0) { current = current.right; } else { return current.record; } } } /** * Put a new record, and return the overwritten record if an overwrite occurred. * @param record * @param noOverwrite - throw a ConstraintError in case of overwrite */ put(record, noOverwrite = false) { if (!this._root) { this._root = { record, left: void 0, right: void 0, parent: void 0, deleted: false, // the root is always black in a red-black tree red: false }; this._numNodes++; return; } return this._put(this._root, record, noOverwrite); } _put(node, record, noOverwrite) { const comparison = this._compare(record, node.record); if (comparison < 0) { if (node.left) { return this._put(node.left, record, noOverwrite); } else { node.left = { record, left: void 0, right: void 0, parent: node, deleted: false, red: true }; this._onNewNodeInserted(node.left); } } else if (comparison > 0) { if (node.right) { return this._put(node.right, record, noOverwrite); } else { node.right = { record, left: void 0, right: void 0, parent: node, deleted: false, red: true }; this._onNewNodeInserted(node.right); } } else if (node.deleted) { node.deleted = false; node.record = record; this._numTombstones--; } else if (noOverwrite) { throw new ConstraintError(); } else { const overwrittenRecord = node.record; node.record = record; return overwrittenRecord; } } delete(record) { if (!this._root) { return; } this._delete(this._root, record); if (this._numTombstones > this._numNodes * MAX_TOMBSTONE_FACTOR) { const records = [...this.getAllRecords()]; this._root = this._rebuild(records, void 0, false); this._numNodes = records.length; this._numTombstones = 0; } } _delete(node, record) { if (!node) { return; } const comparison = this._compare(record, node.record); if (comparison < 0) { this._delete(node.left, record); } else if (comparison > 0) { this._delete(node.right, record); } else if (!node.deleted) { this._numTombstones++; node.deleted = true; } } *getAllRecords(descending = false) { yield* this.getRecords(EVERYTHING_KEY_RANGE, descending); } *getRecords(keyRange, descending = false) { yield* this._getRecordsForNode(this._root, keyRange, descending); } *_getRecordsForNode(node, keyRange, descending = false) { if (!node) { return; } yield* this._findRecords(node, keyRange, descending); } *_findRecords(node, keyRange, descending = false) { const { lower, upper, lowerOpen, upperOpen } = keyRange; const { record: { key } } = node; const lowerComparison = lower === void 0 ? -1 : cmp_default(lower, key); const upperComparison = upper === void 0 ? 1 : cmp_default(upper, key); const moreLeft = this._keysAreUnique ? lowerComparison < 0 : lowerComparison <= 0; const moreRight = this._keysAreUnique ? upperComparison > 0 : upperComparison >= 0; const moreStart = descending ? moreRight : moreLeft; const moreEnd = descending ? moreLeft : moreRight; const start = descending ? "right" : "left"; const end = descending ? "left" : "right"; const lowerMatches = lowerOpen ? lowerComparison < 0 : lowerComparison <= 0; const upperMatches = upperOpen ? upperComparison > 0 : upperComparison >= 0; if (moreStart && node[start]) { yield* this._findRecords(node[start], keyRange, descending); } if (lowerMatches && upperMatches && !node.deleted) { yield node.record; } if (moreEnd && node[end]) { yield* this._findRecords(node[end], keyRange, descending); } } _onNewNodeInserted(newNode) { this._numNodes++; this._rebalanceTree(newNode); } // based on https://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Insertion _rebalanceTree(node) { let parent = node.parent; do { if (!parent.red) { return; } const grandparent = parent.parent; if (!grandparent) { parent.red = false; return; } const parentIsRightChild = parent === grandparent.right; const uncle = parentIsRightChild ? grandparent.left : grandparent.right; if (!uncle || !uncle.red) { if (node === (parentIsRightChild ? parent.left : parent.right)) { this._rotateSubtree(parent, parentIsRightChild); node = parent; parent = parentIsRightChild ? grandparent.right : grandparent.left; } this._rotateSubtree(grandparent, !parentIsRightChild); parent.red = false; grandparent.red = true; return; } parent.red = false; uncle.red = false; grandparent.red = true; node = grandparent; } while (node.parent ? parent = node.parent : false); } // based on https://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Implementation _rotateSubtree(node, right) { const parent = node.parent; const newRoot = right ? node.left : node.right; const newChild = right ? newRoot.right : newRoot.left; node[right ? "left" : "right"] = newChild; if (newChild) { newChild.parent = node; } newRoot[right ? "right" : "left"] = node; newRoot.parent = parent; node.parent = newRoot; if (parent) { parent[node === parent.right ? "right" : "left"] = newRoot; } else { this._root = newRoot; } return newRoot; } // rebuild the whole tree from scratch, used to avoid too many deletion tombstones accumulating _rebuild(records, parent, red) { const { length } = records; if (!length) { return void 0; } const mid = length >>> 1; const node = { record: records[mid], left: void 0, right: void 0, parent, deleted: false, red }; const left = this._rebuild(records.slice(0, mid), node, !red); const right = this._rebuild(records.slice(mid + 1), node, !red); node.left = left; node.right = right; return node; } }; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/RecordStore.js var RecordStore = class { constructor(keysAreUnique) { this.keysAreUnique = keysAreUnique; this.records = new BinarySearchTree(this.keysAreUnique); } get(key) { const range = key instanceof FDBKeyRange_default ? key : FDBKeyRange_default.only(key); return this.records.getRecords(range).next().value; } /** * Put a new record, and return the overwritten record if an overwrite occurred. * @param newRecord * @param noOverwrite - throw a ConstraintError in case of overwrite */ put(newRecord, noOverwrite = false) { return this.records.put(newRecord, noOverwrite); } delete(key) { const range = key instanceof FDBKeyRange_default ? key : FDBKeyRange_default.only(key); const deletedRecords = [...this.records.getRecords(range)]; for (const record of deletedRecords) { this.records.delete(record); } return deletedRecords; } deleteByValue(key) { const range = key instanceof FDBKeyRange_default ? key : FDBKeyRange_default.only(key); const deletedRecords = []; for (const record of this.records.getAllRecords()) { if (range.includes(record.value)) { this.records.delete(record); deletedRecords.push(record); } } return deletedRecords; } clear() { const deletedRecords = [...this.records.getAllRecords()]; this.records = new BinarySearchTree(this.keysAreUnique); return deletedRecords; } values(range, direction = "next") { const descending = direction === "prev" || direction === "prevunique"; const records = range ? this.records.getRecords(range, descending) : this.records.getAllRecords(descending); return { [Symbol.iterator]: () => { const next = () => { return records.next(); }; if (direction === "next" || direction === "prev") { return { next }; } if (direction === "nextunique") { let previousValue = void 0; return { next: () => { let current2 = next(); while (!current2.done && previousValue !== void 0 && cmp_default(previousValue.key, current2.value.key) === 0) { current2 = next(); } previousValue = current2.value; return current2; } }; } let current = next(); let nextResult = next(); return { next: () => { while (!nextResult.done && cmp_default(current.value.key, nextResult.value.key) === 0) { current = nextResult; nextResult = next(); } const result = current; current = nextResult; nextResult = next(); return result; } }; } }; } size() { return this.records.size(); } }; var RecordStore_default = RecordStore; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/Index.js var Index = class { deleted = false; // Initialized should be used to decide whether to throw an error or abort the versionchange transaction when there is a // constraint initialized = false; constructor(rawObjectStore, name, keyPath, multiEntry, unique) { this.rawObjectStore = rawObjectStore; this.name = name; this.keyPath = keyPath; this.multiEntry = multiEntry; this.unique = unique; this.records = new RecordStore_default(unique); } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-index getKey(key) { const record = this.records.get(key); return record !== void 0 ? record.value : void 0; } // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index getAllKeys(range, count, direction) { if (count === void 0 || count === 0) { count = Infinity; } const records = []; for (const record of this.records.values(range, direction)) { records.push(structuredClone(record.value)); if (records.length >= count) { break; } } return records; } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#index-referenced-value-retrieval-operation getValue(key) { const record = this.records.get(key); return record !== void 0 ? this.rawObjectStore.getValue(record.value) : void 0; } // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index getAllValues(range, count, direction) { if (count === void 0 || count === 0) { count = Infinity; } const records = []; for (const record of this.records.values(range, direction)) { records.push(this.rawObjectStore.getValue(record.value)); if (records.length >= count) { break; } } return records; } // https://www.w3.org/TR/IndexedDB/#dom-idbindex-getallrecords getAllRecords(range, count, direction) { if (count === void 0 || count === 0) { count = Infinity; } const records = []; for (const record of this.records.values(range, direction)) { records.push(new FDBRecord_default(structuredClone(record.key), structuredClone(this.rawObjectStore.getKey(record.value)), this.rawObjectStore.getValue(record.value))); if (records.length >= count) { break; } } return records; } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store (step 7) storeRecord(newRecord) { let indexKey; try { indexKey = extractKey_default(this.keyPath, newRecord.value).key; } catch (err) { if (err.name === "DataError") { return; } throw err; } if (!this.multiEntry || !Array.isArray(indexKey)) { try { valueToKey_default(indexKey); } catch (e) { return; } } else { const keep = []; for (const part of indexKey) { if (keep.indexOf(part) < 0) { try { keep.push(valueToKey_default(part)); } catch (err) { } } } indexKey = keep; } if (!this.multiEntry || !Array.isArray(indexKey)) { if (this.unique) { const existingRecord = this.records.get(indexKey); if (existingRecord) { throw new ConstraintError(); } } } else { if (this.unique) { for (const individualIndexKey of indexKey) { const existingRecord = this.records.get(individualIndexKey); if (existingRecord) { throw new ConstraintError(); } } } } if (!this.multiEntry || !Array.isArray(indexKey)) { this.records.put({ key: indexKey, value: newRecord.key }); } else { for (const individualIndexKey of indexKey) { this.records.put({ key: individualIndexKey, value: newRecord.key }); } } } initialize(transaction) { if (this.initialized) { throw new Error("Index already initialized"); } transaction._execRequestAsync({ operation: () => { try { for (const record of this.rawObjectStore.records.values()) { this.storeRecord(record); } this.initialized = true; } catch (err) { transaction._abort(err.name); } }, source: null }); } count(range) { let count = 0; for (const record of this.records.values(range)) { count += 1; } return count; } }; var Index_default = Index; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/validateKeyPath.js var validateKeyPath = (keyPath, parent) => { if (keyPath !== void 0 && keyPath !== null && typeof keyPath !== "string" && keyPath.toString && (parent === "array" || !Array.isArray(keyPath))) { keyPath = keyPath.toString(); } if (typeof keyPath === "string") { if (keyPath === "" && parent !== "string") { return; } try { const validIdentifierRegex = ( // eslint-disable-next-line no-misleading-character-class /^(?:[$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC])(?:[$0-9A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC])*$/ ); if (keyPath.length >= 1 && validIdentifierRegex.test(keyPath)) { return; } } catch (err) { throw new SyntaxError2(err.message); } if (keyPath.indexOf(" ") >= 0) { throw new SyntaxError2("The keypath argument contains an invalid key path (no spaces allowed)."); } } if (Array.isArray(keyPath) && keyPath.length > 0) { if (parent) { throw new SyntaxError2("The keypath argument contains an invalid key path (nested arrays)."); } for (const part of keyPath) { validateKeyPath(part, "array"); } return; } else if (typeof keyPath === "string" && keyPath.indexOf(".") >= 0) { keyPath = keyPath.split("."); for (const part of keyPath) { validateKeyPath(part, "string"); } return; } throw new SyntaxError2(); }; var validateKeyPath_default = validateKeyPath; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/FDBObjectStore.js var confirmActiveTransaction2 = (objectStore) => { if (objectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } if (objectStore.transaction._state !== "active") { throw new TransactionInactiveError(); } }; var buildRecordAddPut = (objectStore, value, key) => { confirmActiveTransaction2(objectStore); if (objectStore.transaction.mode === "readonly") { throw new ReadOnlyError(); } if (objectStore.keyPath !== null) { if (key !== void 0) { throw new DataError(); } } const clone = cloneValueForInsertion(value, objectStore.transaction); if (objectStore.keyPath !== null) { const tempKey = extractKey_default(objectStore.keyPath, clone); if (tempKey.type === "found") { valueToKey_default(tempKey.key); } else { if (!objectStore._rawObjectStore.keyGenerator) { throw new DataError(); } else if (!canInjectKey_default(objectStore.keyPath, clone)) { throw new DataError(); } } } if (objectStore.keyPath === null && objectStore._rawObjectStore.keyGenerator === null && key === void 0) { throw new DataError(); } if (key !== void 0) { key = valueToKey_default(key); } return { key, value: clone }; }; var FDBObjectStore = class { _indexesCache = /* @__PURE__ */ new Map(); constructor(transaction, rawObjectStore) { this._rawObjectStore = rawObjectStore; this._name = rawObjectStore.name; this.keyPath = getKeyPath(rawObjectStore.keyPath); this.autoIncrement = rawObjectStore.autoIncrement; this.transaction = transaction; this.indexNames = new FakeDOMStringList_default(...Array.from(rawObjectStore.rawIndexes.keys()).sort()); } get name() { return this._name; } // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-name set name(name) { const transaction = this.transaction; if (!transaction.db._runningVersionchangeTransaction) { throw transaction._state === "active" ? new InvalidStateError() : new TransactionInactiveError(); } confirmActiveTransaction2(this); name = String(name); if (name === this._name) { return; } if (this._rawObjectStore.rawDatabase.rawObjectStores.has(name)) { throw new ConstraintError(); } const oldName = this._name; const oldObjectStoreNames = [...transaction.db.objectStoreNames]; this._name = name; this._rawObjectStore.name = name; this.transaction._objectStoresCache.delete(oldName); this.transaction._objectStoresCache.set(name, this); this._rawObjectStore.rawDatabase.rawObjectStores.delete(oldName); this._rawObjectStore.rawDatabase.rawObjectStores.set(name, this._rawObjectStore); transaction.db.objectStoreNames = new FakeDOMStringList_default(...Array.from(this._rawObjectStore.rawDatabase.rawObjectStores.keys()).filter((objectStoreName) => { const objectStore = this._rawObjectStore.rawDatabase.rawObjectStores.get(objectStoreName); return objectStore && !objectStore.deleted; }).sort()); const oldScope = new Set(transaction._scope); const oldTransactionObjectStoreNames = [...transaction.objectStoreNames]; this.transaction._scope.delete(oldName); transaction._scope.add(name); transaction.objectStoreNames = new FakeDOMStringList_default(...Array.from(transaction._scope).sort()); if (!this.transaction._createdObjectStores.has(this._rawObjectStore)) { transaction._rollbackLog.push(() => { this._name = oldName; this._rawObjectStore.name = oldName; this.transaction._objectStoresCache.delete(name); this.transaction._objectStoresCache.set(oldName, this); this._rawObjectStore.rawDatabase.rawObjectStores.delete(name); this._rawObjectStore.rawDatabase.rawObjectStores.set(oldName, this._rawObjectStore); transaction.db.objectStoreNames = new FakeDOMStringList_default(...oldObjectStoreNames); transaction._scope = oldScope; transaction.objectStoreNames = new FakeDOMStringList_default(...oldTransactionObjectStoreNames); }); } } put(value, key) { if (arguments.length === 0) { throw new TypeError(); } const record = buildRecordAddPut(this, value, key); return this.transaction._execRequestAsync({ operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, false, this.transaction._rollbackLog), source: this }); } add(value, key) { if (arguments.length === 0) { throw new TypeError(); } const record = buildRecordAddPut(this, value, key); return this.transaction._execRequestAsync({ operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, true, this.transaction._rollbackLog), source: this }); } delete(key) { if (arguments.length === 0) { throw new TypeError(); } confirmActiveTransaction2(this); if (this.transaction.mode === "readonly") { throw new ReadOnlyError(); } if (!(key instanceof FDBKeyRange_default)) { key = valueToKey_default(key); } return this.transaction._execRequestAsync({ operation: this._rawObjectStore.deleteRecord.bind(this._rawObjectStore, key, this.transaction._rollbackLog), source: this }); } get(key) { if (arguments.length === 0) { throw new TypeError(); } confirmActiveTransaction2(this); if (!(key instanceof FDBKeyRange_default)) { key = valueToKey_default(key); } return this.transaction._execRequestAsync({ operation: this._rawObjectStore.getValue.bind(this._rawObjectStore, key), source: this }); } // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getall getAll(queryOrOptions, count) { const options = extractGetAllOptions_default(queryOrOptions, count, arguments.length); confirmActiveTransaction2(this); const range = valueToKeyRange_default(options.query); return this.transaction._execRequestAsync({ operation: this._rawObjectStore.getAllValues.bind(this._rawObjectStore, range, options.count, options.direction), source: this }); } // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getkey getKey(key) { if (arguments.length === 0) { throw new TypeError(); } confirmActiveTransaction2(this); if (!(key instanceof FDBKeyRange_default)) { key = valueToKey_default(key); } return this.transaction._execRequestAsync({ operation: this._rawObjectStore.getKey.bind(this._rawObjectStore, key), source: this }); } // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getallkeys getAllKeys(queryOrOptions, count) { const options = extractGetAllOptions_default(queryOrOptions, count, arguments.length); confirmActiveTransaction2(this); const range = valueToKeyRange_default(options.query); return this.transaction._execRequestAsync({ operation: this._rawObjectStore.getAllKeys.bind(this._rawObjectStore, range, options.count, options.direction), source: this }); } // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords getAllRecords(options) { let query; let count; let direction; if (options !== void 0) { if (options.query !== void 0) { query = options.query; } if (options.count !== void 0) { count = enforceRange_default(options.count, "unsigned long"); } if (options.direction !== void 0) { direction = options.direction; } } confirmActiveTransaction2(this); const range = valueToKeyRange_default(query); return this.transaction._execRequestAsync({ operation: this._rawObjectStore.getAllRecords.bind(this._rawObjectStore, range, count, direction), source: this }); } clear() { confirmActiveTransaction2(this); if (this.transaction.mode === "readonly") { throw new ReadOnlyError(); } return this.transaction._execRequestAsync({ operation: this._rawObjectStore.clear.bind(this._rawObjectStore, this.transaction._rollbackLog), source: this }); } openCursor(range, direction) { confirmActiveTransaction2(this); if (range === null) { range = void 0; } if (range !== void 0 && !(range instanceof FDBKeyRange_default)) { range = FDBKeyRange_default.only(valueToKey_default(range)); } const request = new FDBRequest_default(); request.source = this; request.transaction = this.transaction; const cursor = new FDBCursorWithValue_default(this, range, direction, request); return this.transaction._execRequestAsync({ operation: cursor._iterate.bind(cursor), request, source: this }); } openKeyCursor(range, direction) { confirmActiveTransaction2(this); if (range === null) { range = void 0; } if (range !== void 0 && !(range instanceof FDBKeyRange_default)) { range = FDBKeyRange_default.only(valueToKey_default(range)); } const request = new FDBRequest_default(); request.source = this; request.transaction = this.transaction; const cursor = new FDBCursor_default(this, range, direction, request, true); return this.transaction._execRequestAsync({ operation: cursor._iterate.bind(cursor), request, source: this }); } // tslint:-next-line max-line-length // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-createIndex-IDBIndex-DOMString-name-DOMString-sequence-DOMString--keyPath-IDBIndexParameters-optionalParameters createIndex(name, keyPath, optionalParameters = {}) { if (arguments.length < 2) { throw new TypeError(); } const multiEntry = optionalParameters.multiEntry !== void 0 ? optionalParameters.multiEntry : false; const unique = optionalParameters.unique !== void 0 ? optionalParameters.unique : false; if (this.transaction.mode !== "versionchange") { throw new InvalidStateError(); } confirmActiveTransaction2(this); if (this.indexNames.contains(name)) { throw new ConstraintError(); } validateKeyPath_default(keyPath); if (Array.isArray(keyPath) && multiEntry) { throw new InvalidAccessError(); } const indexNames = [...this.indexNames]; const index = new Index_default(this._rawObjectStore, name, keyPath, multiEntry, unique); this.indexNames._push(name); this.indexNames._sort(); this.transaction._createdIndexes.add(index); this._rawObjectStore.rawIndexes.set(name, index); index.initialize(this.transaction); this.transaction._rollbackLog.push(() => { index.deleted = true; this.indexNames = new FakeDOMStringList_default(...indexNames); this._rawObjectStore.rawIndexes.delete(index.name); }); return new FDBIndex_default(this, index); } // https://w3c.github.io/IndexedDB/#dom-idbobjectstore-index index(name) { if (arguments.length === 0) { throw new TypeError(); } if (this._rawObjectStore.deleted || this.transaction._state === "finished") { throw new InvalidStateError(); } const index = this._indexesCache.get(name); if (index !== void 0) { return index; } const rawIndex = this._rawObjectStore.rawIndexes.get(name); if (!this.indexNames.contains(name) || rawIndex === void 0) { throw new NotFoundError(); } const index2 = new FDBIndex_default(this, rawIndex); this._indexesCache.set(name, index2); return index2; } deleteIndex(name) { if (arguments.length === 0) { throw new TypeError(); } if (this.transaction.mode !== "versionchange") { throw new InvalidStateError(); } confirmActiveTransaction2(this); const rawIndex = this._rawObjectStore.rawIndexes.get(name); if (rawIndex === void 0) { throw new NotFoundError(); } this.transaction._rollbackLog.push(() => { rawIndex.deleted = false; this._rawObjectStore.rawIndexes.set(rawIndex.name, rawIndex); this.indexNames._push(rawIndex.name); this.indexNames._sort(); }); this.indexNames = new FakeDOMStringList_default(...Array.from(this.indexNames).filter((indexName) => { return indexName !== name; })); rawIndex.deleted = true; this.transaction._execRequestAsync({ operation: () => { const rawIndex2 = this._rawObjectStore.rawIndexes.get(name); if (rawIndex === rawIndex2) { this._rawObjectStore.rawIndexes.delete(name); } }, source: this }); } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-count-IDBRequest-any-key count(key) { confirmActiveTransaction2(this); if (key === null) { key = void 0; } if (key !== void 0 && !(key instanceof FDBKeyRange_default)) { key = FDBKeyRange_default.only(valueToKey_default(key)); } return this.transaction._execRequestAsync({ operation: () => { return this._rawObjectStore.count(key); }, source: this }); } get [Symbol.toStringTag]() { return "IDBObjectStore"; } }; var FDBObjectStore_default = FDBObjectStore; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/FakeEvent.js var Event = class { eventPath = []; NONE = 0; CAPTURING_PHASE = 1; AT_TARGET = 2; BUBBLING_PHASE = 3; // Flags propagationStopped = false; immediatePropagationStopped = false; canceled = false; initialized = true; dispatched = false; target = null; currentTarget = null; eventPhase = 0; defaultPrevented = false; isTrusted = false; timeStamp = Date.now(); constructor(type, eventInitDict = {}) { this.type = type; this.bubbles = eventInitDict.bubbles !== void 0 ? eventInitDict.bubbles : false; this.cancelable = eventInitDict.cancelable !== void 0 ? eventInitDict.cancelable : false; } preventDefault() { if (this.cancelable) { this.canceled = true; } } stopPropagation() { this.propagationStopped = true; } stopImmediatePropagation() { this.propagationStopped = true; this.immediatePropagationStopped = true; } }; var FakeEvent_default = Event; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/scheduling.js function getSetImmediateFromJsdom() { if (typeof navigator !== "undefined" && /jsdom/.test(navigator.userAgent)) { const outerRealmFunctionConstructor = Node.constructor; return new outerRealmFunctionConstructor("return setImmediate")(); } else { return void 0; } } var schedulerPostTask = typeof scheduler !== "undefined" && ((fn) => scheduler.postTask(fn)); var doSetTimeout = (fn) => setTimeout(fn, 0); var queueTask = (fn) => { const setImmediate2 = globalThis.setImmediate || getSetImmediateFromJsdom() || schedulerPostTask || doSetTimeout; setImmediate2(fn); }; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/FDBTransaction.js var prioritizedListenerTypes = ["error", "abort", "complete"]; var FDBTransaction = class extends FakeEventTarget_default { _state = "active"; _started = false; _rollbackLog = []; _objectStoresCache = /* @__PURE__ */ new Map(); _openRequest = null; error = null; onabort = null; oncomplete = null; onerror = null; _prioritizedListeners = /* @__PURE__ */ new Map(); _requests = []; _createdIndexes = /* @__PURE__ */ new Set(); _createdObjectStores = /* @__PURE__ */ new Set(); constructor(storeNames, mode, durability, db2) { super(); this._scope = new Set(storeNames); this.mode = mode; this.durability = durability; this.db = db2; this.objectStoreNames = new FakeDOMStringList_default(...Array.from(this._scope).sort()); for (const type of prioritizedListenerTypes) { this.addEventListener(type, () => { this._prioritizedListeners.get(type)?.(); }); } } // https://w3c.github.io/IndexedDB/#abort-transaction _abort(errName) { for (const f of this._rollbackLog.reverse()) { f(); } if (errName !== null) { const e = new DOMException(void 0, errName); this.error = e; } for (const { request } of this._requests) { if (request.readyState !== "done") { request.readyState = "done"; if (request.source) { queueTask(() => { request.result = void 0; request.error = new AbortError(); const event = new FakeEvent_default("error", { bubbles: true, cancelable: true }); event.eventPath = [this.db, this]; try { request.dispatchEvent(event); } catch (_err) { if (this._state === "active") { this._abort("AbortError"); } } }); } } } queueTask(() => { const isUpgradeTransaction = this.mode === "versionchange"; if (isUpgradeTransaction) { this.db._rawDatabase.connections = this.db._rawDatabase.connections.filter((connection) => !connection._rawDatabase.transactions.includes(this)); } const event = new FakeEvent_default("abort", { bubbles: true, cancelable: false }); event.eventPath = [this.db]; this.dispatchEvent(event); if (isUpgradeTransaction) { const request = this._openRequest; request.transaction = null; request.result = void 0; } }); this._state = "finished"; } abort() { if (this._state === "committing" || this._state === "finished") { throw new InvalidStateError(); } this._state = "active"; this._abort(null); } // http://w3c.github.io/IndexedDB/#dom-idbtransaction-objectstore objectStore(name) { if (this._state !== "active") { throw new InvalidStateError(); } const objectStore = this._objectStoresCache.get(name); if (objectStore !== void 0) { return objectStore; } const rawObjectStore = this.db._rawDatabase.rawObjectStores.get(name); if (!this._scope.has(name) || rawObjectStore === void 0) { throw new NotFoundError(); } const objectStore2 = new FDBObjectStore_default(this, rawObjectStore); this._objectStoresCache.set(name, objectStore2); return objectStore2; } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-asynchronously-executing-a-request _execRequestAsync(obj) { const source = obj.source; const operation = obj.operation; let request = Object.hasOwn(obj, "request") ? obj.request : null; if (this._state !== "active") { throw new TransactionInactiveError(); } if (!request) { if (!source) { request = new FDBRequest_default(); } else { request = new FDBRequest_default(); request.source = source; request.transaction = source.transaction; } } this._requests.push({ operation, request }); return request; } _start() { this._started = true; let operation; let request; while (this._requests.length > 0) { const r = this._requests.shift(); if (r && r.request.readyState !== "done") { request = r.request; operation = r.operation; break; } } if (request && operation) { if (!request.source) { operation(); } else { let defaultAction; let event; try { const result = operation(); request.readyState = "done"; request.result = result; request.error = void 0; if (this._state === "inactive") { this._state = "active"; } event = new FakeEvent_default("success", { bubbles: false, cancelable: false }); } catch (err) { request.readyState = "done"; request.result = void 0; request.error = err; if (this._state === "inactive") { this._state = "active"; } event = new FakeEvent_default("error", { bubbles: true, cancelable: true }); defaultAction = this._abort.bind(this, err.name); } try { event.eventPath = [this.db, this]; request.dispatchEvent(event); } catch (_err) { if (this._state === "active") { this._abort("AbortError"); defaultAction = void 0; } } if (!event.canceled) { if (defaultAction) { defaultAction(); } } } queueTask(this._start.bind(this)); return; } if (this._state !== "finished") { this._state = "finished"; if (!this.error) { const event = new FakeEvent_default("complete"); this.dispatchEvent(event); } } } commit() { if (this._state !== "active") { throw new InvalidStateError(); } this._state = "committing"; } get [Symbol.toStringTag]() { return "IDBTransaction"; } }; var FDBTransaction_default = FDBTransaction; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/KeyGenerator.js var MAX_KEY = 9007199254740992; var KeyGenerator = class { // This is kind of wrong. Should start at 1 and increment only after record is saved num = 0; next() { if (this.num >= MAX_KEY) { throw new ConstraintError(); } this.num += 1; return this.num; } // https://w3c.github.io/IndexedDB/#possibly-update-the-key-generator setIfLarger(num) { const value = Math.floor(Math.min(num, MAX_KEY)) - 1; if (value >= this.num) { this.num = value + 1; } } }; var KeyGenerator_default = KeyGenerator; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/ObjectStore.js var ObjectStore = class { deleted = false; records = new RecordStore_default(true); rawIndexes = /* @__PURE__ */ new Map(); constructor(rawDatabase, name, keyPath, autoIncrement) { this.rawDatabase = rawDatabase; this.keyGenerator = autoIncrement === true ? new KeyGenerator_default() : null; this.deleted = false; this.name = name; this.keyPath = keyPath; this.autoIncrement = autoIncrement; } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store getKey(key) { const record = this.records.get(key); return record !== void 0 ? structuredClone(record.key) : void 0; } // http://w3c.github.io/IndexedDB/#retrieve-multiple-keys-from-an-object-store getAllKeys(range, count, direction) { if (count === void 0 || count === 0) { count = Infinity; } const records = []; for (const record of this.records.values(range, direction)) { records.push(structuredClone(record.key)); if (records.length >= count) { break; } } return records; } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store getValue(key) { const record = this.records.get(key); return record !== void 0 ? structuredClone(record.value) : void 0; } // http://w3c.github.io/IndexedDB/#retrieve-multiple-values-from-an-object-store getAllValues(range, count, direction) { if (count === void 0 || count === 0) { count = Infinity; } const records = []; for (const record of this.records.values(range, direction)) { records.push(structuredClone(record.value)); if (records.length >= count) { break; } } return records; } // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords getAllRecords(range, count, direction) { if (count === void 0 || count === 0) { count = Infinity; } const records = []; for (const record of this.records.values(range, direction)) { records.push(new FDBRecord_default(structuredClone(record.key), structuredClone(record.key), structuredClone(record.value))); if (records.length >= count) { break; } } return records; } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store storeRecord(newRecord, noOverwrite, rollbackLog) { if (this.keyPath !== null) { const key = extractKey_default(this.keyPath, newRecord.value).key; if (key !== void 0) { newRecord.key = key; } } const rollbackLogForThisOperation = []; if (this.keyGenerator !== null && newRecord.key === void 0) { let rolledBack2 = false; const keyGeneratorBefore = this.keyGenerator.num; const rollbackKeyGenerator = () => { if (rolledBack2) { return; } rolledBack2 = true; if (this.keyGenerator) { this.keyGenerator.num = keyGeneratorBefore; } }; rollbackLogForThisOperation.push(rollbackKeyGenerator); if (rollbackLog) { rollbackLog.push(rollbackKeyGenerator); } newRecord.key = this.keyGenerator.next(); if (this.keyPath !== null) { if (Array.isArray(this.keyPath)) { throw new Error("Cannot have an array key path in an object store with a key generator"); } let remainingKeyPath = this.keyPath; let object = newRecord.value; let identifier; let i = 0; while (i >= 0) { if (typeof object !== "object") { throw new DataError(); } i = remainingKeyPath.indexOf("."); if (i >= 0) { identifier = remainingKeyPath.slice(0, i); remainingKeyPath = remainingKeyPath.slice(i + 1); if (!Object.hasOwn(object, identifier)) { Object.defineProperty(object, identifier, { configurable: true, enumerable: true, writable: true, value: {} }); } object = object[identifier]; } } identifier = remainingKeyPath; Object.defineProperty(object, identifier, { configurable: true, enumerable: true, writable: true, value: newRecord.key }); } } else if (this.keyGenerator !== null && typeof newRecord.key === "number") { this.keyGenerator.setIfLarger(newRecord.key); } const existingRecord = this.records.put(newRecord, noOverwrite); let rolledBack = false; const rollbackStoreRecord = () => { if (rolledBack) { return; } rolledBack = true; if (existingRecord) { this.storeRecord(existingRecord, false); } else { this.deleteRecord(newRecord.key); } }; rollbackLogForThisOperation.push(rollbackStoreRecord); if (rollbackLog) { rollbackLog.push(rollbackStoreRecord); } if (existingRecord) { for (const rawIndex of this.rawIndexes.values()) { rawIndex.records.deleteByValue(newRecord.key); } } try { for (const rawIndex of this.rawIndexes.values()) { if (rawIndex.initialized) { rawIndex.storeRecord(newRecord); } } } catch (err) { if (err.name === "ConstraintError") { for (const rollback of rollbackLogForThisOperation) { rollback(); } } throw err; } return newRecord.key; } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-deleting-records-from-an-object-store deleteRecord(key, rollbackLog) { const deletedRecords = this.records.delete(key); if (rollbackLog) { for (const record of deletedRecords) { rollbackLog.push(() => { this.storeRecord(record, true); }); } } for (const rawIndex of this.rawIndexes.values()) { rawIndex.records.deleteByValue(key); } } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-clearing-an-object-store clear(rollbackLog) { const deletedRecords = this.records.clear(); if (rollbackLog) { for (const record of deletedRecords) { rollbackLog.push(() => { this.storeRecord(record, true); }); } } for (const rawIndex of this.rawIndexes.values()) { rawIndex.records.clear(); } } count(range) { if (range === void 0 || range.lower === void 0 && range.upper === void 0) { return this.records.size(); } let count = 0; for (const record of this.records.values(range)) { count += 1; } return count; } }; var ObjectStore_default = ObjectStore; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/closeConnection.js var closeConnection = (connection, forced = false) => { connection._closePending = true; const transactionsComplete = connection._rawDatabase.transactions.every((transaction) => { return transaction._state === "finished"; }); if (transactionsComplete) { connection._closed = true; connection._rawDatabase.connections = connection._rawDatabase.connections.filter((otherConnection) => { return connection !== otherConnection; }); if (forced) { const event = new FakeEvent_default("close", { bubbles: false, cancelable: false }); event.eventPath = []; connection.dispatchEvent(event); } } else { queueTask(() => { closeConnection(connection, forced); }); } }; var closeConnection_default = closeConnection; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/FDBDatabase.js var confirmActiveVersionchangeTransaction = (database) => { let transaction; if (database._runningVersionchangeTransaction) { transaction = database._rawDatabase.transactions.findLast((tx) => { return tx.mode === "versionchange"; }); } if (!transaction) { throw new InvalidStateError(); } if (transaction._state !== "active") { throw new TransactionInactiveError(); } return transaction; }; var FDBDatabase = class extends FakeEventTarget_default { _closePending = false; _closed = false; _runningVersionchangeTransaction = false; constructor(rawDatabase) { super(); this._rawDatabase = rawDatabase; this._rawDatabase.connections.push(this); this.name = rawDatabase.name; this.version = rawDatabase.version; this.objectStoreNames = new FakeDOMStringList_default(...Array.from(rawDatabase.rawObjectStores.keys()).sort()); } // http://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore createObjectStore(name, options = {}) { if (name === void 0) { throw new TypeError(); } const transaction = confirmActiveVersionchangeTransaction(this); const keyPath = options !== null && options.keyPath !== void 0 ? options.keyPath : null; const autoIncrement = options !== null && options.autoIncrement !== void 0 ? options.autoIncrement : false; if (keyPath !== null) { validateKeyPath_default(keyPath); } if (this._rawDatabase.rawObjectStores.has(name)) { throw new ConstraintError(); } if (autoIncrement && (keyPath === "" || Array.isArray(keyPath))) { throw new InvalidAccessError(); } const objectStoreNames = [...this.objectStoreNames]; const transactionObjectStoreNames = [...transaction.objectStoreNames]; const rawObjectStore = new ObjectStore_default(this._rawDatabase, name, keyPath, autoIncrement); this.objectStoreNames._push(name); this.objectStoreNames._sort(); transaction._scope.add(name); transaction._createdObjectStores.add(rawObjectStore); this._rawDatabase.rawObjectStores.set(name, rawObjectStore); transaction.objectStoreNames = new FakeDOMStringList_default(...this.objectStoreNames); transaction._rollbackLog.push(() => { rawObjectStore.deleted = true; this.objectStoreNames = new FakeDOMStringList_default(...objectStoreNames); transaction.objectStoreNames = new FakeDOMStringList_default(...transactionObjectStoreNames); transaction._scope.delete(rawObjectStore.name); this._rawDatabase.rawObjectStores.delete(rawObjectStore.name); }); return transaction.objectStore(name); } // https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-deleteobjectstore deleteObjectStore(name) { if (name === void 0) { throw new TypeError(); } const transaction = confirmActiveVersionchangeTransaction(this); const store = this._rawDatabase.rawObjectStores.get(name); if (store === void 0) { throw new NotFoundError(); } this.objectStoreNames = new FakeDOMStringList_default(...Array.from(this.objectStoreNames).filter((objectStoreName) => { return objectStoreName !== name; })); transaction.objectStoreNames = new FakeDOMStringList_default(...this.objectStoreNames); const objectStore = transaction._objectStoresCache.get(name); let prevIndexNames; if (objectStore) { prevIndexNames = [...objectStore.indexNames]; objectStore.indexNames = new FakeDOMStringList_default(); } transaction._rollbackLog.push(() => { store.deleted = false; this._rawDatabase.rawObjectStores.set(store.name, store); this.objectStoreNames._push(store.name); transaction.objectStoreNames._push(store.name); this.objectStoreNames._sort(); if (objectStore && prevIndexNames) { objectStore.indexNames = new FakeDOMStringList_default(...prevIndexNames); } }); store.deleted = true; this._rawDatabase.rawObjectStores.delete(name); transaction._objectStoresCache.delete(name); } transaction(storeNames, mode, options) { mode = mode !== void 0 ? mode : "readonly"; if (mode !== "readonly" && mode !== "readwrite" && mode !== "versionchange") { throw new TypeError("Invalid mode: " + mode); } const hasActiveVersionchange = this._rawDatabase.transactions.some((transaction) => { return transaction._state === "active" && transaction.mode === "versionchange" && transaction.db === this; }); if (hasActiveVersionchange) { throw new InvalidStateError(); } if (this._closePending) { throw new InvalidStateError(); } if (!Array.isArray(storeNames)) { storeNames = [storeNames]; } if (storeNames.length === 0 && mode !== "versionchange") { throw new InvalidAccessError(); } for (const storeName of storeNames) { if (!this.objectStoreNames.contains(storeName)) { throw new NotFoundError("No objectStore named " + storeName + " in this database"); } } const durability = options?.durability ?? "default"; if (durability !== "default" && durability !== "strict" && durability !== "relaxed") { throw new TypeError( // based on Firefox's error message `'${durability}' (value of 'durability' member of IDBTransactionOptions) is not a valid value for enumeration IDBTransactionDurability` ); } const tx = new FDBTransaction_default(storeNames, mode, durability, this); this._rawDatabase.transactions.push(tx); this._rawDatabase.processTransactions(); return tx; } close() { closeConnection_default(this); } get [Symbol.toStringTag]() { return "IDBDatabase"; } }; var FDBDatabase_default = FDBDatabase; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/FDBOpenDBRequest.js var FDBOpenDBRequest = class extends FDBRequest_default { onupgradeneeded = null; onblocked = null; get [Symbol.toStringTag]() { return "IDBOpenDBRequest"; } }; var FDBOpenDBRequest_default = FDBOpenDBRequest; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/FDBVersionChangeEvent.js var FDBVersionChangeEvent = class extends FakeEvent_default { constructor(type, parameters = {}) { super(type); this.newVersion = parameters.newVersion !== void 0 ? parameters.newVersion : null; this.oldVersion = parameters.oldVersion !== void 0 ? parameters.oldVersion : 0; } get [Symbol.toStringTag]() { return "IDBVersionChangeEvent"; } }; var FDBVersionChangeEvent_default = FDBVersionChangeEvent; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/intersection.js function intersection(set1, set2) { if ("intersection" in set1) { return set1.intersection(set2); } return new Set([...set1].filter((item) => set2.has(item))); } // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/Database.js var Database = class { transactions = []; rawObjectStores = /* @__PURE__ */ new Map(); connections = []; constructor(name, version) { this.name = name; this.version = version; this.processTransactions = this.processTransactions.bind(this); } processTransactions() { queueTask(() => { const running = this.transactions.filter((transaction) => transaction._started && transaction._state !== "finished"); const waiting = this.transactions.filter((transaction) => !transaction._started && transaction._state !== "finished"); const next = waiting.find((transaction, i) => { const anyRunning = running.some((other) => !(transaction.mode === "readonly" && other.mode === "readonly") && intersection(other._scope, transaction._scope).size > 0); if (anyRunning) { return false; } const anyWaiting = waiting.slice(0, i).some((other) => intersection(other._scope, transaction._scope).size > 0); return !anyWaiting; }); if (next) { next.addEventListener("complete", this.processTransactions); next.addEventListener("abort", this.processTransactions); next._start(); } }); } }; var Database_default = Database; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/lib/validateRequiredArguments.js function validateRequiredArguments(numArguments, expectedNumArguments, methodName) { if (numArguments < expectedNumArguments) { throw new TypeError(`${methodName}: At least ${expectedNumArguments} ${expectedNumArguments === 1 ? "argument" : "arguments"} required, but only ${arguments.length} passed`); } } // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/FDBFactory.js var runTaskInConnectionQueue = (connectionQueues, name, task) => { const queue = connectionQueues.get(name) ?? Promise.resolve(); connectionQueues.set(name, queue.then(task)); }; var waitForOthersClosedDelete = (databases, name, openDatabases, cb) => { const anyOpen = openDatabases.some((openDatabase2) => { return !openDatabase2._closed && !openDatabase2._closePending; }); if (anyOpen) { queueTask(() => waitForOthersClosedDelete(databases, name, openDatabases, cb)); return; } databases.delete(name); cb(null); }; var deleteDatabase = (databases, connectionQueues, name, request, cb) => { const deleteDBTask = () => { return new Promise((resolve) => { const db2 = databases.get(name); const oldVersion = db2 !== void 0 ? db2.version : 0; const onComplete = (err) => { try { if (err) { cb(err); } else { cb(null, oldVersion); } } finally { resolve(); } }; try { const db3 = databases.get(name); if (db3 === void 0) { onComplete(null); return; } const openConnections = db3.connections.filter((connection) => { return !connection._closed; }); for (const openDatabase2 of openConnections) { if (!openDatabase2._closePending) { queueTask(() => { const event = new FDBVersionChangeEvent_default("versionchange", { newVersion: null, oldVersion: db3.version }); openDatabase2.dispatchEvent(event); }); } } queueTask(() => { const anyOpen = openConnections.some((openDatabase3) => { return !openDatabase3._closed && !openDatabase3._closePending; }); if (anyOpen) { queueTask(() => { const event = new FDBVersionChangeEvent_default("blocked", { newVersion: null, oldVersion: db3.version }); request.dispatchEvent(event); }); } waitForOthersClosedDelete(databases, name, openConnections, onComplete); }); } catch (err) { onComplete(err); } }); }; runTaskInConnectionQueue(connectionQueues, name, deleteDBTask); }; var runVersionchangeTransaction = (connection, version, request, cb) => { connection._runningVersionchangeTransaction = true; const oldVersion = connection._oldVersion = connection.version; const openConnections = connection._rawDatabase.connections.filter((otherDatabase) => { return connection !== otherDatabase; }); for (const openDatabase2 of openConnections) { if (!openDatabase2._closed && !openDatabase2._closePending) { queueTask(() => { const event = new FDBVersionChangeEvent_default("versionchange", { newVersion: version, oldVersion }); openDatabase2.dispatchEvent(event); }); } } queueTask(() => { const anyOpen = openConnections.some((openDatabase3) => { return !openDatabase3._closed && !openDatabase3._closePending; }); if (anyOpen) { queueTask(() => { const event = new FDBVersionChangeEvent_default("blocked", { newVersion: version, oldVersion }); request.dispatchEvent(event); }); } const waitForOthersClosed = () => { const anyOpen2 = openConnections.some((openDatabase2) => { return !openDatabase2._closed && !openDatabase2._closePending; }); if (anyOpen2) { queueTask(waitForOthersClosed); return; } connection._rawDatabase.version = version; connection.version = version; const transaction = connection.transaction(Array.from(connection.objectStoreNames), "versionchange"); transaction._openRequest = request; request.result = connection; request.readyState = "done"; request.transaction = transaction; transaction._rollbackLog.push(() => { connection._rawDatabase.version = oldVersion; connection.version = oldVersion; }); transaction._state = "active"; const event = new FDBVersionChangeEvent_default("upgradeneeded", { newVersion: version, oldVersion }); let didThrow = false; try { request.dispatchEvent(event); } catch (_err) { didThrow = true; } const concludeUpgrade = () => { if (transaction._state === "active") { transaction._state = "inactive"; if (didThrow) { transaction._abort("AbortError"); } } }; if (didThrow) { concludeUpgrade(); } else { queueTask(concludeUpgrade); } transaction._prioritizedListeners.set("error", () => { connection._runningVersionchangeTransaction = false; connection._oldVersion = void 0; }); transaction._prioritizedListeners.set("abort", () => { connection._runningVersionchangeTransaction = false; connection._oldVersion = void 0; queueTask(() => { request.transaction = null; cb(new AbortError()); }); }); transaction._prioritizedListeners.set("complete", () => { connection._runningVersionchangeTransaction = false; connection._oldVersion = void 0; queueTask(() => { request.transaction = null; if (connection._closePending) { cb(new AbortError()); } else { cb(null); } }); }); }; waitForOthersClosed(); }); }; var openDatabase = (databases, connectionQueues, name, version, request, cb) => { const openDBTask = () => { return new Promise((resolve) => { const onComplete = (err) => { try { if (err) { cb(err); } else { cb(null, connection); } } finally { resolve(); } }; let db2 = databases.get(name); if (db2 === void 0) { db2 = new Database_default(name, 0); databases.set(name, db2); } if (version === void 0) { version = db2.version !== 0 ? db2.version : 1; } if (db2.version > version) { return onComplete(new VersionError()); } const connection = new FDBDatabase_default(db2); if (db2.version < version) { runVersionchangeTransaction(connection, version, request, (err) => { onComplete(err); }); } else { onComplete(null); } }); }; runTaskInConnectionQueue(connectionQueues, name, openDBTask); }; var FDBFactory = class { _databases = /* @__PURE__ */ new Map(); // https://w3c.github.io/IndexedDB/#connection-queue _connectionQueues = /* @__PURE__ */ new Map(); // promise chain as lightweight FIFO task queue // https://w3c.github.io/IndexedDB/#dom-idbfactory-cmp cmp(first, second) { validateRequiredArguments(arguments.length, 2, "IDBFactory.cmp"); return cmp_default(first, second); } // https://w3c.github.io/IndexedDB/#dom-idbfactory-deletedatabase deleteDatabase(name) { validateRequiredArguments(arguments.length, 1, "IDBFactory.deleteDatabase"); const request = new FDBOpenDBRequest_default(); request.source = null; queueTask(() => { deleteDatabase(this._databases, this._connectionQueues, name, request, (err, oldVersion) => { if (err) { request.error = new DOMException(err.message, err.name); request.readyState = "done"; const event = new FakeEvent_default("error", { bubbles: true, cancelable: true }); event.eventPath = []; request.dispatchEvent(event); return; } request.result = void 0; request.readyState = "done"; const event2 = new FDBVersionChangeEvent_default("success", { newVersion: null, oldVersion }); request.dispatchEvent(event2); }); }); return request; } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBFactory-open-IDBOpenDBRequest-DOMString-name-unsigned-long-long-version open(name, version) { validateRequiredArguments(arguments.length, 1, "IDBFactory.open"); if (arguments.length > 1 && version !== void 0) { version = enforceRange_default(version, "MAX_SAFE_INTEGER"); } if (version === 0) { throw new TypeError("Database version cannot be 0"); } const request = new FDBOpenDBRequest_default(); request.source = null; queueTask(() => { openDatabase(this._databases, this._connectionQueues, name, version, request, (err, connection) => { if (err) { request.result = void 0; request.readyState = "done"; request.error = new DOMException(err.message, err.name); const event = new FakeEvent_default("error", { bubbles: true, cancelable: true }); event.eventPath = []; request.dispatchEvent(event); return; } request.result = connection; request.readyState = "done"; const event2 = new FakeEvent_default("success"); event2.eventPath = []; request.dispatchEvent(event2); }); }); return request; } // https://w3c.github.io/IndexedDB/#dom-idbfactory-databases databases() { return Promise.resolve(Array.from(this._databases.entries(), ([name, database]) => { const activeVersionChangeConnection = database.connections.find((connection) => connection._runningVersionchangeTransaction); const version = activeVersionChangeConnection ? activeVersionChangeConnection._oldVersion : database.version; return { name, version }; }).filter(({ version }) => { return version > 0; })); } get [Symbol.toStringTag]() { return "IDBFactory"; } }; var FDBFactory_default = FDBFactory; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/build/esm/fakeIndexedDB.js var fakeIndexedDB = new FDBFactory_default(); var fakeIndexedDB_default = fakeIndexedDB; // intern-log/node_modules/.pnpm/fake-indexeddb@6.2.5/node_modules/fake-indexeddb/auto/index.mjs var globalVar = typeof window !== "undefined" ? window : typeof WorkerGlobalScope !== "undefined" ? self : typeof global !== "undefined" ? global : Function("return this;")(); var createPropertyDescriptor = (value) => { return { value, enumerable: false, configurable: true, writable: true }; }; Object.defineProperties(globalVar, { indexedDB: createPropertyDescriptor(fakeIndexedDB_default), IDBCursor: createPropertyDescriptor(FDBCursor_default), IDBCursorWithValue: createPropertyDescriptor(FDBCursorWithValue_default), IDBDatabase: createPropertyDescriptor(FDBDatabase_default), IDBFactory: createPropertyDescriptor(FDBFactory_default), IDBIndex: createPropertyDescriptor(FDBIndex_default), IDBKeyRange: createPropertyDescriptor(FDBKeyRange_default), IDBObjectStore: createPropertyDescriptor(FDBObjectStore_default), IDBOpenDBRequest: createPropertyDescriptor(FDBOpenDBRequest_default), IDBRecord: createPropertyDescriptor(FDBRecord_default), IDBRequest: createPropertyDescriptor(FDBRequest_default), IDBTransaction: createPropertyDescriptor(FDBTransaction_default), IDBVersionChangeEvent: createPropertyDescriptor(FDBVersionChangeEvent_default) }); // intern-log/repro/sync-repro.ts init_schema(); async function main() { bindDatabase(new WorklogDB("repro_db")); const mod = await Promise.resolve().then(() => (init_schema(), schema_exports)); const db2 = mod.db; await db2.project.bulkAdd([{ name: "P1", archived: 0, created_at: "2025-01-01T00:00:00" }]); await db2.work_log.bulkAdd([{ date: "2025-01-02", created_at: "2025-01-02T00:00:00" }]); await db2.setting.bulkAdd([ { key: "work_start", value: "09:00" }, { key: "sync_base_url", value: "http://127.0.0.1:3780" } ]); await db2.attendance.bulkAdd([{ date: "2025-01-02", clock_in_at: "2025-01-02T09:00:00", clock_out_at: "2025-01-02T18:00:00", kind: "normal", note: null, created_at: "2025-01-02T09:00:00" }]); await db2.table("transaction").bulkAdd([{ type: "expense", category: "\u9910\u996E", amount: 2500, date: "2025-01-02", note: "lunch", reimbursable: 1, reimbursed: 0, created_at: "2025-01-02T12:00:00" }]); const engine = await Promise.resolve().then(() => (init_engine(), engine_exports)); engine.enableRealtimeSync(); await fetch("http://127.0.0.1:3780/api/auth/register", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username: "rt", password: "rt123456" }) }).catch(() => { }); const r1 = await engine.runSync({ baseUrl: "http://127.0.0.1:3780", username: "rt", password: "rt123456" }); console.log("SYNC1 OK:", JSON.stringify(r1)); await db2.table("log_item").add({ work_log_id: 1, content: "\u5B9E\u65F6\u6D4B\u8BD5\u6761\u76EE", project_id: null, category: "dev", minutes: null, is_milestone: 0, needs_followup: 0, takeaway: null, remark: null, sort_order: 0, created_at: "2025-01-02T10:00:00" }); await new Promise((r) => setTimeout(r, 4500)); console.log("REALTIME PATH DONE"); const r2 = await engine.runSync({ baseUrl: "http://127.0.0.1:3780", username: "rt", password: "rt123456" }); console.log("SYNC2 OK:", JSON.stringify(r2)); process.exit(0); } main().catch((e) => { console.error("FAILED:", e && (e.stack || e.message) || e); process.exit(1); });