castore icon indicating copy to clipboard operation
castore copied to clipboard

Add validation at pushEvent & commands

Open ThomasAribart opened this issue 2 years ago • 0 comments

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

ThomasAribart avatar Aug 04 '23 13:08 ThomasAribart