extendit icon indicating copy to clipboard operation
extendit copied to clipboard

Contribution points with type guards

Open forman opened this issue 2 years ago • 0 comments

Is your feature request related to a problem? Please describe.

  • We currently can only validate JSON entries against a given schema, but we cannot perform any integrity checks.
  • We currently cannot perform any validity/type checking on a code contribution c when registering it using registerCodeContribution<T>(c). We must rely on the user that c is valid and of type T.

Describe the solution you'd like

Allow for optional validators isEntryValid and isContributionValid to ManifestContributionInfo and CodeContributionInfo when defining a new ContributionPoint:

export interface ManifestContributionInfo<TM = unknown, TS = TM> {
  schema: JsonTypedSchema<TM> | JsonSchema;
  processEntry?: (entry: TM) => TS;
  isEntryValid(entry: unknown)?: entry is TM;  /* NEW */
}

export interface CodeContributionInfo<TS = unknown> {
  idKey?: KeyOfObjOrArrayItem<TS>;
  activationEvent?: string;
  isContributionValid<TC = unknown>(contrib: unknown)?: contrib is TC;  /* NEW */
}

forman avatar Nov 20 '23 17:11 forman