import { IStreamableDispatcher } from "@tandem/mesh"; import { IDisposable } from "@tandem/common/object"; import { ISerializable } from "@tandem/common/serialize"; import { Observable, IObservable } from "@tandem/common/observable"; import { IMessage } from "@tandem/mesh"; import { IInjectable } from "@tandem/common/ioc"; export interface IActiveRecord extends IObservable, IInjectable, IDisposable, ISerializable { collectionName: string; idProperty: string; source: T; save(): any; insert(): any; remove(): any; update(): any; /** * @deprecated */ serialize(): any; deserialize(value: any): any; } export declare abstract class BaseActiveRecord extends Observable implements IActiveRecord { private _source; readonly collectionName: string; protected dispatcher: IStreamableDispatcher; readonly idProperty: string; constructor(_source: T, collectionName: string); readonly isNew: boolean; readonly source: T; /** * Refreshes the active record from the DS if the source data * is stale. */ refresh(): Promise; save(): Promise; dispose(): void; insert(): Promise; remove(): Promise; protected readonly sourceQuery: { [x: string]: any; }; protected shouldUpdate(): boolean; /** * Called immediately before update() * @protected */ protected willUpdate(): void; /** * Called immediately before insert() and update() */ protected willSave(): void; update(): Promise; abstract serialize(): T; toJSON(): T; deserialize(source: T): void; protected shouldDeserialize(b: T): boolean; protected setPropertiesFromSource(source: T): void; fetch(request: IMessage): Promise; }