UNPKG

breeze-sequelize

Version:
97 lines (96 loc) 3.54 kB
import { EntityType, KeyMapping, MetadataStore, SaveOptions } from "breeze-client"; import { BaseError, Transaction } from "sequelize"; import { SaveMap } from "./SaveMap"; import { KeyGenerator, SequelizeManager } from "./SequelizeManager"; export interface OpenObj { [k: string]: any; } export declare type ServerEntityState = "Added" | "Deleted" | "Modified"; /** Save bundle from breeze client */ export interface SaveRequest { body: { entities: ServerEntity[]; saveOptions?: SaveOptions; }; } /** Server-side representation of entity that came from the client */ export interface ServerEntityInfo { entity: ServerEntity; entityType: EntityType; wasAddedOnServer?: boolean; forceUpdate?: boolean; unmapped?: any; entityAspect: ServerEntityAspect; } export interface ServerEntity { [k: string]: any; entityAspect: ServerEntityAspect; } export interface ServerEntityAspect { entityTypeName: string; defaultResourceName: string; entityState: ServerEntityState; entity?: ServerEntity; autoGeneratedKey?: { autoGeneratedKeyType: string; propertyName?: string; }; originalValuesMap?: { [prop: string]: any; }; } export declare type ServerSaveResult = ServerGoodSaveResult | ServerBadSaveResult; export interface ServerGoodSaveResult { entities: OpenObj[]; keyMappings: KeyMapping[]; } export interface ServerBadSaveResult { errors: any[]; message: string; [k: string]: any; } export declare class ServerSaveError extends Error { entityErrors: ServerEntityError[]; constructor(m: string, entityErrors?: ServerEntityError[]); } export declare class SequelizeSaveError extends Error { entity: OpenObj; entityState: ServerEntityState; constructor(e: BaseError, entity: OpenObj, entityState?: ServerEntityState); } /** Validation error created on the server */ export interface ServerEntityError { entityTypeName: string; errorName: string; errorMessage: string; propertyName: string; keyValues: any[]; } export declare type BeforeSaveEntityFn = (e: ServerEntityInfo) => boolean; export declare type BeforeSaveEntitiesFn = (sm: SaveMap, trx?: Transaction) => Promise<SaveMap>; /** Handles saving entities from Breeze SaveChanges requests */ export declare class SequelizeSaveHandler { readonly sequelizeManager: SequelizeManager; readonly metadataStore: MetadataStore; readonly entitiesFromClient: ServerEntity[]; saveOptions: SaveOptions; private _keyMappings; private _fkFixupMap; private _savedEntities; /** Generates keys for entity types where autoGeneratedKeyType = "KeyGenerator" */ keyGenerator: KeyGenerator; /** Process an entity before save. If false is returned, entity is not saved. */ beforeSaveEntity: BeforeSaveEntityFn; /** Process all entities before save. The entities in the returned SaveMap are saved. */ beforeSaveEntities: BeforeSaveEntitiesFn; /** Create an instance for the given save request */ constructor(sequelizeManager: SequelizeManager, req: SaveRequest); /** Save the entities in the save request, returning either the saved entities or an error collection */ save(): Promise<ServerSaveResult>; private _saveWithTransaction; private _saveCore; private _processEntityGroup; private _saveEntityAsync; private _addToResults; private _coerceData; }