@scaleway/sdk-client
Version:
Scaleway SDK Client
55 lines (54 loc) • 1.74 kB
JavaScript
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
};