UNPKG

rxdb

Version:

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

64 lines (55 loc) 2.11 kB
import type { RxStorage, RxStorageInstanceCreationParams } from '../../types/index.d.ts'; import { RX_STORAGE_NAME_DEXIE } from './dexie-helper.ts'; import type { DexieSettings, DexieStorageInternals } from '../../types/plugins/dexie.d.ts'; import { createDexieStorageInstance, RxStorageInstanceDexie } from './rx-storage-instance-dexie.ts'; import { ensureRxStorageInstanceParamsAreCorrect } from '../../rx-storage-helper.ts'; import { RXDB_VERSION } from '../utils/utils-rxdb-version.ts'; import { getSchemaByObjectPath } from '../../rx-schema-helper.ts'; import { newRxError } from '../../rx-error.ts'; export class RxStorageDexie implements RxStorage<DexieStorageInternals, DexieSettings> { public name = RX_STORAGE_NAME_DEXIE; public readonly rxdbVersion = RXDB_VERSION; constructor( public settings: DexieSettings ) { } public createStorageInstance<RxDocType>( params: RxStorageInstanceCreationParams<RxDocType, DexieSettings> ): Promise<RxStorageInstanceDexie<RxDocType>> { ensureRxStorageInstanceParamsAreCorrect(params); /** * Dexie does not support non-required indexes and must throw if that is used. * @link https://github.com/pubkey/rxdb/pull/6643#issuecomment-2505310082 */ if (params.schema.indexes) { const indexFields = params.schema.indexes.flat(); indexFields .filter(indexField => !indexField.includes('.')) .forEach(indexField => { if (!params.schema.required || !params.schema.required.includes(indexField as any)) { throw newRxError('DXE1', { field: indexField, schema: params.schema, }); } }); } return createDexieStorageInstance(this, params, this.settings); } } export function getRxStorageDexie( settings: DexieSettings = {} ): RxStorageDexie { const storage = new RxStorageDexie(settings); return storage; }