ssap_app/node_modules/expo-server/build/mjs/runtime/error.js

81 lines
2.7 KiB
JavaScript

/** An error response representation which can be thrown anywhere in server-side code.
*
* A `StatusError` can be thrown by a request handler and will be caught by the `expo-server`
* runtime and replaced by a `Response` with the `status` and `body` that's been passed to
* the `StatusError`.
*
* @example
* ```ts
* import { StatusError } from 'expo-server';
*
* export function GET(request, { postId }) {
* if (!postId) {
* throw new StatusError(400, 'postId parameter is required');
* }
* }
* ```
*/
export class StatusError extends Error {
status;
body;
constructor(status = 500, body, errorOptions) {
const cause = (errorOptions != null && errorOptions.cause) ??
(body != null && typeof body === 'object' && body.cause != null ? body.cause : undefined);
let message = typeof body === 'object' ? (body instanceof Error ? body.message : body.error) : body;
if (message == null) {
switch (status) {
case 400:
message = 'Bad Request';
break;
case 401:
message = 'Unauthorized';
break;
case 403:
message = 'Forbidden';
break;
case 404:
message = 'Not Found';
break;
case 500:
message = 'Internal Server Error';
break;
default:
message = 'Unknown Error';
}
}
super(message, cause ? { cause } : undefined);
this.name = 'StatusError';
this.status = status;
if (body instanceof Error) {
this.body = JSON.stringify({ error: body.message }, null, 2);
}
else {
this.body =
typeof body === 'object'
? JSON.stringify(body, null, 2)
: (body ?? JSON.stringify({ error: message }, null, 2));
}
}
}
export function errorToResponse(error) {
if (error instanceof StatusError) {
return new Response(error.body, {
status: error.status,
headers: {
'Content-Type': 'application/json; charset=utf-8',
},
});
}
else if ('status' in error && typeof error.status === 'number') {
const body = 'body' in error && typeof error.body === 'string'
? error.body
: JSON.stringify({ error: error.message }, null, 2);
return new Response(body, {
status: error.status,
});
}
else {
return new Response(`${error}`, { status: 500 });
}
}
//# sourceMappingURL=error.js.map