UNPKG

@creasource/reactive-idb

Version:

A reactive wrapper to indexedDb using Rxjs

172 lines 12.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ReactiveIDBDatabase = void 0; const rxjs_1 = require("rxjs"); const reactive_idb_object_store_1 = require("./reactive-idb-object-store"); const reactive_idb_transaction_1 = require("./reactive-idb-transaction"); class ReactiveIDBDatabase { /** * @param database */ constructor(database) { this.database = database; } /** * Returns the name of the database. */ get name() { return this.database.name; } /** * Returns a list of the names of object stores in the database. */ get objectStoreNames() { return this.database.objectStoreNames; } /** * Returns the version of the database. */ get version() { return this.database.version; } /** * * @param options */ static create(options) { return new rxjs_1.Observable((subscriber) => { const opts = Object.assign({ schema: [], factory: window.indexedDB, onUpgrade: () => void 0, onBlocked: () => void 0, autoCloseOnVersionChange: true }, options); const version = Math.max(...opts.schema.map((schema) => schema.version), 1); const request = opts.factory.open(opts.name, version); request.onupgradeneeded = (versionChange) => { const database = request.result; opts.schema .filter((schema) => schema.version > versionChange.oldVersion) .forEach((schema) => { const stores = schema.stores; stores.forEach((store) => { let name, options, indexes; if (typeof store === 'string') { name = store; options = {}; indexes = []; } else { name = store.name; options = store.options; indexes = (store.indexes || []).map((index) => { return typeof index === 'string' ? { name: index, keyPath: index } : index; }); } const objStore = database.createObjectStore(name, options); indexes.forEach((index) => objStore.createIndex(index.name, index.keyPath || index.name, index.options)); }); }); opts.onUpgrade(database, versionChange.oldVersion, versionChange.newVersion, versionChange.target .transaction); }; request.onsuccess = () => { if (opts.autoCloseOnVersionChange) { request.result.addEventListener('versionchange', () => { request.result.close(); }); } subscriber.next(new ReactiveIDBDatabase(request.result)); subscriber.complete(); }; if (options.onBlocked) { request.onblocked = options.onBlocked; } request.onerror = (ev) => subscriber.error(ev); }); } /** * Closes the connection once all running transactions have finished. */ close() { return this.database.close(); } /** * Returns a new transaction with the given mode ("readonly" or "readwrite") and scope which can be a single object store name or an array of names. */ transaction(names, mode) { return new reactive_idb_transaction_1.ReactiveIDBTransaction(this.database.transaction(names, mode), this); } /** * * @param names * @param mode */ transaction$(names, mode) { return new rxjs_1.Observable((observer) => { const transaction = new reactive_idb_transaction_1.ReactiveIDBTransaction(this.database.transaction(names, mode), this); transaction.addEventListener('complete', () => observer.complete()); observer.next(transaction); return () => { try { transaction.abort(); // eslint-disable-next-line no-empty } catch (e) { } }; }); } /** * Creates a new object store with the given name and options and returns a new IDBObjectStore. * * Throws a "InvalidStateError" DOMException if not called within an upgrade transaction. */ createObjectStore(name, options) { const objStore = this.database.createObjectStore(name, options); const transaction = objStore.transaction; return new reactive_idb_object_store_1.ReactiveIDBObjectStore(objStore, new reactive_idb_transaction_1.ReactiveIDBTransaction(transaction, this)); } /** * Deletes the object store with the given name. * * Throws a "InvalidStateError" DOMException if not called within an upgrade transaction. */ deleteObjectStore(name) { return this.database.deleteObjectStore(name); } /** * * @param type * @param listener * @param options */ addEventListener(type, listener, options) { this.database.addEventListener(type, listener, options); } /** * * @param type * @param listener * @param options */ removeEventListener(type, listener, options) { this.database.removeEventListener(type, listener, options); } /** * * @param onBlocked */ clear$(onBlocked) { return new rxjs_1.Observable((observer) => { this.database.close(); const request = indexedDB.deleteDatabase(this.name); request.onerror = (event) => observer.error(event); request.onsuccess = () => { observer.next(); observer.complete(); }; if (onBlocked) { request.onblocked = onBlocked; } }); } } exports.ReactiveIDBDatabase = ReactiveIDBDatabase; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUtaWRiLWRhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWFjdGl2ZS1pZGItZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQWtDO0FBRWxDLDJFQUFxRTtBQUNyRSx5RUFBb0U7QUFrRXBFLE1BQWEsbUJBQW1CO0lBc0I5Qjs7T0FFRztJQUNILFlBQTZCLFFBQXFCO1FBQXJCLGFBQVEsR0FBUixRQUFRLENBQWE7SUFBRyxDQUFDO0lBeEJ0RDs7T0FFRztJQUNILElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQU9EOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQ1gsT0FBbUM7UUFFbkMsT0FBTyxJQUFJLGlCQUFVLENBQXNCLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDeEQsTUFBTSxJQUFJLG1CQUNSLE1BQU0sRUFBRSxFQUFFLEVBQ1YsT0FBTyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQ3pCLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFDdkIsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUN2Qix3QkFBd0IsRUFBRSxJQUFJLElBQzNCLE9BQU8sQ0FDWCxDQUFDO1lBRUYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDdEIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFD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