{"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;\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,eAAkB,GAAA,CAAC,SAAS,EAAEF,QAAQ,CAAC;;;;IAK7C,IAAI,OAAOC,aAAa,UAAY,EAAA;AAClC,QAAA,OAAOA,QAASC,CAAAA,eAAAA,CAAAA;AAClB;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,eAAkB,GAAA;AACtBC,QAAAA,EAAAA,EAAIT,cAAcC,OAASM,EAAAA,yBAAAA,CAAAA;QAC3BG,cAAgBT,EAAAA,OAAAA;QAChBK,IAAMD,EAAAA,KAAAA,CAAMC,IAAI,IAAIA,IAAAA;AACpBK,QAAAA,MAAAA,EAAQ;AACV,KAAA;AAEA,IAAA,IAAI,UAAUN,KAAO,EAAA;AACnBG,QAAAA,eAAAA,CAAgBG,MAAM,GAAG;AAAEC,YAAAA,IAAAA,EAAMP,KAAMO,CAAAA,IAAI,CAACC,IAAI,CAAC,GAAA;AAAK,SAAA;AACxD;IAEA,OAAOL,eAAAA;AACT;AAEA,MAAMM,iCAAoC,GAAA,CACxCC,GAEA,GAAA,OAAOA,IAAIC,OAAO,KAAK,QAAYD,IAAAA,GAAAA,CAAIC,OAAO,KAAK,IAAQ,IAAA,QAAA,IAAYD,IAAIC,OAAO;AAEpF;;;;AAIC,IACM,SAASC,iBACdC,CAAAA,QAAoB,EACpBX,yBAA8E,EAAA;AAK9E,IAAA,MAAMF,KAAQa,GAAAA,QAAAA,CAASC,QAAQ,EAAEC,IAAKf,CAAAA,KAAAA;AAEtC,IAAA,IAAIA,KAAO,EAAA;;AAET,QAAA,IAAIS,kCAAkCT,KAAQ,CAAA,EAAA;YAC5C,OAAO;AACLC,gBAAAA,IAAAA,EAAMD,MAAMC,IAAI;AAChBL,gBAAAA,OAAAA,EAASI,OAAOJ,OAAW,IAAA,IAAA;gBAC3BoB,MAAQhB,EAAAA,KAAAA,CAAMW,OAAO,CAACK,MAAM,CAACC,GAAG,CAAC,CAACP,GAChCX,GAAAA,cAAAA,CAAeW,GAAK,EAAA;AAAET,wBAAAA,IAAAA,EAAMD,MAAMC,IAAI;AAAEC,wBAAAA;AAA0B,qBAAA,CAAA;AAEtE,aAAA;AACF;AAEA,QAAA,OAAOH,eAAeC,KAAO,EAAA;AAAEE,YAAAA;AAA0B,SAAA,CAAA;AAC3D;IAEA,OAAO,IAAA;AACT;;;;"}