UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

1 lines 7.38 kB
{"version":3,"sources":["../../../packages/core/performance/performance-profile-database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAM,MAAM,MAAM,CAAC;AAEtC,OAAO,EAAE,wBAAwB,IAAI,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAEpG,qBAAa,0BAA0B;IACnC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAwB;IACnD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAiB;IAC/C,OAAO,CAAC,MAAM,CAAC,OAAO,CAAK;IAE3B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,SAAS,CAAM;IAEhB,KAAK,CAAC,MAAM,EAAE,wBAAwB,GAAG,UAAU,CAAC,IAAI,CAAC;IAKzD,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,wBAAwB,CAAC;IAKzD,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC;IAK/C,KAAK,IAAI,IAAI;IAUb,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC;IAQpC,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,UAAU;CAgBrB","file":"performance-profile-database.d.ts","sourcesContent":["import { Observable, of } from 'rxjs';\r\nimport { share, switchMap, tap } from 'rxjs/operators';\r\nimport { PerformanceProfileRecord as PerformanceProfileRecord } from './performance-profile-record';\r\n\r\nexport class PerformanceProfileDatabase {\r\n private static databaseName = 'MsftSmePerformance';\r\n private static objectStoreName = 'Performance';\r\n private static version = 1;\r\n\r\n private database: IDBDatabase;\r\n private databaseShared: Observable<IDBDatabase>;\r\n private lastError: any;\r\n\r\n public write(record: PerformanceProfileRecord): Observable<void> {\r\n return this.getDatabase()\r\n .pipe(switchMap(database => this.storeData(database, record)));\r\n }\r\n\r\n public read(from?: number): Observable<PerformanceProfileRecord> {\r\n return this.getDatabase()\r\n .pipe(switchMap(database => this.restoreData(database, from)));\r\n }\r\n\r\n public delete(primaryKeys: number[]): Observable<void> {\r\n return this.getDatabase()\r\n .pipe(switchMap(database => this.deleteData(database, primaryKeys)));\r\n }\r\n\r\n public close(): void {\r\n if (!this.database) {\r\n return;\r\n }\r\n\r\n this.database.close();\r\n this.database = null;\r\n this.databaseShared = null;\r\n }\r\n\r\n public deleteAll(): Observable<void> {\r\n return this.getDatabase()\r\n .pipe(\r\n tap(() => this.close()),\r\n switchMap(() => this.deleteDatabase())\r\n );\r\n }\r\n\r\n private deleteDatabase(): Observable<void> {\r\n return new Observable(observer => {\r\n const request = window.indexedDB.deleteDatabase(PerformanceProfileDatabase.databaseName);\r\n request.onerror = () => {\r\n observer.error(request.error);\r\n };\r\n request.onsuccess = () => {\r\n this.database = null;\r\n this.databaseShared = null;\r\n observer.next(null);\r\n observer.complete();\r\n };\r\n });\r\n }\r\n\r\n private getDatabase(): Observable<IDBDatabase> {\r\n if (this.database) {\r\n return of(this.database);\r\n }\r\n\r\n if (this.databaseShared) {\r\n return this.databaseShared;\r\n }\r\n\r\n this.databaseShared = new Observable<any>(observer => {\r\n const openRequest = window.indexedDB.open(PerformanceProfileDatabase.databaseName, PerformanceProfileDatabase.version);\r\n openRequest.onerror = () => {\r\n this.lastError = openRequest.error;\r\n observer.error(this.lastError);\r\n openRequest.onerror = null;\r\n };\r\n openRequest.onsuccess = () => {\r\n this.database = openRequest.result;\r\n observer.next(this.database);\r\n observer.complete();\r\n };\r\n openRequest.onupgradeneeded = event => {\r\n const database = openRequest.result;\r\n database.onerror = event2 => {\r\n this.lastError = event2;\r\n observer.error(this.lastError);\r\n };\r\n if (event.oldVersion !== 0 && event.oldVersion < PerformanceProfileDatabase.version) {\r\n database.deleteObjectStore(PerformanceProfileDatabase.objectStoreName);\r\n }\r\n\r\n database.createObjectStore(PerformanceProfileDatabase.objectStoreName, { autoIncrement: true });\r\n };\r\n })\r\n .pipe(share());\r\n\r\n return this.databaseShared;\r\n }\r\n\r\n private storeData(database: IDBDatabase, record: PerformanceProfileRecord): Observable<void> {\r\n return new Observable(observer => {\r\n const transaction = database.transaction([PerformanceProfileDatabase.objectStoreName], 'readwrite');\r\n transaction.oncomplete = () => {\r\n observer.complete();\r\n };\r\n transaction.onerror = () => {\r\n observer.error(transaction.error);\r\n };\r\n\r\n const objectStore = transaction.objectStore(PerformanceProfileDatabase.objectStoreName);\r\n objectStore.add(record);\r\n });\r\n }\r\n\r\n private restoreData(database: IDBDatabase, from?: number): Observable<PerformanceProfileRecord> {\r\n return new Observable(observer => {\r\n const transaction = database.transaction([PerformanceProfileDatabase.objectStoreName], 'readonly');\r\n const objectStore = transaction.objectStore(PerformanceProfileDatabase.objectStoreName);\r\n let cursor: IDBRequest<IDBCursorWithValue>;\r\n if (from) {\r\n const query = IDBKeyRange.lowerBound(from, true);\r\n cursor = objectStore.openCursor(query, 'next');\r\n\r\n } else {\r\n cursor = objectStore.openCursor();\r\n }\r\n cursor.onsuccess = event => {\r\n const current: IDBCursorWithValue = (<any>event.target).result;\r\n if (current && current.value) {\r\n const record: PerformanceProfileRecord = current.value;\r\n record.primaryKey = <number>current.primaryKey;\r\n observer.next(record);\r\n current.continue();\r\n } else {\r\n observer.complete();\r\n }\r\n };\r\n cursor.onerror = () => {\r\n observer.error(cursor.error);\r\n };\r\n });\r\n }\r\n\r\n private deleteData(database: IDBDatabase, primaryKeys: number[]): Observable<void> {\r\n return new Observable(observer => {\r\n const transaction = database.transaction([PerformanceProfileDatabase.objectStoreName], 'readwrite');\r\n transaction.oncomplete = () => {\r\n observer.complete();\r\n };\r\n transaction.onerror = () => {\r\n observer.error(transaction.error);\r\n };\r\n\r\n const objectStore = transaction.objectStore(PerformanceProfileDatabase.objectStoreName);\r\n for (const primaryKey of primaryKeys) {\r\n objectStore.delete(primaryKey);\r\n }\r\n });\r\n }\r\n}\r\n"]}