@cosmicmind/domainjs
Version:
A domain-driven design framework for scalable systems.
24 lines • 990 B
TypeScript
import { FoundationError } from '@cosmicmind/foundationjs';
import { Observable, ObservableTopics } from './Topic';
export type Message = Record<string, unknown>;
export type MessageTopics = ObservableTopics & {
readonly [K: string]: Message;
};
export declare class MessageObservable<T extends MessageTopics> extends Observable<T> {
}
export type MessagePropertyLifecycle<E extends Message, V> = {
required?: boolean;
validator?(value: V, message: E): boolean | never;
};
export type MessagePropertyLifecycleMap<E extends Message> = {
[K in keyof E]?: MessagePropertyLifecycle<E, E[K]>;
};
export declare class MessageError extends FoundationError {
}
export type MessageLifecycle<E extends Message> = {
created?(message: E): void;
error?(error: MessageError): void;
properties?: MessagePropertyLifecycleMap<E>;
};
export declare const defineMessage: <E extends Message>(handler?: MessageLifecycle<E>) => (message: E) => E;
//# sourceMappingURL=Message.d.ts.map