UNPKG

rxdb

Version:

A local-first realtime NoSQL Database for JavaScript applications - https://rxdb.info/

65 lines (59 loc) 2.35 kB
import type { RxDatabase } from '../../types/index.d.ts'; export type CreateRxDatabaseFunctionType = (databaseName: string) => Promise<RxDatabase>; export function setFlutterRxDatabaseConnector( createDB: CreateRxDatabaseFunctionType ) { (process as any).init = async (databaseName: string) => { const db = await createDB(databaseName); db.eventBulks$.subscribe(eventBulk => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore sendRxDBEvent(JSON.stringify(eventBulk)); }); (process as any).db = db; const collections: { name: string; primaryKey: string; }[] = []; Object.entries(db.collections).forEach(([collectionName, collection]) => { collections.push({ name: collectionName, primaryKey: collection.schema.primaryPath }); }); return { databaseName, collections }; }; } /** * Create a simple lokijs adapter so that we can persist string via flutter * @link https://github.com/techfort/LokiJS/blob/master/tutorials/Persistence%20Adapters.md#creating-your-own-basic-persistence-adapter */ export function getLokijsAdapterFlutter() { const ret = { async loadDatabase(databaseName: string, callback: (v: string | Error) => {}) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore const serializedDb: string = await readKeyValue(databaseName); const success = true; if (success) { callback(serializedDb); } else { callback(new Error('There was a problem loading the database')); } }, async saveDatabase(databaseName: string, dbstring: string, callback: (v: string | Error | null) => {}) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore await persistKeyValue(databaseName, dbstring); const success = true; // make your own determinations if (success) { callback(null); } else { callback(new Error('An error was encountered loading " + dbname + " database.')); } } }; return ret; }