UNPKG

ngx-indexed-database

Version:

<div align="center"> <img src="https://w3c.github.io/IndexedDB/logo-db.svg" width="120"/> </div> <h1 align="center">ngx-indexed-database</h1>

85 lines 14.4 kB
import { __awaiter } from "tslib"; import { Injectable } from '@angular/core'; import { InvalidArgumentsException } from "../exceptions/InvalidArgumentsException"; import { HelperUtils } from "../utils/helper.utils"; import { PrimaryKeysCountException } from "../exceptions/PrimaryKeysCountException"; import { IndexedDBKeysDataType } from "../enums/IndexedDBKeysDataType"; import { NgxIndexedDatabaseStoreSchemaService } from "./ngx-indexed-database-store-schema.service"; import { SCHEMA_STORE_NAME } from "../constants/schema-store.constant"; import { InvalidStoreNameException } from "../exceptions/InvalidStoreNameException"; import { areIdentical } from "../utils/is-equal.utils"; import * as i0 from "@angular/core"; import * as i1 from "./ngx-indexed-database-store-schema.service"; export class NgxIndexedDatabaseService { constructor(_ngxIndexedDatabaseStoreSchemaService) { this._ngxIndexedDatabaseStoreSchemaService = _ngxIndexedDatabaseStoreSchemaService; } static getInstance() { if (!this._instance) { this._instance = new NgxIndexedDatabaseService(new NgxIndexedDatabaseStoreSchemaService()); } return this._instance; } createStore(dbName, storeName, storeSchema) { var _a; return __awaiter(this, void 0, void 0, function* () { if (!dbName || !storeName) { throw new InvalidArgumentsException(); } if (storeName === SCHEMA_STORE_NAME) { throw new InvalidStoreNameException(); } const primaryKeys = HelperUtils.getIndexedDBStoreSchemaPrimaryKeys(storeSchema); if (primaryKeys.length !== 1) { throw new PrimaryKeysCountException(); } yield this._ngxIndexedDatabaseStoreSchemaService.defineSchemasStore(dbName); const alreadyExistingSchema = yield this._ngxIndexedDatabaseStoreSchemaService.getStoreSchema(dbName, storeName); const ifSchemasIdentical = areIdentical(alreadyExistingSchema, storeSchema); if (ifSchemasIdentical) { return { success: true }; } if (alreadyExistingSchema && !ifSchemasIdentical) { yield this.deleteStore(dbName, storeName); } const version = (yield HelperUtils.getDatabaseVersion(dbName)) + 1; const indexedDBOpenRequest = indexedDB.open(dbName, version); yield HelperUtils.promisifyIndexedDBRequest(indexedDBOpenRequest, 'onupgradeneeded'); const database = indexedDBOpenRequest.result; const store = database.createObjectStore(storeName, { keyPath: primaryKeys[0] }); for (const attribute in storeSchema) { if ([IndexedDBKeysDataType.STRING, IndexedDBKeysDataType.INTEGER].includes(storeSchema[attribute].datatype)) { store.createIndex(attribute, attribute, { unique: ((_a = storeSchema[attribute]) === null || _a === void 0 ? void 0 : _a.unique) || false }); } } yield HelperUtils.promisifyIndexedDBRequest(indexedDBOpenRequest, 'onsuccess', 'onerror'); database === null || database === void 0 ? void 0 : database.close(); yield this._ngxIndexedDatabaseStoreSchemaService.modifySchemaStore(dbName, storeName, storeSchema); return { success: true }; }); } deleteStore(dbName, storeName) { return __awaiter(this, void 0, void 0, function* () { if (!dbName || !storeName) { throw new InvalidArgumentsException(); } const version = (yield HelperUtils.getDatabaseVersion(dbName)) + 1; const indexedDBOpenRequest = indexedDB.open(dbName, version); yield HelperUtils.promisifyIndexedDBRequest(indexedDBOpenRequest, 'onupgradeneeded'); const database = indexedDBOpenRequest.result; database.deleteObjectStore(storeName); yield this._ngxIndexedDatabaseStoreSchemaService.removeStoreSchema(dbName, storeName); database === null || database === void 0 ? void 0 : database.close(); return { success: true }; }); } } NgxIndexedDatabaseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NgxIndexedDatabaseService, deps: [{ token: i1.NgxIndexedDatabaseStoreSchemaService }], target: i0.ɵɵFactoryTarget.Injectable }); NgxIndexedDatabaseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NgxIndexedDatabaseService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NgxIndexedDatabaseService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.NgxIndexedDatabaseStoreSchemaService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWluZGV4ZWQtZGF0YWJhc2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1pbmRleGVkLWRhdGFiYXNlL3NyYy9saWIvbmd4LWluZGV4ZWQtZGF0YWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDbEYsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFDLG9DQUFvQyxFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDakcsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDbEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHlCQUF5QixDQUFDOzs7QUFLckQsTUFBTSxPQUFPLHlCQUF5QjtJQUdwQyxZQUFvQixxQ0FBMkU7UUFBM0UsMENBQXFDLEdBQXJDLHFDQUFxQyxDQUFzQztJQUFJLENBQUM7SUFFN0YsTUFBTSxDQUFDLFdBQVc7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLHlCQUF5QixDQUFDLElBQUksb0NBQW9DLEVBQUUsQ0FBQyxDQUFDO1NBQzVGO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFWSxXQUFXLENBQUMsTUFBYyxFQUFFLFNBQWlCLEVBQUUsV0FBaUM7OztZQUMzRixJQUFJ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QUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFL0UsTUFBTSxXQUFXLENBQUMseUJBQXlCLENBQUMsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUNyRixNQUFNLFFBQVEsR0FBZ0Isb0JBQW9CLENBQUMsTUFBTSxDQUFDO1lBQzFELFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdEYsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLEtBQUssRUFBRSxDQUFDO1lBRWxCLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQztLQUFBOzt1SEF2RVUseUJBQXlCOzJIQUF6Qix5QkFBeUIsY0FGeEIsTUFBTTs0RkFFUCx5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJbmRleGVkREJTdG9yZVNjaGVtYX0gZnJvbSBcIi4uL21vZGVscy9JbmRleGVkREJTdG9yZVNjaGVtYVwiO1xuaW1wb3J0IHtJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9ufSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9JbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9uXCI7XG5pbXBvcnQge0hlbHBlclV0aWxzfSBmcm9tIFwiLi4vdXRpbHMvaGVscGVyLnV0aWxzXCI7XG5pbXBvcnQge1ByaW1hcnlLZXlzQ291bnRFeGNlcHRpb259IGZyb20gXCIuLi9leGNlcHRpb25zL1ByaW1hcnlLZXlzQ291bnRFeGNlcHRpb25cIjtcbmltcG9ydCB7SW5kZXhlZERCS2V5c0RhdGFUeXBlfSBmcm9tIFwiLi4vZW51bXMvSW5kZXhlZERCS2V5c0RhdGFUeXBlXCI7XG5pbXBvcnQge05neEluZGV4ZWREYXRhYmFzZVN0b3JlU2NoZW1hU2VydmljZX0gZnJvbSBcIi4vbmd4LWluZGV4ZWQtZGF0YWJhc2Utc3RvcmUtc2NoZW1hLnNlcnZpY2VcIjtcbmltcG9ydCB7U0NIRU1BX1NUT1JFX05BTUV9IGZyb20gXCIuLi9jb25zdGFudHMvc2NoZW1hLXN0b3JlLmNvbnN0YW50XCI7XG5pbXBvcnQge0ludmFsaWRTdG9yZU5hbWVFeGNlcHRpb259IGZyb20gXCIuLi9leGNlcHRpb25zL0ludmFsaWRTdG9yZU5hbWVFeGNlcHRpb25cIjtcbmltcG9ydCB7YXJlSWRlbnRpY2FsfSBmcm9tIFwiLi4vdXRpbHMvaXMtZXF1YWwudXRpbHNcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTmd4SW5kZXhlZERhdGFiYXNlU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogTmd4SW5kZXhlZERhdGFiYXNlU2VydmljZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9uZ3hJbmRleGVkRGF0YWJhc2VTdG9yZVNjaGVtYVNlcnZpY2U6IE5neEluZGV4ZWREYXRhYmFzZVN0b3JlU2NoZW1hU2VydmljZSkgeyB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBOZ3hJbmRleGVkRGF0YWJhc2VTZXJ2aWNlIHtcbiAgICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBOZ3hJbmRleGVkRGF0YWJhc2VTZXJ2aWNlKG5ldyBOZ3hJbmRleGVkRGF0YWJhc2VTdG9yZVNjaGVtYVNlcnZpY2UoKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVTdG9yZShkYk5hbWU6IHN0cmluZywgc3RvcmVOYW1lOiBzdHJpbmcsIHN0b3JlU2NoZW1hOiBJbmRleGVkREJTdG9yZVNjaGVtYSk6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuIH0+IHtcbiAgICBpZiAoIWRiTmFtZSB8fCAhc3RvcmVOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50c0V4Y2VwdGlvbigpO1xuICAgIH1cbiAgICBpZiAoc3RvcmVOYW1lID09PSBTQ0hFTUFfU1RPUkVfTkFNRSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRTdG9yZU5hbWVFeGNlcHRpb24oKTtcbiAgICB9XG4gICAgY29uc3QgcHJpbWFyeUtleXMgPSBIZWxwZXJVdGlscy5nZXRJbmRleGVkREJTdG9yZVNjaGVtYVByaW1hcnlLZXlzKHN0b3JlU2NoZW1hKTtcbiAgICBpZiAocHJpbWFyeUtleXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgUHJpbWFyeUtleXNDb3VudEV4Y2VwdGlvbigpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuX25neEluZGV4ZWREYXRhYmFzZVN0b3JlU2NoZW1hU2VydmljZS5kZWZpbmVTY2hlbWFzU3RvcmUoZGJOYW1lKTtcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RpbmdTY2hlbWEgPSBhd2FpdCB0aGlzLl9uZ3hJbmRleGVkRGF0YWJhc2VTdG9yZVNjaGVtYVNlcnZpY2UuZ2V0U3RvcmVTY2hlbWEoZGJOYW1lLCBzdG9yZU5hbWUpO1xuICAgIGNvbnN0IGlmU2NoZW1hc0lkZW50aWNhbCA9IGFyZUlkZW50aWNhbChhbHJlYWR5RXhpc3RpbmdTY2hlbWEsIHN0b3JlU2NoZW1hKTtcblxuICAgIGlmIChpZlNjaGVtYXNJZGVudGljYWwpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgICB9XG5cbiAgICBpZiAoYWxyZWFkeUV4aXN0aW5nU2NoZW1hICYmICFpZlNjaGVtYXNJZGVudGljYWwpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU3RvcmUoZGJOYW1lLCBzdG9yZU5hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHZlcnNpb24gPSAoYXdhaXQgSGVscGVyVXRpbHMuZ2V0RGF0YWJhc2VWZXJzaW9uKGRiTmFtZSkpICsgMTtcbiAgICBjb25zdCBpbmRleGVkREJPcGVuUmVxdWVzdDogSURCT3BlbkRCUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRiTmFtZSwgdmVyc2lvbik7XG5cbiAgICBhd2FpdCBIZWxwZXJVdGlscy5wcm9taXNpZnlJbmRleGVkREJSZXF1ZXN0KGluZGV4ZWREQk9wZW5SZXF1ZXN0LCAnb251cGdyYWRlbmVlZGVkJyk7XG4gICAgY29uc3QgZGF0YWJhc2U6IElEQkRhdGFiYXNlID0gaW5kZXhlZERCT3BlblJlcXVlc3QucmVzdWx0O1xuICAgIGNvbnN0IHN0b3JlOiBJREJPYmplY3RTdG9yZSA9IGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKHN0b3JlTmFtZSwgeyBrZXlQYXRoOiBwcmltYXJ5S2V5c1swXSB9KTtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBpbiBzdG9yZVNjaGVtYSkge1xuICAgICAgaWYgKFtJbmRleGVkREJLZXlzRGF0YVR5cGUuU1RSSU5HLCBJbmRleGVkREJLZXlzRGF0YVR5cGUuSU5URUdFUl0uaW5jbHVkZXMoc3RvcmVTY2hlbWFbYXR0cmlidXRlXS5kYXRhdHlwZSkpIHtcbiAgICAgICAgc3RvcmUuY3JlYXRlSW5kZXgoYXR0cmlidXRlLCBhdHRyaWJ1dGUsIHsgdW5pcXVlOiBzdG9yZVNjaGVtYVthdHRyaWJ1dGVdPy51bmlxdWUgfHwgZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgSGVscGVyVXRpbHMucHJvbWlzaWZ5SW5kZXhlZERCUmVxdWVzdChpbmRleGVkREJPcGVuUmVxdWVzdCwgJ29uc3VjY2VzcycsICdvbmVycm9yJyk7XG4gICAgZGF0YWJhc2U/LmNsb3NlKCk7XG5cbiAgICBhd2FpdCB0aGlzLl9uZ3hJbmRleGVkRGF0YWJhc2VTdG9yZVNjaGVtYVNlcnZpY2UubW9kaWZ5U2NoZW1hU3RvcmUoZGJOYW1lLCBzdG9yZU5hbWUsIHN0b3JlU2NoZW1hKTtcblxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVTdG9yZShkYk5hbWU6IHN0cmluZywgc3RvcmVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbiB9PiAge1xuICAgIGlmICghZGJOYW1lIHx8ICFzdG9yZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRzRXhjZXB0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVyc2lvbiA9IChhd2FpdCBIZWxwZXJVdGlscy5nZXREYXRhYmFzZVZlcnNpb24oZGJOYW1lKSkgKyAxO1xuICAgIGNvbnN0IGluZGV4ZWREQk9wZW5SZXF1ZXN0OiBJREJPcGVuREJSZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1lLCB2ZXJzaW9uKTtcblxuICAgIGF3YWl0IEhlbHBlclV0aWxzLnByb21pc2lmeUluZGV4ZWREQlJlcXVlc3QoaW5kZXhlZERCT3BlblJlcXVlc3QsICdvbnVwZ3JhZGVuZWVkZWQnKTtcbiAgICBjb25zdCBkYXRhYmFzZTogSURCRGF0YWJhc2UgPSBpbmRleGVkREJPcGVuUmVxdWVzdC5yZXN1bHQ7XG4gICAgZGF0YWJhc2UuZGVsZXRlT2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcbiAgICBhd2FpdCB0aGlzLl9uZ3hJbmRleGVkRGF0YWJhc2VTdG9yZVNjaGVtYVNlcnZpY2UucmVtb3ZlU3RvcmVTY2hlbWEoZGJOYW1lLCBzdG9yZU5hbWUpO1xuICAgIGRhdGFiYXNlPy5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICB9XG59XG4iXX0=