UNPKG

@type-r/models

Version:

The serializable type system for JS and TypeScript

85 lines (84 loc) 3.47 kB
import { IOEndpoint, IONode, IOPromise } from './io-tools'; import { Logger, Messenger, MessengerDefinition, MixinsState } from '@type-r/mixture'; import { Traversable } from './traversable'; import { Validatable, ValidationError } from './validation'; import { Linked } from '@linked/value/lib'; export interface TransactionalDefinition extends MessengerDefinition { endpoint?: IOEndpoint; } export declare enum ItemsBehavior { share = 1, listen = 2, persistent = 4 } export interface Transactional extends Messenger { } export declare abstract class Transactional implements Messenger, IONode, Validatable, Traversable { static endpoint: IOEndpoint; static mixins: MixinsState; static define: (definition?: TransactionalDefinition, statics?: object) => typeof Transactional; static extend: <T extends TransactionalDefinition>(definition?: T, statics?: object) => any; static onDefine(definitions: TransactionalDefinition, BaseClass: typeof Transactional): void; static onExtend(BaseClass: typeof Transactional): void; static create<M extends new (...args: any[]) => any>(this: M, a?: any, b?: any): InstanceType<M>; dispose(): void; cidPrefix: string; onChanges(handler: Function, target?: Messenger): void; offChanges(handler?: Function, target?: Messenger): void; listenToChanges(target: Transactional, handler: any): void; constructor(cid: string | number); abstract clone(options?: CloneOptions): this; transaction(fun: (self: this) => void, options?: TransactionOptions): void; assignFrom(a_source: Transactional | Object | Linked<Transactional>): this; static from<T extends new (a?: any, b?: any) => Transactional>(this: T, json: any, { strict, ...options }?: { strict?: boolean; } & TransactionOptions): InstanceType<T>; abstract set(values: any, options?: TransactionOptions): this; parse(data: any, options?: TransactionOptions): any; abstract toJSON(options?: object): {}; abstract get(key: string): any; deepGet(reference: string): any; getOwner(): Owner; getStore(): Transactional; hasPendingIO(): IOPromise<this>; getEndpoint(): IOEndpoint; readonly validationError: ValidationError; validate(obj?: Transactional): any; getValidationError(key?: string): any; deepValidationError(reference: string): any; eachValidationError(iteratee: (error: any, key: string, object: Transactional) => void): void; isValid(key?: string): boolean; valueOf(): Object; toString(): string; getClassName(): string; } export interface CloneOptions { pinStore?: boolean; } export interface Owner extends Traversable, Messenger { getOwner(): Owner; getStore(): Transactional; } export interface Transaction { object: Transactional; commit(initiator?: Transactional): any; } export interface TransactionOptions { parse?: boolean; logger?: Logger; silent?: boolean; merge?: boolean; remove?: boolean; reset?: boolean; unset?: boolean; validate?: boolean; ioMethod?: 'save' | 'fetch'; upsert?: boolean; } export declare const transactionApi: { begin(object: Transactional): boolean; markAsDirty(object: Transactional, options: TransactionOptions): boolean; commit(object: Transactional, initiator?: Transactional): void; aquire(owner: Owner, child: Transactional, key?: string): void; free(owner: Owner, child: Transactional): void; };