@capacitor-community/sqlite
Version:
Community plugin for native & electron SQLite databases
590 lines (506 loc) • 17.8 kB
text/typescript
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<void> {
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<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.saveToStore(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async getFromLocalDiskToStore(options: capSQLiteLocalDiskOptions): Promise<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.getFromLocalDiskToStore(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async saveToLocalDisk(options: capSQLiteOptions): Promise<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.saveToLocalDisk(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async echo(options: capEchoOptions): Promise<capEchoResult> {
this.ensureJeepSqliteIsAvailable();
const echoResult = await this.jeepSqliteElement.echo(options);
return echoResult;
}
async createConnection(options: capConnectionOptions): Promise<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.createConnection(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async open(options: capSQLiteOptions): Promise<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.open(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async closeConnection(options: capSQLiteOptions): Promise<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.closeConnection(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async getVersion(options: capSQLiteOptions): Promise<capVersionResult> {
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<capSQLiteResult> {
this.ensureJeepSqliteIsAvailable();
try {
const consistencyResult: capSQLiteResult = await this.jeepSqliteElement.checkConnectionsConsistency(options);
return consistencyResult;
} catch (err) {
throw new Error(`${err}`);
}
}
async close(options: capSQLiteOptions): Promise<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.close(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async beginTransaction(options: capSQLiteOptions): Promise<capSQLiteChanges> {
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<capSQLiteChanges> {
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<capSQLiteChanges> {
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<capSQLiteResult> {
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<capSQLiteValues> {
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<capSQLiteChanges> {
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<capSQLiteChanges> {
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<capSQLiteChanges> {
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<capSQLiteValues> {
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<capSQLiteResult> {
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<capSQLiteResult> {
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<capSQLiteResult> {
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<capSQLiteResult> {
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<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.deleteDatabase(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async isJsonValid(options: capSQLiteImportOptions): Promise<capSQLiteResult> {
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<capSQLiteChanges> {
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<capSQLiteJson> {
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<capSQLiteChanges> {
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<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.setSyncDate(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async getSyncDate(options: capSQLiteOptions): Promise<capSQLiteSyncDate> {
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<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.deleteExportedRows(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async addUpgradeStatement(options: capSQLiteUpgradeOptions): Promise<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.addUpgradeStatement(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async copyFromAssets(options: capSQLiteFromAssetsOptions): Promise<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.copyFromAssets(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async getFromHTTPRequest(options: capSQLiteHTTPOptions): Promise<void> {
this.ensureJeepSqliteIsAvailable();
this.ensureWebstoreIsOpen();
try {
await this.jeepSqliteElement.getFromHTTPRequest(options);
return;
} catch (err) {
throw new Error(`${err}`);
}
}
async getDatabaseList(): Promise<capSQLiteValues> {
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 -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<capSQLiteUrl> {
throw this.unimplemented('Not implemented on web.');
}
async getMigratableDbList(options: capSQLitePathOptions): Promise<capSQLiteValues> {
console.log('getMigratableDbList', options);
throw this.unimplemented('Not implemented on web.');
}
async addSQLiteSuffix(options: capSQLitePathOptions): Promise<void> {
console.log('addSQLiteSuffix', options);
throw this.unimplemented('Not implemented on web.');
}
async deleteOldDatabases(options: capSQLitePathOptions): Promise<void> {
console.log('deleteOldDatabases', options);
throw this.unimplemented('Not implemented on web.');
}
async moveDatabasesAndAddSuffix(options: capSQLitePathOptions): Promise<void> {
console.log('moveDatabasesAndAddSuffix', options);
throw this.unimplemented('Not implemented on web.');
}
async isSecretStored(): Promise<capSQLiteResult> {
throw this.unimplemented('Not implemented on web.');
}
async setEncryptionSecret(options: capSetSecretOptions): Promise<void> {
console.log('setEncryptionSecret', options);
throw this.unimplemented('Not implemented on web.');
}
async changeEncryptionSecret(options: capChangeSecretOptions): Promise<void> {
console.log('changeEncryptionSecret', options);
throw this.unimplemented('Not implemented on web.');
}
async clearEncryptionSecret(): Promise<void> {
console.log('clearEncryptionSecret');
throw this.unimplemented('Not implemented on web.');
}
async checkEncryptionSecret(options: capSetSecretOptions): Promise<capSQLiteResult> {
console.log('checkEncryptionPassPhrase', options);
throw this.unimplemented('Not implemented on web.');
}
async getNCDatabasePath(options: capNCDatabasePathOptions): Promise<capNCDatabasePathResult> {
console.log('getNCDatabasePath', options);
throw this.unimplemented('Not implemented on web.');
}
async createNCConnection(options: capNCConnectionOptions): Promise<void> {
console.log('createNCConnection', options);
throw this.unimplemented('Not implemented on web.');
}
async closeNCConnection(options: capNCOptions): Promise<void> {
console.log('closeNCConnection', options);
throw this.unimplemented('Not implemented on web.');
}
async isNCDatabase(options: capNCOptions): Promise<capSQLiteResult> {
console.log('isNCDatabase', options);
throw this.unimplemented('Not implemented on web.');
}
async isDatabaseEncrypted(options: capSQLiteOptions): Promise<capSQLiteResult> {
console.log('isDatabaseEncrypted', options);
throw this.unimplemented('Not implemented on web.');
}
async isInConfigEncryption(): Promise<capSQLiteResult> {
throw this.unimplemented('Not implemented on web.');
}
async isInConfigBiometricAuth(): Promise<capSQLiteResult> {
throw this.unimplemented('Not implemented on web.');
}
async loadExtension(options: capSQLiteExtensionPath): Promise<void> {
console.log('loadExtension', options);
throw this.unimplemented('Not implemented on web.');
}
async enableLoadExtension(options: capSQLiteExtensionEnable): Promise<void> {
console.log('enableLoadExtension', options);
throw this.unimplemented('Not implemented on web.');
}
}