@creasource/reactive-idb
Version:
A reactive wrapper to indexedDb using Rxjs
172 lines • 12.4 kB
JavaScript
;
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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