// Copyright IBM Corp. 2018. All Rights Reserved. // Node module: loopback-datasource-juggler // This file is licensed under the MIT License. // License text available at https://opensource.org/licenses/MIT import {AnyObject, Callback, Options, PromiseOrVoid} from './common'; import {ModelData} from './model'; import { Count, PersistedData, PersistedModel, PersistedModelClass, } from './persisted-model'; import {Filter, Where} from './query'; /** * Relation types */ export enum RelationType { belongsTo = 'belongsTo', hasMany = 'hasMany', hasOne = 'hasOne', hasAndBelongsToMany = 'hasAndBelongsToMany', referencesMany = 'referencesMany', embedsOne = 'embedsOne', embedsMany = 'embedsMany', } /** * Relation definition */ export declare class RelationDefinition { name: string; type: RelationType; modelFrom: PersistedModelClass | string; keyFrom: string; modelTo: PersistedModelClass | string; keyTo: string; polymorphic: AnyObject | boolean; modelThrough?: PersistedModelClass | string; keyThrough?: string; multiple: boolean; properties: AnyObject; options: Options; scope: AnyObject; embed?: boolean; methods?: AnyObject; toJSON(): AnyObject; defineMethod(name: string, fn: Function): Function; applyScope(modelInstance: PersistedData, filter: Filter): void; applyProperties(modelInstance: PersistedData, obj: AnyObject): void; } /** * Relation of a given model instance */ export declare class Relation< S extends PersistedModel = PersistedModel, T extends PersistedModel = PersistedModel > { constructor(definition: RelationDefinition, modelInstance: S); resetCache(cache: T): void; getCache(): AnyObject; callScopeMethod(methodName: string, ...args: any[]): any; fetch( condOrRefresh: boolean | AnyObject, options?: Options, callback?: Callback, ): PromiseOrVoid; } export declare class BelongsTo< S extends PersistedModel = PersistedModel, T extends PersistedModel = PersistedModel > extends Relation { create( targetModelData: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; build(targetModelData: PersistedData): T; update( targetModelData: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; destroy( options?: Options, callback?: Callback, ): PromiseOrVoid; related( condOrRefresh: boolean | AnyObject, options?: Options, callback?: Callback, ): PromiseOrVoid; get(options?: Options, callback?: Callback): PromiseOrVoid; } export declare class HasMany< S extends PersistedModel = PersistedModel, T extends PersistedModel = PersistedModel > extends Relation { removeFromCache(id: any): T | null; addToCache(inst: T): void; findById( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; exists( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; updateById( fkId: any, data: ModelData, options?: Options, callback?: Callback, ): PromiseOrVoid; destroyById( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; } export declare class HasManyThrough< S extends PersistedModel = PersistedModel, T extends PersistedModel = PersistedModel > extends Relation { findById( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; destroyById( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; create( data: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; add( acInst: any, data: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; exists( acInst: any, options?: Options, callback?: Callback, ): PromiseOrVoid; remove( acInst: any, options?: Options, callback?: Callback, ): PromiseOrVoid; } export declare class HasOne< S extends PersistedModel = PersistedModel, T extends PersistedModel = PersistedModel > extends Relation { create( targetModelData: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; update( targetModelData: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; destroy( options?: Options, callback?: Callback, ): PromiseOrVoid; build(targetModelData: PersistedData): T; related( condOrRefresh: any, options?: Options, callback?: Callback, ): PromiseOrVoid; get(options?: Options, callback?: Callback): PromiseOrVoid; } export declare class HasAndBelongsToMany< S extends PersistedModel = PersistedModel, T extends PersistedModel = PersistedModel > extends Relation {} export declare class ReferencesMany< S extends PersistedModel = PersistedModel, T extends PersistedModel = PersistedModel > extends Relation { related( receiver: PersistedModelClass, scopeParams: AnyObject, condOrRefresh: any, options?: Options, callback?: Callback, ): PromiseOrVoid; findById( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; exists( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; updateById( fkId: any, data: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; destroyById( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; at( index: number, options?: Options, callback?: Callback, ): PromiseOrVoid; create( targetModelData: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; build(targetModelData: PersistedData): T; add( acInst: any, options?: Options, callback?: Callback, ): PromiseOrVoid; remove( acInst: any, options?: Options, callback?: Callback, ): PromiseOrVoid; } export declare class EmbedsOne< S extends PersistedModel = PersistedModel, T extends PersistedModel = PersistedModel > extends Relation { related( condOrRefresh: any, options?: Options, callback?: Callback, ): PromiseOrVoid; prepareEmbeddedInstance(inst: T): void; embeddedValue(modelInstance: S): T; create( targetModelData: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; build(targetModelData: PersistedData): T; update( targetModelData: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; destroy( options?: Options, callback?: Callback, ): PromiseOrVoid; } export declare class EmbedsMany< S extends PersistedModel = PersistedModel, T extends PersistedModel = PersistedModel > extends Relation { prepareEmbeddedInstance(inst: T): void; embeddedList(modelInstance: T[]): void; embeddedValue(modelInstance: S): T[]; related( receiver: PersistedModelClass, scopeParams: AnyObject, condOrRefresh: any, options?: Options, callback?: Callback, ): PromiseOrVoid; findById( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; get( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; exists( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; updateById( fkId: any, data: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; set( fkId: any, data: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; destroyById( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; unset( fkId: any, options?: Options, callback?: Callback, ): PromiseOrVoid; destroyAll( where: Where, options?: Options, callback?: Callback, ): PromiseOrVoid; at(index: number, callback?: Callback): PromiseOrVoid; create( targetModelData: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; build(targetModelData: PersistedData): T; add( acInst: any, data: PersistedData, options?: Options, callback?: Callback, ): PromiseOrVoid; remove( acInst: any, options?: Options, callback?: Callback, ): PromiseOrVoid; }