UNPKG

@scaleway/sdk-client

Version:
55 lines (54 loc) 1.74 kB
import { isJSONObject } from "../../../helpers/json.js"; import { ScalewayError } from "../scw-error.js"; const buildMessage = (list) => { const invalidArgs = list.reduce((acc, details) => { let readableReason = ""; switch (details.reason) { case "required": readableReason = `is required`; break; case "format": readableReason = `is wrongly formatted`; break; case "constraint": readableReason = `does not respect constraint`; break; default: readableReason = `is invalid for unexpected reason`; break; } if (details.helpMessage && details.helpMessage.length > 0) { readableReason = readableReason.concat(`, `, details.helpMessage); } acc.push(`${details.argumentName} ${readableReason}`); return acc; }, []); return `invalid argument(s): ${invalidArgs.join("; ")}`; }; class InvalidArgumentsError extends ScalewayError { constructor(status, body, details) { super(status, body, buildMessage(details)); this.status = status; this.body = body; this.details = details; this.name = "InvalidArgumentsError"; } static fromJSON(status, obj) { if (!Array.isArray(obj.details)) return null; return new InvalidArgumentsError( status, obj, obj.details.reduce( (list, detail) => isJSONObject(detail) && typeof detail.argument_name === "string" && typeof detail.reason === "string" ? list.concat({ argumentName: detail.argument_name, helpMessage: typeof detail.help_message === "string" ? detail.help_message : void 0, reason: detail.reason }) : list, [] ) ); } } export { InvalidArgumentsError };