UNPKG

react-native-flipper-databases

Version:

Flipper Databases plugin for React Native

103 lines (81 loc) 2.51 kB
import type { DatabaseDescriptorHolder, DatabaseDriver } from './types'; export class DatabasesManager { private ddHolderMap = new Map<number, DatabaseDescriptorHolder>(); constructor(private dbDrivers: DatabaseDriver[]) {} init() { // Precache databases this.preloadDatabases(); } async getDatabases() { return this.ddHolderMap.values(); } async getTableStructure(databaseId: number, tableName: string) { const databaseDescriptorHolder = this.ddHolderMap.get(databaseId); if (!databaseDescriptorHolder) { return null; } return databaseDescriptorHolder.databaseDriver.getTableStructure( databaseDescriptorHolder.databaseDescriptor, tableName ); } async getTableData( databaseId: number, tableName: string, order: string | undefined, reverse: boolean, start: number, count: number ) { const databaseDescriptorHolder = this.ddHolderMap.get(databaseId); if (!databaseDescriptorHolder) { return null; } return databaseDescriptorHolder.databaseDriver.getTableData( databaseDescriptorHolder.databaseDescriptor, tableName, order, reverse, start, count ); } async getTableInfo(databaseId: number, tableName: string) { const databaseDescriptorHolder = this.ddHolderMap.get(databaseId); if (!databaseDescriptorHolder) { return null; } return databaseDescriptorHolder.databaseDriver.getTableInfo( databaseDescriptorHolder.databaseDescriptor, tableName ); } async executeSql(databaseId: number, sqlString: string) { const databaseDescriptorHolder = this.ddHolderMap.get(databaseId); if (!databaseDescriptorHolder) { return null; } return databaseDescriptorHolder.databaseDriver.executeSql( databaseDescriptorHolder.databaseDescriptor, sqlString ); } private async preloadDatabases() { let databaseId: number = 1; // Reset cached databases this.ddHolderMap.clear(); // Retrieve all DBs from the provided Drivers for (const databaseDriver of this.dbDrivers) { const databaseDescriptorList = await databaseDriver.getDatabases(); for (const databaseDescriptor of databaseDescriptorList) { const id = databaseId++; const databaseDescriptorHolder = { id, databaseDriver, databaseDescriptor, }; this.ddHolderMap.set(id, databaseDescriptorHolder); } } } }