castore
castore copied to clipboard
Add validation at pushEvent & commands
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