UNPKG

@nozbe/watermelondb

Version:

Build powerful React Native and React web apps that scale from hundreds to tens of thousands of records and remain fast

56 lines (39 loc) 1.45 kB
import { $NonMaybeType, $Exact, $Call } from '../types' import type { Observable } from '../utils/rx' import type Model from '../Model' import type { RecordId } from '../Model' import type { ColumnName, TableName } from '../Schema' type ExtractRecordIdNonOptional = <T extends Model = Model>(value: T) => RecordId type ExtractRecordIdOptional = <T extends Model = Model>(value: T) => RecordId type ExtractRecordId = ExtractRecordIdNonOptional & ExtractRecordIdOptional export type Options = $Exact<{ isImmutable: boolean }> // Defines a one-to-one relation between two Models (two tables in db) // Do not create this object directly! Use `relation` or `immutableRelation` decorators instead export default class Relation<T extends Model> { // Used by withObservables to differentiate between object types static _wmelonTag: string _model: Model _columnName: ColumnName _relationTableName: TableName<$NonMaybeType<T>> _isImmutable: boolean // TODO: FIX TS // @lazy _cachedObservable: Observable<T> constructor( model: Model, relationTableName: TableName<$NonMaybeType<T>>, columnName: ColumnName, options: Options, ) get id(): $Call<ExtractRecordId, T> set id(newId: $Call<ExtractRecordId, T>) fetch(): Promise<T> then<U>( onFulfill?: (value: T) => Promise<U> | U, onReject?: (error: any) => Promise<U> | U, ): Promise<U> set(record: T): void observe(): Observable<T> }