export class EventType<
TYPE extends string = string,
PAYLOAD = string extends TYPE ? unknown : never,
METADATA = string extends TYPE ? unknown : never,
> {
_types?: {
detail: EventDetail<TYPE, PAYLOAD, METADATA>;
};
type: TYPE;
parseEventDetail?: (candidate: unknown) =>
| {
isValid: true;
parsedEventDetail: EventDetail<TYPE, PAYLOAD, METADATA>;
parsingErrors?: never;
}
| {
isValid: false;
parsedEventDetail?: never;
parsingErrors?: [Error, ...Error[]];
};
(dans core/event/eventType)
- L'implémenter en pratique sur zod-event et json-schema-event
Avec la subtilité qu'il te faut un validateur dans le constructeur de la classe json-schema-event
Par ex une fonction compile(schema) => parseEventDetail
Ajouter l'option validate en input de pushEvent et groupEvent de la classe EventStore
Qui vaut boolean | "auto" , avec "auto" = valeur par défaut
Dans pushEvent et groupEvent:
Si validate est false, continuer comme avante
Sinon, chercher l'event-type qui correspond à l'event d'entrée, regarder s'il a une méthode parseEventDetail
Throw si validate est true et il n'y en a pas
Sinon, parser l'event d'entrée
En cas d'erreur de validation, re-throw la première erreur
(dans core/event/eventType)
Avec la subtilité qu'il te faut un validateur dans le constructeur de la classe json-schema-event
Par ex une fonction compile(schema) => parseEventDetail
Ajouter l'option validate en input de pushEvent et groupEvent de la classe EventStore
Qui vaut boolean | "auto" , avec "auto" = valeur par défaut
Dans pushEvent et groupEvent:
Si validate est false, continuer comme avante
Sinon, chercher l'event-type qui correspond à l'event d'entrée, regarder s'il a une méthode parseEventDetail
Throw si validate est true et il n'y en a pas
Sinon, parser l'event d'entrée
En cas d'erreur de validation, re-throw la première erreur