{"version":3,"file":"normalizeAPIError.mjs","sources":["../../../admin/src/utils/normalizeAPIError.ts"],"sourcesContent":["import type { FetchError } from '@strapi/admin/strapi-admin';\nimport type { errors } from '@strapi/utils';\n\ntype ApiError = InstanceType<(typeof errors)[keyof typeof errors]>;\n\ninterface NormalizeErrorOptions {\n  name?: string;\n  intlMessagePrefixCallback?: (id: string) => string;\n}\n\ninterface NormalizeErrorReturn {\n  id: string;\n  defaultMessage: string;\n  name?: string;\n  values: Record<'path', string> | Record<string, never>;\n}\n\ninterface YupFormattedError {\n  path: string[];\n  message: string;\n  name: string;\n  value: string;\n}\n\nfunction getPrefixedId(message: string, callback?: (prefixedMessage: string) => string) {\n  const prefixedMessage = `apiError.${message}`;\n\n  // if a prefix function has been passed in it is used to\n  // prefix the id, e.g. to allow an error message to be\n  // set only for a localization namespace\n  if (typeof callback === 'function') {\n    return callback(prefixedMessage);\n  }\n\n  return prefixedMessage;\n}\n\nfunction normalizeError(\n  error: ApiError | YupFormattedError,\n  { name, intlMessagePrefixCallback }: NormalizeErrorOptions\n): NormalizeErrorReturn {\n  const { message } = error;\n\n  const normalizedError = {\n    id: getPrefixedId(message, intlMessagePrefixCallback),\n    defaultMessage: message,\n    name: error.name ?? name,\n    values: {},\n  };\n\n  if ('path' in error) {\n    normalizedError.values = { path: error.path.join('.') };\n  }\n\n  return normalizedError;\n}\n\nconst validateErrorIsYupValidationError = (\n  err: ApiError\n): err is errors.YupValidationError & { details: { errors: YupFormattedError[] } } =>\n  typeof err.details === 'object' && err.details !== null && 'errors' in err.details;\n\n/**\n * Normalize the format of `ResponseError`\n * in places where the hook `useAPIErrorHandler` can not called\n * (e.g. outside of a React component).\n */\nexport function normalizeAPIError(\n  apiError: FetchError,\n  intlMessagePrefixCallback?: NormalizeErrorOptions['intlMessagePrefixCallback']\n):\n  | NormalizeErrorReturn\n  | { name: string; message: string | null; errors: NormalizeErrorReturn[] }\n  | null {\n  const error = apiError.response?.data.error;\n\n  if (error) {\n    // some errors carry multiple errors (such as ValidationError)\n    if (validateErrorIsYupValidationError(error)) {\n      return {\n        name: error.name,\n        message: error?.message || null,\n        errors: error.details.errors.map((err) =>\n          normalizeError(err, { name: error.name, intlMessagePrefixCallback })\n        ),\n      };\n    }\n\n    return normalizeError(error, { intlMessagePrefixCallback });\n  }\n\n  return null;\n}\n"],"names":["getPrefixedId","message","callback","prefixedMessage","normalizeError","error","name","intlMessagePrefixCallback","normalizedError","id","defaultMessage","values","path","join","validateErrorIsYupValidationError","err","details","normalizeAPIError","apiError","response","data","errors","map"],"mappings":"AAwBA,SAASA,aAAAA,CAAcC,OAAe,EAAEC,QAA8C,EAAA;AACpF,IAAA,MAAMC,eAAAA,GAAkB,CAAC,SAAS,EAAEF,OAAAA,CAAAA,CAAS;;;;IAK7C,IAAI,OAAOC,aAAa,UAAA,EAAY;AAClC,QAAA,OAAOA,QAAAA,CAASC,eAAAA,CAAAA;AAClB,IAAA;IAEA,OAAOA,eAAAA;AACT;AAEA,SAASC,eACPC,KAAmC,EACnC,EAAEC,IAAI,EAAEC,yBAAyB,EAAyB,EAAA;IAE1D,MAAM,EAAEN,OAAO,EAAE,GAAGI,KAAAA;AAEpB,IAAA,MAAMG,eAAAA,GAAkB;AACtBC,QAAAA,EAAAA,EAAIT,cAAcC,OAAAA,EAASM,yBAAAA,CAAAA;QAC3BG,cAAAA,EAAgBT,OAAAA;QAChBK,IAAAA,EAAMD,KAAAA,CAAMC,IAAI,IAAIA,IAAAA;AACpBK,QAAAA,MAAAA,EAAQ;AACV,KAAA;AAEA,IAAA,IAAI,UAAUN,KAAAA,EAAO;AACnBG,QAAAA,eAAAA,CAAgBG,MAAM,GAAG;AAAEC,YAAAA,IAAAA,EAAMP,KAAAA,CAAMO,IAAI,CAACC,IAAI,CAAC,GAAA;AAAK,SAAA;AACxD,IAAA;IAEA,OAAOL,eAAAA;AACT;AAEA,MAAMM,iCAAAA,GAAoC,CACxCC,GAAAA,GAEA,OAAOA,IAAIC,OAAO,KAAK,QAAA,IAAYD,GAAAA,CAAIC,OAAO,KAAK,IAAA,IAAQ,QAAA,IAAYD,IAAIC,OAAO;AAEpF;;;;AAIC,IACM,SAASC,iBAAAA,CACdC,QAAoB,EACpBX,yBAA8E,EAAA;AAK9E,IAAA,MAAMF,KAAAA,GAAQa,QAAAA,CAASC,QAAQ,EAAEC,IAAAA,CAAKf,KAAAA;AAEtC,IAAA,IAAIA,KAAAA,EAAO;;AAET,QAAA,IAAIS,kCAAkCT,KAAAA,CAAAA,EAAQ;YAC5C,OAAO;AACLC,gBAAAA,IAAAA,EAAMD,MAAMC,IAAI;AAChBL,gBAAAA,OAAAA,EAASI,OAAOJ,OAAAA,IAAW,IAAA;gBAC3BoB,MAAAA,EAAQhB,KAAAA,CAAMW,OAAO,CAACK,MAAM,CAACC,GAAG,CAAC,CAACP,GAAAA,GAChCX,cAAAA,CAAeW,GAAAA,EAAK;AAAET,wBAAAA,IAAAA,EAAMD,MAAMC,IAAI;AAAEC,wBAAAA;AAA0B,qBAAA,CAAA;AAEtE,aAAA;AACF,QAAA;AAEA,QAAA,OAAOH,eAAeC,KAAAA,EAAO;AAAEE,YAAAA;AAA0B,SAAA,CAAA;AAC3D,IAAA;IAEA,OAAO,IAAA;AACT;;;;"}