| 749 | : never |
| 750 | |
| 751 | const applyDelete = (query: IndexedDbQuery.Delete<any, never>) => |
| 752 | Effect.callback<any, IndexedDbQueryError>((resume) => { |
| 753 | const database = query.delete.from.database |
| 754 | const IDBKeyRange = query.delete.from.IDBKeyRange |
| 755 | const transaction = getOrCreateTransaction(database.current, [query.delete.from.table.tableName], "readwrite", { |
| 756 | durability: query.delete.from.table.durability |
| 757 | }) |
| 758 | const objectStore = transaction.objectStore(query.delete.from.table.tableName) |
| 759 | const store = query.delete.index === undefined ? objectStore : objectStore.index(query.delete.index) |
| 760 | const predicate = query.predicate |
| 761 | |
| 762 | let keyRange: globalThis.IDBKeyRange | undefined = undefined |
| 763 | |
| 764 | if (query.only !== undefined) { |
| 765 | keyRange = IDBKeyRange.only(query.only) |
| 766 | } else if ( |
| 767 | query.lowerBound !== undefined && |
| 768 | query.upperBound !== undefined |
| 769 | ) { |
| 770 | keyRange = IDBKeyRange.bound( |
| 771 | query.lowerBound, |
| 772 | query.upperBound, |
| 773 | query.excludeLowerBound, |
| 774 | query.excludeUpperBound |
| 775 | ) |
| 776 | } else if (query.lowerBound !== undefined) { |
| 777 | keyRange = IDBKeyRange.lowerBound( |
| 778 | query.lowerBound, |
| 779 | query.excludeLowerBound |
| 780 | ) |
| 781 | } else if (query.upperBound !== undefined) { |
| 782 | keyRange = IDBKeyRange.upperBound( |
| 783 | query.upperBound, |
| 784 | query.excludeUpperBound |
| 785 | ) |
| 786 | } |
| 787 | |
| 788 | let request: globalThis.IDBRequest |
| 789 | |
| 790 | if (query.delete.index !== undefined || query.limitValue !== undefined || predicate) { |
| 791 | const cursorRequest = store.openCursor(keyRange) |
| 792 | let count = 0 |
| 793 | |
| 794 | cursorRequest.onerror = () => { |
| 795 | resume( |
| 796 | Effect.fail( |
| 797 | new IndexedDbQueryError({ |
| 798 | reason: "TransactionError", |
| 799 | cause: cursorRequest.error |
| 800 | }) |
| 801 | ) |
| 802 | ) |
| 803 | } |
| 804 | |
| 805 | cursorRequest.onsuccess = () => { |
| 806 | const cursor = cursorRequest.result |
| 807 | if (cursor === null) { |
| 808 | return resume(Effect.void) |