Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add validation at pushEvent & commands #136

Open
ThomasAribart opened this issue Aug 4, 2023 · 0 comments
Open

Add validation at pushEvent & commands #136

ThomasAribart opened this issue Aug 4, 2023 · 0 comments

Comments

@ThomasAribart
Copy link
Contributor

ThomasAribart commented Aug 4, 2023

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 ThomasAribart converted this from a draft issue Aug 4, 2023
@ThomasAribart ThomasAribart moved this from In Progress to Todo in Castore roadmap Sep 29, 2023
@ThomasAribart ThomasAribart moved this from Todo to In Progress in Castore roadmap Nov 3, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: In Progress
Development

No branches or pull requests

1 participant