PDMLab/http-problem-details

Is the ProblemDocument class really neessary?

tpluscode opened this issue · 3 comments

Working some more with this and related libraries I'm repeatedly thinking whether the ProblemDocument really needs to be a class?

Wouldn't it be enough to simply define a contract for a problem document and have mapper return plain objects?

interface ProblemDocument extends Record<string, unknown> {
    detail?: string;
    instance?: string;
    status: number;
    title: string;
    type?: string;
}

class Mapper {
  mapError(error): ProblemDocument {
    return {
      status: 500,
      title: 'Something happened'
    }
  }
}

This would simplify how extensions are implemented and make it easier to work with derived or decorated mappers

And as alternative to the Record<> type, we could keep a closed interface and have consumers extend with module augmentation

declare module 'http-problem-details' {
  interface ProblemDocument {
    extendingField?: string[]
  }
}

Please send a PR.

Definitely, will do.