@contentgrid/problem-details
Version:
RFC9547 Problem Details types and helpers
1 lines • 2.9 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["export interface ProblemDetail {\n readonly type?: string;\n readonly status: number;\n readonly title: string;\n readonly detail?: string;\n readonly instance?: string;\n}\n\nexport async function fromResponse<T extends ProblemDetail>(response: Response): Promise<T | null> {\n if(response.ok) {\n return null;\n }\n if(response.headers.get(\"content-type\")?.toLowerCase() !== \"application/problem+json\") {\n return {\n status: response.status,\n title: response.statusText\n } as T;\n }\n\n const data = await response.json();\n\n data.status ??= response.status;\n data.title ??= response.statusText;\n if(data.type === null || data.type === \"about:blank\") {\n delete data.type;\n }\n\n return data as T;\n}\n\nexport class ProblemDetailError<T extends ProblemDetail> extends Error {\n constructor(public readonly problemDetail: T) {\n super(problemDetail.title);\n this.name = 'ProblemDetailError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport async function checkResponse(response: Response): Promise<Response> {\n const problem = await fromResponse(response);\n\n if(problem !== null) {\n throw new ProblemDetailError(problem);\n }\n\n return response;\n}\n"],"names":["fromResponse","response","ok","_a","headers","get","toLowerCase","status","title","statusText","data","json","_b","_c","type","ProblemDetailError","Error","constructor","problemDetail","name","Object","setPrototypeOf","new","target","prototype","checkResponse","problem"],"mappings":"AAQO,eAAeA,YAAYA,CAA0BC,QAAkB,EAAA;;EAC1E,IAAGA,QAAQ,CAACC,EAAE,EAAE;AACZ,IAAA,OAAO,IAAI;AACf;AACA,EAAA,IAAG,CAAA,CAAAC,EAAA,GAAAF,QAAQ,CAACG,OAAO,CAACC,GAAG,CAAC,cAAc,CAAC,0CAAEC,WAAW,EAAE,MAAK,0BAA0B,EAAE;IACnF,OAAO;MACHC,MAAM,EAAEN,QAAQ,CAACM,MAAM;MACvBC,KAAK,EAAEP,QAAQ,CAACQ;KACd;AACV;AAEA,EAAA,MAAMC,IAAI,GAAG,MAAMT,QAAQ,CAACU,IAAI,EAAE;EAElC,CAAAC,EAAA,GAAAF,IAAI,CAACH,MAAM,MAAX,IAAA,IAAAK,EAAA,KAAA,MAAA,GAAAA,EAAA,GAAAF,IAAI,CAACH,MAAM,GAAKN,QAAQ,CAACM,MAAO;EAChC,CAAAM,EAAA,GAAAH,IAAI,CAACF,KAAK,MAAV,IAAA,IAAAK,EAAA,KAAA,MAAA,GAAAA,EAAA,GAAAH,IAAI,CAACF,KAAK,GAAKP,QAAQ,CAACQ,UAAW;EACnC,IAAGC,IAAI,CAACI,IAAI,KAAK,IAAI,IAAIJ,IAAI,CAACI,IAAI,KAAK,aAAa,EAAE;IAClD,OAAOJ,IAAI,CAACI,IAAI;AACpB;AAEA,EAAA,OAAOJ,IAAS;AACpB;AAEM,MAAOK,kBAA4C,SAAQC,KAAK,CAAA;EAClEC,WAAAA,CAA4BC,aAAgB,EAAA;AACxC,IAAA,KAAK,CAACA,aAAa,CAACV,KAAK,CAAC;IADF,IAAa,CAAAU,aAAA,GAAbA,aAAa;IAErC,IAAI,CAACC,IAAI,GAAG,oBAAoB;IAChCC,MAAM,CAACC,cAAc,CAAC,IAAI,EAAEC,GAAG,CAACC,MAAM,CAACC,SAAS,CAAC;AACrD;AACH;AAEM,eAAeC,aAAaA,CAACxB,QAAkB,EAAA;AAClD,EAAA,MAAMyB,OAAO,GAAG,MAAM1B,YAAY,CAACC,QAAQ,CAAC;EAE5C,IAAGyB,OAAO,KAAK,IAAI,EAAE;AACjB,IAAA,MAAM,IAAIX,kBAAkB,CAACW,OAAO,CAAC;AACzC;AAEA,EAAA,OAAOzB,QAAQ;AACnB;;;;"}