import { WebPlugin } from '@capacitor/core'; import type { CapacitorSQLitePlugin, capConnectionOptions, capAllConnectionsOptions, capChangeSecretOptions, capEchoOptions, capEchoResult, capNCConnectionOptions, capNCDatabasePathOptions, capNCDatabasePathResult, capNCOptions, capSetSecretOptions, capSQLiteChanges, capSQLiteExecuteOptions, capSQLiteExportOptions, capSQLiteFromAssetsOptions, capSQLiteHTTPOptions, capSQLiteLocalDiskOptions, capSQLiteImportOptions, capSQLiteJson, capSQLiteOptions, capSQLitePathOptions, capSQLiteQueryOptions, capSQLiteResult, capSQLiteRunOptions, capSQLiteSetOptions, capSQLiteSyncDate, capSQLiteSyncDateOptions, capSQLiteTableOptions, capSQLiteUpgradeOptions, capSQLiteUrl, capSQLiteValues, capVersionResult, capSQLiteExtensionPath, capSQLiteExtensionEnable, } from './definitions'; export class CapacitorSQLiteWeb extends WebPlugin implements CapacitorSQLitePlugin { private jeepSqliteElement: any = null; private isWebStoreOpen = false; async initWebStore(): Promise { await customElements.whenDefined('jeep-sqlite'); this.jeepSqliteElement = document.querySelector('jeep-sqlite'); this.ensureJeepSqliteIsAvailable(); this.jeepSqliteElement.addEventListener('jeepSqliteImportProgress', (event: CustomEvent) => { this.notifyListeners('sqliteImportProgressEvent', event.detail); }); this.jeepSqliteElement.addEventListener('jeepSqliteExportProgress', (event: CustomEvent) => { this.notifyListeners('sqliteExportProgressEvent', event.detail); }); this.jeepSqliteElement.addEventListener('jeepSqliteHTTPRequestEnded', (event: CustomEvent) => { this.notifyListeners('sqliteHTTPRequestEndedEvent', event.detail); }); this.jeepSqliteElement.addEventListener('jeepSqlitePickDatabaseEnded', (event: CustomEvent) => { this.notifyListeners('sqlitePickDatabaseEndedEvent', event.detail); }); this.jeepSqliteElement.addEventListener('jeepSqliteSaveDatabaseToDisk', (event: CustomEvent) => { this.notifyListeners('sqliteSaveDatabaseToDiskEvent', event.detail); }); if (!this.isWebStoreOpen) { this.isWebStoreOpen = await this.jeepSqliteElement.isStoreOpen(); } return; } async saveToStore(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.saveToStore(options); return; } catch (err) { throw new Error(`${err}`); } } async getFromLocalDiskToStore(options: capSQLiteLocalDiskOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.getFromLocalDiskToStore(options); return; } catch (err) { throw new Error(`${err}`); } } async saveToLocalDisk(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.saveToLocalDisk(options); return; } catch (err) { throw new Error(`${err}`); } } async echo(options: capEchoOptions): Promise { this.ensureJeepSqliteIsAvailable(); const echoResult = await this.jeepSqliteElement.echo(options); return echoResult; } async createConnection(options: capConnectionOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.createConnection(options); return; } catch (err) { throw new Error(`${err}`); } } async open(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.open(options); return; } catch (err) { throw new Error(`${err}`); } } async closeConnection(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.closeConnection(options); return; } catch (err) { throw new Error(`${err}`); } } async getVersion(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const versionResult: capVersionResult = await this.jeepSqliteElement.getVersion(options); return versionResult; } catch (err) { throw new Error(`${err}`); } } async checkConnectionsConsistency(options: capAllConnectionsOptions): Promise { this.ensureJeepSqliteIsAvailable(); try { const consistencyResult: capSQLiteResult = await this.jeepSqliteElement.checkConnectionsConsistency(options); return consistencyResult; } catch (err) { throw new Error(`${err}`); } } async close(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.close(options); return; } catch (err) { throw new Error(`${err}`); } } async beginTransaction(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const changes: capSQLiteChanges = await this.jeepSqliteElement.beginTransaction(options); return changes; } catch (err) { throw new Error(`${err}`); } } async commitTransaction(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const changes: capSQLiteChanges = await this.jeepSqliteElement.commitTransaction(options); return changes; } catch (err) { throw new Error(`${err}`); } } async rollbackTransaction(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const changes: capSQLiteChanges = await this.jeepSqliteElement.rollbackTransaction(options); return changes; } catch (err) { throw new Error(`${err}`); } } async isTransactionActive(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const result: capSQLiteResult = await this.jeepSqliteElement.isTransactionActive(options); return result; } catch (err) { throw new Error(`${err}`); } } async getTableList(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const tableListResult: capSQLiteValues = await this.jeepSqliteElement.getTableList(options); return tableListResult; } catch (err) { throw new Error(`${err}`); } } async execute(options: capSQLiteExecuteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const executeResult: capSQLiteChanges = await this.jeepSqliteElement.execute(options); return executeResult; } catch (err) { throw new Error(`${err}`); } } async executeSet(options: capSQLiteSetOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const executeResult: capSQLiteChanges = await this.jeepSqliteElement.executeSet(options); return executeResult; } catch (err) { throw new Error(`${err}`); } } async run(options: capSQLiteRunOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const runResult: capSQLiteChanges = await this.jeepSqliteElement.run(options); return runResult; } catch (err) { throw new Error(`${err}`); } } async query(options: capSQLiteQueryOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const queryResult: capSQLiteValues = await this.jeepSqliteElement.query(options); return queryResult; } catch (err) { throw new Error(`${err}`); } } async isDBExists(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const dbExistsResult: capSQLiteResult = await this.jeepSqliteElement.isDBExists(options); return dbExistsResult; } catch (err) { throw new Error(`${err}`); } } async isDBOpen(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const isDBOpenResult: capSQLiteResult = await this.jeepSqliteElement.isDBOpen(options); return isDBOpenResult; } catch (err) { throw new Error(`${err}`); } } async isDatabase(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const isDatabaseResult: capSQLiteResult = await this.jeepSqliteElement.isDatabase(options); return isDatabaseResult; } catch (err) { throw new Error(`${err}`); } } async isTableExists(options: capSQLiteTableOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const tableExistsResult = await this.jeepSqliteElement.isTableExists(options); return tableExistsResult; } catch (err) { throw new Error(`${err}`); } } async deleteDatabase(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.deleteDatabase(options); return; } catch (err) { throw new Error(`${err}`); } } async isJsonValid(options: capSQLiteImportOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const isJsonValidResult = await this.jeepSqliteElement.isJsonValid(options); return isJsonValidResult; } catch (err) { throw new Error(`${err}`); } } async importFromJson(options: capSQLiteImportOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const importFromJsonResult: capSQLiteChanges = await this.jeepSqliteElement.importFromJson(options); return importFromJsonResult; } catch (err) { throw new Error(`${err}`); } } async exportToJson(options: capSQLiteExportOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const exportToJsonResult: capSQLiteJson = await this.jeepSqliteElement.exportToJson(options); return exportToJsonResult; } catch (err) { throw new Error(`${err}`); } } async createSyncTable(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const createSyncTableResult: capSQLiteChanges = await this.jeepSqliteElement.createSyncTable(options); return createSyncTableResult; } catch (err) { throw new Error(`${err}`); } } async setSyncDate(options: capSQLiteSyncDateOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.setSyncDate(options); return; } catch (err) { throw new Error(`${err}`); } } async getSyncDate(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const getSyncDateResult: capSQLiteSyncDate = await this.jeepSqliteElement.getSyncDate(options); return getSyncDateResult; } catch (err) { throw new Error(`${err}`); } } async deleteExportedRows(options: capSQLiteOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.deleteExportedRows(options); return; } catch (err) { throw new Error(`${err}`); } } async addUpgradeStatement(options: capSQLiteUpgradeOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.addUpgradeStatement(options); return; } catch (err) { throw new Error(`${err}`); } } async copyFromAssets(options: capSQLiteFromAssetsOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.copyFromAssets(options); return; } catch (err) { throw new Error(`${err}`); } } async getFromHTTPRequest(options: capSQLiteHTTPOptions): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { await this.jeepSqliteElement.getFromHTTPRequest(options); return; } catch (err) { throw new Error(`${err}`); } } async getDatabaseList(): Promise { this.ensureJeepSqliteIsAvailable(); this.ensureWebstoreIsOpen(); try { const databaseListResult: capSQLiteValues = await this.jeepSqliteElement.getDatabaseList(); return databaseListResult; } catch (err) { throw new Error(`${err}`); } } /** * Checks if the `jeep-sqlite` element is present in the DOM. * If it's not in the DOM, this method throws an Error. * * Attention: This will always fail, if the `intWebStore()` method wasn't called before. */ private ensureJeepSqliteIsAvailable() { if (this.jeepSqliteElement === null) { throw new Error( `The jeep-sqlite element is not present in the DOM! Please check the @capacitor-community/sqlite documentation for instructions regarding the web platform.`, ); } } private ensureWebstoreIsOpen() { if (!this.isWebStoreOpen) { /** * if (!this.isWebStoreOpen) this.isWebStoreOpen = await this.jeepSqliteElement.isStoreOpen(); */ throw new Error('WebStore is not open yet. You have to call "initWebStore()" first.'); } } //////////////////////////////////// ////// UNIMPLEMENTED METHODS //////////////////////////////////// async getUrl(): Promise { throw this.unimplemented('Not implemented on web.'); } async getMigratableDbList(options: capSQLitePathOptions): Promise { console.log('getMigratableDbList', options); throw this.unimplemented('Not implemented on web.'); } async addSQLiteSuffix(options: capSQLitePathOptions): Promise { console.log('addSQLiteSuffix', options); throw this.unimplemented('Not implemented on web.'); } async deleteOldDatabases(options: capSQLitePathOptions): Promise { console.log('deleteOldDatabases', options); throw this.unimplemented('Not implemented on web.'); } async moveDatabasesAndAddSuffix(options: capSQLitePathOptions): Promise { console.log('moveDatabasesAndAddSuffix', options); throw this.unimplemented('Not implemented on web.'); } async isSecretStored(): Promise { throw this.unimplemented('Not implemented on web.'); } async setEncryptionSecret(options: capSetSecretOptions): Promise { console.log('setEncryptionSecret', options); throw this.unimplemented('Not implemented on web.'); } async changeEncryptionSecret(options: capChangeSecretOptions): Promise { console.log('changeEncryptionSecret', options); throw this.unimplemented('Not implemented on web.'); } async clearEncryptionSecret(): Promise { console.log('clearEncryptionSecret'); throw this.unimplemented('Not implemented on web.'); } async checkEncryptionSecret(options: capSetSecretOptions): Promise { console.log('checkEncryptionPassPhrase', options); throw this.unimplemented('Not implemented on web.'); } async getNCDatabasePath(options: capNCDatabasePathOptions): Promise { console.log('getNCDatabasePath', options); throw this.unimplemented('Not implemented on web.'); } async createNCConnection(options: capNCConnectionOptions): Promise { console.log('createNCConnection', options); throw this.unimplemented('Not implemented on web.'); } async closeNCConnection(options: capNCOptions): Promise { console.log('closeNCConnection', options); throw this.unimplemented('Not implemented on web.'); } async isNCDatabase(options: capNCOptions): Promise { console.log('isNCDatabase', options); throw this.unimplemented('Not implemented on web.'); } async isDatabaseEncrypted(options: capSQLiteOptions): Promise { console.log('isDatabaseEncrypted', options); throw this.unimplemented('Not implemented on web.'); } async isInConfigEncryption(): Promise { throw this.unimplemented('Not implemented on web.'); } async isInConfigBiometricAuth(): Promise { throw this.unimplemented('Not implemented on web.'); } async loadExtension(options: capSQLiteExtensionPath): Promise { console.log('loadExtension', options); throw this.unimplemented('Not implemented on web.'); } async enableLoadExtension(options: capSQLiteExtensionEnable): Promise { console.log('enableLoadExtension', options); throw this.unimplemented('Not implemented on web.'); } }