@targetprocess/sync-shared-model
Version:
Shared model for Targetprocess entity sync
104 lines (103 loc) • 3.03 kB
TypeScript
import { FieldModification } from './fields';
export * from './fields';
export * from './constants';
export declare type ToolRef = {
id: string;
type: string;
};
export declare type EntityRef = {
sourceId: string;
entityType: string;
};
export declare type EventType = 'EntityChanged' | 'SingleEntityChanged' | 'RelationAdded' | 'RelationRemoved';
export declare type ComputationContext = {
originatorId: string;
parentComputationId?: string;
};
export declare type BaseEvent = {
id: string;
account: string;
toolRef: ToolRef;
type: EventType;
timestamps?: EventTimestamps;
author?: EntityRef | undefined;
computationContext: ComputationContext;
};
export declare type EventTimestamps = {
generatedAt: number;
receivedAt: number;
convertedAt: number;
};
export declare type EntityChangeEvent = BaseEvent & {
entities: EntityDelta[];
type: 'EntityChanged';
};
export declare type SingleEntityChangeEvent = BaseEvent & {
entityChange: EntityDelta;
type: 'SingleEntityChanged';
};
export declare type Relation = {
relationType: string;
propertyName?: string;
direction?: RelationDirection;
};
export declare enum RelationDirection {
Inbound = "Inbound",
Outbound = "Outbound"
}
export declare type EntityRelation = Relation & EntityRef;
export declare type RelationEvent = BaseEvent & {
type: 'RelationAdded' | 'RelationRemoved';
source: EntityRef;
relations: EntityRelation[];
};
export declare type EntityFields = {
state?: EntityState;
};
export declare type Entity = EntityRef & EntityFields;
export declare type EntityState = {
sourceId: string;
name: string;
isInitial: boolean;
isPlanned: boolean;
isFinal: boolean;
};
export declare type EntityModification = 'Created' | 'Updated' | 'Deleted';
export declare type EntityDelta = {
entity: Entity;
modification?: EntityModification | undefined;
changed?: any | undefined;
original?: any | undefined;
changedFields?: string[] | undefined;
};
export declare type EntityCommandType = 'Update' | 'RelationAdded' | 'RelationRemoved';
export declare type CommandTimestamps = {
createdAt: number;
};
export declare type EntityChangeCommandBase = {
account: string;
rule: Rule;
computationContext: ComputationContext;
toolRef: ToolRef;
name: EntityCommandType;
entity: EntityRef;
timestamps?: CommandTimestamps;
event: {
id: string;
timestamps: EventTimestamps;
};
};
export declare type UpdateEntityCommand = EntityChangeCommandBase & {
name: 'Update';
payload?: any;
fieldModifications: FieldModification[];
};
export declare type RelationCommand = EntityChangeCommandBase & {
name: 'RelationAdded' | 'RelationRemoved';
relations: EntityRelation[];
};
export declare type Rule = {
id: string;
};
export declare function getEntityIdentity(entity: EntityRef, tool: ToolRef): string;
export declare function getToolIdentity(tool: ToolRef): string;