@firesystem/indexeddb
Version:
IndexedDB implementation of Virtual File System
1,303 lines (1,290 loc) • 286 kB
JavaScript
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/errors.js
var require_errors = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/errors.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.VersionError = exports2.TransactionInactiveError = exports2.ReadOnlyError = exports2.NotFoundError = exports2.InvalidStateError = exports2.InvalidAccessError = exports2.DataError = exports2.DataCloneError = exports2.ConstraintError = exports2.AbortError = void 0;
var messages2 = {
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.",
VersionError: "An attempt was made to open a database using a lower version than the existing version."
};
var AbortError2 = class extends DOMException {
constructor(message = messages2.AbortError) {
super(message, "AbortError");
}
};
exports2.AbortError = AbortError2;
var ConstraintError2 = class extends DOMException {
constructor(message = messages2.ConstraintError) {
super(message, "ConstraintError");
}
};
exports2.ConstraintError = ConstraintError2;
var DataCloneError = class extends DOMException {
constructor(message = messages2.DataCloneError) {
super(message, "DataCloneError");
}
};
exports2.DataCloneError = DataCloneError;
var DataError2 = class extends DOMException {
constructor(message = messages2.DataError) {
super(message, "DataError");
}
};
exports2.DataError = DataError2;
var InvalidAccessError2 = class extends DOMException {
constructor(message = messages2.InvalidAccessError) {
super(message, "InvalidAccessError");
}
};
exports2.InvalidAccessError = InvalidAccessError2;
var InvalidStateError2 = class extends DOMException {
constructor(message = messages2.InvalidStateError) {
super(message, "InvalidStateError");
}
};
exports2.InvalidStateError = InvalidStateError2;
var NotFoundError2 = class extends DOMException {
constructor(message = messages2.NotFoundError) {
super(message, "NotFoundError");
}
};
exports2.NotFoundError = NotFoundError2;
var ReadOnlyError2 = class extends DOMException {
constructor(message = messages2.ReadOnlyError) {
super(message, "ReadOnlyError");
}
};
exports2.ReadOnlyError = ReadOnlyError2;
var TransactionInactiveError2 = class extends DOMException {
constructor(message = messages2.TransactionInactiveError) {
super(message, "TransactionInactiveError");
}
};
exports2.TransactionInactiveError = TransactionInactiveError2;
var VersionError2 = class extends DOMException {
constructor(message = messages2.VersionError) {
super(message, "VersionError");
}
};
exports2.VersionError = VersionError2;
}
});
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/valueToKey.js
var require_valueToKey = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/valueToKey.js"(exports2, module2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.default = void 0;
var _errors = require_errors();
var valueToKey2 = (input, seen) => {
if (typeof input === "number") {
if (isNaN(input)) {
throw new _errors.DataError();
}
return input;
} else if (Object.prototype.toString.call(input) === "[object Date]") {
const ms = input.valueOf();
if (isNaN(ms)) {
throw new _errors.DataError();
}
return new Date(ms);
} else if (typeof input === "string") {
return input;
} else if (input instanceof ArrayBuffer || typeof SharedArrayBuffer !== "undefined" && input instanceof SharedArrayBuffer || typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView && ArrayBuffer.isView(input)) {
let arrayBuffer;
let offset = 0;
let length = 0;
if (input instanceof ArrayBuffer || typeof SharedArrayBuffer !== "undefined" && input instanceof SharedArrayBuffer) {
arrayBuffer = input;
length = input.byteLength;
} else {
arrayBuffer = input.buffer;
offset = input.byteOffset;
length = input.byteLength;
}
if (arrayBuffer.detached) {
return new ArrayBuffer(0);
}
return arrayBuffer.slice(offset, offset + length);
} else if (Array.isArray(input)) {
if (seen === void 0) {
seen = /* @__PURE__ */ new Set();
} else if (seen.has(input)) {
throw new _errors.DataError();
}
seen.add(input);
const keys = [];
for (let i = 0; i < input.length; i++) {
const hop = Object.hasOwn(input, i);
if (!hop) {
throw new _errors.DataError();
}
const entry = input[i];
const key = valueToKey2(entry, seen);
keys.push(key);
}
return keys;
} else {
throw new _errors.DataError();
}
};
var _default = exports2.default = valueToKey2;
module2.exports = exports2.default;
}
});
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/cmp.js
var require_cmp = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/cmp.js"(exports2, module2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.default = void 0;
var _errors = require_errors();
var _valueToKey = _interopRequireDefault(require_valueToKey());
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
var getType2 = (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 _errors.DataError();
};
var cmp2 = (first, second) => {
if (second === void 0) {
throw new TypeError();
}
first = (0, _valueToKey.default)(first);
second = (0, _valueToKey.default)(second);
const t1 = getType2(first);
const t2 = getType2(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 = cmp2(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 _default = exports2.default = cmp2;
module2.exports = exports2.default;
}
});
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBKeyRange.js
var require_FDBKeyRange = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBKeyRange.js"(exports2, module2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.default = void 0;
var _cmp = _interopRequireDefault(require_cmp());
var _errors = require_errors();
var _valueToKey = _interopRequireDefault(require_valueToKey());
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
var FDBKeyRange2 = class _FDBKeyRange {
static only(value) {
if (arguments.length === 0) {
throw new TypeError();
}
value = (0, _valueToKey.default)(value);
return new _FDBKeyRange(value, value, false, false);
}
static lowerBound(lower, open = false) {
if (arguments.length === 0) {
throw new TypeError();
}
lower = (0, _valueToKey.default)(lower);
return new _FDBKeyRange(lower, void 0, open, true);
}
static upperBound(upper, open = false) {
if (arguments.length === 0) {
throw new TypeError();
}
upper = (0, _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 = (0, _cmp.default)(lower, upper);
if (cmpResult === 1 || cmpResult === 0 && (lowerOpen || upperOpen)) {
throw new _errors.DataError();
}
lower = (0, _valueToKey.default)(lower);
upper = (0, _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 = (0, _valueToKey.default)(key);
if (this.lower !== void 0) {
const cmpResult = (0, _cmp.default)(this.lower, key);
if (cmpResult === 1 || cmpResult === 0 && this.lowerOpen) {
return false;
}
}
if (this.upper !== void 0) {
const cmpResult = (0, _cmp.default)(this.upper, key);
if (cmpResult === -1 || cmpResult === 0 && this.upperOpen) {
return false;
}
}
return true;
}
toString() {
return "[object IDBKeyRange]";
}
};
var _default = exports2.default = FDBKeyRange2;
module2.exports = exports2.default;
}
});
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/extractKey.js
var require_extractKey = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/extractKey.js"(exports2, module2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.default = void 0;
var _valueToKey = _interopRequireDefault(require_valueToKey());
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
var extractKey2 = (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 = extractKey2(item, value).key;
result.push((0, _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;
}
if (object === void 0 || object === null || !Object.hasOwn(object, identifier)) {
return {
type: "notFound"
};
}
object = object[identifier];
}
return {
type: "found",
key: object
};
};
var _default = exports2.default = extractKey2;
module2.exports = exports2.default;
}
});
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBCursor.js
var require_FDBCursor = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBCursor.js"(exports2, module2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.default = void 0;
var _FDBKeyRange = _interopRequireDefault(require_FDBKeyRange());
var _FDBObjectStore = _interopRequireDefault(require_FDBObjectStore());
var _cmp = _interopRequireDefault(require_cmp());
var _errors = require_errors();
var _extractKey = _interopRequireDefault(require_extractKey());
var _valueToKey = _interopRequireDefault(require_valueToKey());
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
var getEffectiveObjectStore2 = (cursor) => {
if (cursor.source instanceof _FDBObjectStore.default) {
return cursor.source;
}
return cursor.source.objectStore;
};
var makeKeyRange2 = (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 || (0, _cmp.default)(lower, lowerTemp) === 1) {
lower = lowerTemp;
}
}
for (const upperTemp of uppers) {
if (upperTemp === void 0) {
continue;
}
if (upper === void 0 || (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 FDBCursor2 = class {
constructor(source, range, direction = "next", request, keyOnly = false) {
__publicField(this, "_gotValue", false);
__publicField(this, "_position");
// Key of previously returned record
__publicField(this, "_objectStorePosition");
__publicField(this, "_keyOnly", false);
__publicField(this, "_key");
__publicField(this, "_primaryKey");
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 = makeKeyRange2(this._range, [key, this._position], []);
for (const record of records.values(range)) {
const cmpResultKey = key !== void 0 ? (0, _cmp.default)(record.key, key) : void 0;
const cmpResultPosition = this._position !== void 0 ? (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 = (0, _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 && (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 = makeKeyRange2(this._range, [key, this._position], []);
for (const record of records.values(range)) {
if (key !== void 0) {
if ((0, _cmp.default)(record.key, key) === -1) {
continue;
}
}
if (this._position !== void 0) {
if ((0, _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 = makeKeyRange2(this._range, [], [key, this._position]);
for (const record of records.values(range, "prev")) {
const cmpResultKey = key !== void 0 ? (0, _cmp.default)(record.key, key) : void 0;
const cmpResultPosition = this._position !== void 0 ? (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 = (0, _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 && (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 = makeKeyRange2(this._range, [], [key, this._position]);
for (const record of records.values(range, "prev")) {
if (key !== void 0) {
if ((0, _cmp.default)(record.key, key) === 1) {
continue;
}
}
if (this._position !== void 0) {
if ((0, _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 = getEffectiveObjectStore2(this);
const effectiveKey = Object.hasOwn(this.source, "_rawIndex") ? this.primaryKey : this._position;
const transaction = effectiveObjectStore.transaction;
if (transaction._state !== "active") {
throw new _errors.TransactionInactiveError();
}
if (transaction.mode === "readonly") {
throw new _errors.ReadOnlyError();
}
if (effectiveObjectStore._rawObjectStore.deleted) {
throw new _errors.InvalidStateError();
}
if (!(this.source instanceof _FDBObjectStore.default) && this.source._rawIndex.deleted) {
throw new _errors.InvalidStateError();
}
if (!this._gotValue || !Object.hasOwn(this, "value")) {
throw new _errors.InvalidStateError();
}
const clone = structuredClone(value);
if (effectiveObjectStore.keyPath !== null) {
let tempKey;
try {
tempKey = (0, _extractKey.default)(effectiveObjectStore.keyPath, clone).key;
} catch (err) {
}
if ((0, _cmp.default)(tempKey, effectiveKey) !== 0) {
throw new _errors.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 = getEffectiveObjectStore2(this);
const transaction = effectiveObjectStore.transaction;
if (transaction._state !== "active") {
throw new _errors.TransactionInactiveError();
}
if (effectiveObjectStore._rawObjectStore.deleted) {
throw new _errors.InvalidStateError();
}
if (!(this.source instanceof _FDBObjectStore.default) && this.source._rawIndex.deleted) {
throw new _errors.InvalidStateError();
}
if (!this._gotValue) {
throw new _errors.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 = getEffectiveObjectStore2(this);
const transaction = effectiveObjectStore.transaction;
if (transaction._state !== "active") {
throw new _errors.TransactionInactiveError();
}
if (effectiveObjectStore._rawObjectStore.deleted) {
throw new _errors.InvalidStateError();
}
if (!(this.source instanceof _FDBObjectStore.default) && this.source._rawIndex.deleted) {
throw new _errors.InvalidStateError();
}
if (!this._gotValue) {
throw new _errors.InvalidStateError();
}
if (key !== void 0) {
key = (0, _valueToKey.default)(key);
const cmpResult = (0, _cmp.default)(key, this._position);
if (cmpResult <= 0 && (this.direction === "next" || this.direction === "nextunique") || cmpResult >= 0 && (this.direction === "prev" || this.direction === "prevunique")) {
throw new _errors.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 = getEffectiveObjectStore2(this);
const transaction = effectiveObjectStore.transaction;
if (transaction._state !== "active") {
throw new _errors.TransactionInactiveError();
}
if (effectiveObjectStore._rawObjectStore.deleted) {
throw new _errors.InvalidStateError();
}
if (!(this.source instanceof _FDBObjectStore.default) && this.source._rawIndex.deleted) {
throw new _errors.InvalidStateError();
}
if (this.source instanceof _FDBObjectStore.default || this.direction !== "next" && this.direction !== "prev") {
throw new _errors.InvalidAccessError();
}
if (!this._gotValue) {
throw new _errors.InvalidStateError();
}
if (key === void 0 || primaryKey === void 0) {
throw new _errors.DataError();
}
key = (0, _valueToKey.default)(key);
const cmpResult = (0, _cmp.default)(key, this._position);
if (cmpResult === -1 && this.direction === "next" || cmpResult === 1 && this.direction === "prev") {
throw new _errors.DataError();
}
const cmpResult2 = (0, _cmp.default)(primaryKey, this._objectStorePosition);
if (cmpResult === 0) {
if (cmpResult2 <= 0 && this.direction === "next" || cmpResult2 >= 0 && this.direction === "prev") {
throw new _errors.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 = getEffectiveObjectStore2(this);
const effectiveKey = Object.hasOwn(this.source, "_rawIndex") ? this.primaryKey : this._position;
const transaction = effectiveObjectStore.transaction;
if (transaction._state !== "active") {
throw new _errors.TransactionInactiveError();
}
if (transaction.mode === "readonly") {
throw new _errors.ReadOnlyError();
}
if (effectiveObjectStore._rawObjectStore.deleted) {
throw new _errors.InvalidStateError();
}
if (!(this.source instanceof _FDBObjectStore.default) && this.source._rawIndex.deleted) {
throw new _errors.InvalidStateError();
}
if (!this._gotValue || !Object.hasOwn(this, "value")) {
throw new _errors.InvalidStateError();
}
return transaction._execRequestAsync({
operation: effectiveObjectStore._rawObjectStore.deleteRecord.bind(effectiveObjectStore._rawObjectStore, effectiveKey, transaction._rollbackLog),
source: this
});
}
toString() {
return "[object IDBCursor]";
}
};
var _default = exports2.default = FDBCursor2;
module2.exports = exports2.default;
}
});
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBCursorWithValue.js
var require_FDBCursorWithValue = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBCursorWithValue.js"(exports2, module2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.default = void 0;
var _FDBCursor = _interopRequireDefault(require_FDBCursor());
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
var FDBCursorWithValue2 = class extends _FDBCursor.default {
constructor(source, range, direction, request) {
super(source, range, direction, request);
__publicField(this, "value");
}
toString() {
return "[object IDBCursorWithValue]";
}
};
var _default = exports2.default = FDBCursorWithValue2;
module2.exports = exports2.default;
}
});
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/FakeEventTarget.js
var require_FakeEventTarget = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/FakeEventTarget.js"(exports2, module2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.default = void 0;
var _errors = require_errors();
var stopped2 = (event, listener) => {
return event.immediatePropagationStopped || event.eventPhase === event.CAPTURING_PHASE && listener.capture === false || event.eventPhase === event.BUBBLING_PHASE && listener.capture === true;
};
var invokeEventListeners2 = (event, obj) => {
event.currentTarget = obj;
for (const listener of obj.listeners.slice()) {
if (event.type !== listener.type || stopped2(event, listener)) {
continue;
}
listener.callback.call(event.currentTarget, event);
}
const typeToProp = {
abort: "onabort",
blocked: "onblocked",
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 (!stopped2(event, listener)) {
listener.callback.call(event.currentTarget, event);
}
}
};
var FakeEventTarget2 = class {
constructor() {
__publicField(this, "listeners", []);
}
// These will be overridden in individual subclasses and made not readonly
addEventListener(type, callback, capture = false) {
this.listeners.push({
callback,
capture,
type
});
}
removeEventListener(type, callback, capture = false) {
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 _errors.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) {
invokeEventListeners2(event, obj);
}
}
event.eventPhase = event.AT_TARGET;
if (!event.propagationStopped) {
invokeEventListeners2(event, event.target);
}
if (event.bubbles) {
event.eventPath.reverse();
event.eventPhase = event.BUBBLING_PHASE;
for (const obj of event.eventPath) {
if (!event.propagationStopped) {
invokeEventListeners2(event, obj);
}
}
}
event.dispatched = false;
event.eventPhase = event.NONE;
event.currentTarget = null;
if (event.canceled) {
return false;
}
return true;
}
};
var _default = exports2.default = FakeEventTarget2;
module2.exports = exports2.default;
}
});
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBRequest.js
var require_FDBRequest = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBRequest.js"(exports2, module2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.default = void 0;
var _errors = require_errors();
var _FakeEventTarget = _interopRequireDefault(require_FakeEventTarget());
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
var FDBRequest2 = class extends _FakeEventTarget.default {
constructor() {
super(...arguments);
__publicField(this, "_result", null);
__publicField(this, "_error", null);
__publicField(this, "source", null);
__publicField(this, "transaction", null);
__publicField(this, "readyState", "pending");
__publicField(this, "onsuccess", null);
__publicField(this, "onerror", null);
}
get error() {
if (this.readyState === "pending") {
throw new _errors.InvalidStateError();
}
return this._error;
}
set error(value) {
this._error = value;
}
get result() {
if (this.readyState === "pending") {
throw new _errors.InvalidStateError();
}
return this._result;
}
set result(value) {
this._result = value;
}
toString() {
return "[object IDBRequest]";
}
};
var _default = exports2.default = FDBRequest2;
module2.exports = exports2.default;
}
});
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/enforceRange.js
var require_enforceRange = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/enforceRange.js"(exports2, module2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.default = void 0;
var enforceRange2 = (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 _default = exports2.default = enforceRange2;
module2.exports = exports2.default;
}
});
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/FakeDOMStringList.js
var require_FakeDOMStringList = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/FakeDOMStringList.js"(exports2, module2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.default = void 0;
var FakeDOMStringList2 = class extends Array {
contains(value) {
for (const value2 of this) {
if (value === value2) {
return true;
}
}
return false;
}
item(i) {
if (i < 0 || i >= this.length) {
return null;
}
return this[i];
}
// 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) {
return Array.prototype.push.call(this, ...values);
}
_sort(...values) {
return Array.prototype.sort.call(this, ...values);
}
};
var _default = exports2.default = FakeDOMStringList2;
module2.exports = exports2.default;
}
});
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/valueToKeyRange.js
var require_valueToKeyRange = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/lib/valueToKeyRange.js"(exports2, module2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.default = void 0;
var _FDBKeyRange = _interopRequireDefault(require_FDBKeyRange());
var _errors = require_errors();
var _valueToKey = _interopRequireDefault(require_valueToKey());
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
var valueToKeyRange2 = (value, nullDisallowedFlag = false) => {
if (value instanceof _FDBKeyRange.default) {
return value;
}
if (value === null || value === void 0) {
if (nullDisallowedFlag) {
throw new _errors.DataError();
}
return new _FDBKeyRange.default(void 0, void 0, false, false);
}
const key = (0, _valueToKey.default)(value);
return _FDBKeyRange.default.only(key);
};
var _default = exports2.default = valueToKeyRange2;
module2.exports = exports2.default;
}
});
// ../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBIndex.js
var require_FDBIndex = __commonJS({
"../../node_modules/.pnpm/fake-indexeddb@6.0.1/node_modules/fake-indexeddb/build/cjs/FDBIndex.js"(exports2, module2) {
"use strict";
Object.defineProperty(exports2, "__esModule", {
value: true
});
exports2.default = void 0;
var _FDBCursor = _interopRequireDefault(require_FDBCursor());
var _FDBCursorWithValue = _interopRequireDefault(require_FDBCursorWithValue());
var _FDBKeyRange = _interopRequireDefault(require_FDBKeyRange());
var _FDBRequest = _interopRequireDefault(require_FDBRequest());
var _enforceRange = _interopRequireDefault(require_enforceRange());
var _errors = require_errors();
var _FakeDOMStringList = _interopRequireDefault(require_FakeDOMStringList());
var _valueToKey = _interopRequireDefault(require_valueToKey());
var _valueToKeyRange = _interopRequireDefault(require_valueToKeyRange());
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
var confirmActiveTransaction3 = (index) => {
if (index._rawIndex.deleted || index.objectStore._rawObjectStore.deleted) {
throw new _errors.InvalidStateError();
}
if (index.objectStore.transaction._state !== "active") {
throw new _errors.TransactionInactiveError();
}
};
var FDBIndex2 = class {
constructor(objectStore, rawIndex) {
this._rawIndex = rawIndex;
this._name = rawIndex.name;
this.objectStore = objectStore;
this.keyPath = 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 new _errors.InvalidStateError();
}
if (transaction._state !== "active") {
throw new _errors.TransactionInactiveError();
}
if (this._rawIndex.deleted || this.objectStore._rawObjectStore.deleted) {
throw new _errors.InvalidStateError();
}
name = String(name);
if (name === this._name) {
return;
}
if (this.objectStore.indexNames.contains(name)) {
throw new _errors.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());
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) {
confirmActiveTransaction3(this);
if (range === null) {
range = void 0;
}
if (range !== void 0 && !(range instanceof _FDBKeyRange.default)) {
range = _FDBKeyRange.default.only((0, _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) {
confirmActiveTransaction3(this);
if (range === null) {
range = void 0;
}
if (range !== void 0 && !(range instanceof _FDBKeyRange.default)) {
range = _FDBKeyRange.default.only((0, _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) {
confirmActiveTransaction3(this);
if (!(key instanceof _FDBKeyRange.default)) {
key = (0, _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(query, count) {
if (arguments.length > 1 && count !== void 0) {
count = (0, _enforceRange.default)(count, "unsigned long");
}
confirmActiveTransaction3(this);
const range = (0, _valueToKeyRange.default)(query);
return this.objectStore.transaction._execRequestAsync({
operation: this._rawIndex.getAllValues.bind(this._rawIndex, range, count),
source: this
});
}
// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-getKey-IDBRequest-any-key
getKey(key) {
confirmActiveTransaction3(this);
if (!(key instanceof _FDBKeyRange.default)) {
key = (0, _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(query, count) {
if (arguments.length > 1 && count !== void 0) {
count = (0, _enforceRange.default)(count, "unsigned long");
}
confirmActiveTransaction3(this);
const range = (0, _valueToKeyRange.default)(query);
return this.objectStore.transaction._execRequestAsync({
operation: this._rawIndex.getAllKeys.bind(this._rawIndex, range, count),
source: this
});
}
// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-count-IDBRequest-any-key
count(key) {
confirmActiveTransaction3(this);
if (key === null) {
key =