Changeset View
Changeset View
Standalone View
Standalone View
web/database/worker/db-worker.js
// @flow | // @flow | ||||
import localforage from 'localforage'; | import localforage from 'localforage'; | ||||
import initSqlJs, { type SqliteDatabase } from 'sql.js'; | import initSqlJs, { type SqliteDatabase } from 'sql.js'; | ||||
import { | import { | ||||
type SharedWorkerMessageEvent, | type SharedWorkerMessageEvent, | ||||
type WorkerRequestMessage, | type WorkerRequestMessage, | ||||
type WorkerResponseMessage, | type WorkerResponseMessage, | ||||
workerRequestMessageTypes, | workerRequestMessageTypes, | ||||
workerResponseMessageTypes, | workerResponseMessageTypes, | ||||
type WorkerRequestProxyMessage, | type WorkerRequestProxyMessage, | ||||
} from '../../types/worker-types.js'; | } from '../../types/worker-types.js'; | ||||
import { getSQLiteDBVersion } from '../queries/db-queries.js'; | |||||
import { SQLITE_CONTENT } from '../utils/constants.js'; | import { SQLITE_CONTENT } from '../utils/constants.js'; | ||||
const localforageConfig: PartialConfig = { | const localforageConfig: PartialConfig = { | ||||
driver: localforage.INDEXEDDB, | driver: localforage.INDEXEDDB, | ||||
name: 'comm', | name: 'comm', | ||||
storeName: 'commStorage', | storeName: 'commStorage', | ||||
description: 'Comm encrypted database storage', | description: 'Comm encrypted database storage', | ||||
version: '1.0', | version: '1.0', | ||||
Show All 16 Lines | async function initDatabase(sqljsFilePath: string, sqljsFilename: ?string) { | ||||
}); | }); | ||||
if (content) { | if (content) { | ||||
sqliteDb = new SQL.Database(new Uint8Array(content)); | sqliteDb = new SQL.Database(new Uint8Array(content)); | ||||
} else { | } else { | ||||
sqliteDb = new SQL.Database(); | sqliteDb = new SQL.Database(); | ||||
} | } | ||||
const versionData = sqliteDb.exec('PRAGMA user_version;'); | const dbVersion = getSQLiteDBVersion(sqliteDb); | ||||
if (!versionData.length || !versionData[0].values.length) { | |||||
throw new Error('Error while retrieving database version'); | |||||
} | |||||
const [dbVersion] = versionData[0].values[0]; | |||||
if (typeof dbVersion === 'number') { | |||||
console.info(`Db version: ${dbVersion}`); | console.info(`Db version: ${dbVersion}`); | ||||
} else { | |||||
throw new Error('Error while retrieving database version'); | |||||
} | |||||
} | } | ||||
async function processAppRequest( | async function processAppRequest( | ||||
message: WorkerRequestMessage, | message: WorkerRequestMessage, | ||||
): Promise<?WorkerResponseMessage> { | ): Promise<?WorkerResponseMessage> { | ||||
if (message.type === workerRequestMessageTypes.PING) { | if (message.type === workerRequestMessageTypes.PING) { | ||||
return { | return { | ||||
type: workerResponseMessageTypes.PONG, | type: workerResponseMessageTypes.PONG, | ||||
▲ Show 20 Lines • Show All 43 Lines • Show Last 20 Lines |