104 lines
2.6 KiB
JavaScript
104 lines
2.6 KiB
JavaScript
class HttpError {
|
|
/**
|
|
* @param {number} status
|
|
* @param {{message: string} extends App.Error ? (App.Error | string | undefined) : App.Error} body
|
|
*/
|
|
constructor(status, body) {
|
|
this.status = status;
|
|
if (typeof body === "string") {
|
|
this.body = { message: body };
|
|
} else if (body) {
|
|
this.body = body;
|
|
} else {
|
|
this.body = { message: `Error: ${status}` };
|
|
}
|
|
}
|
|
toString() {
|
|
return JSON.stringify(this.body);
|
|
}
|
|
}
|
|
class Redirect {
|
|
/**
|
|
* @param {300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308} status
|
|
* @param {string} location
|
|
*/
|
|
constructor(status, location) {
|
|
this.status = status;
|
|
this.location = location;
|
|
}
|
|
}
|
|
class SvelteKitError extends Error {
|
|
/**
|
|
* @param {number} status
|
|
* @param {string} text
|
|
* @param {string} message
|
|
*/
|
|
constructor(status, text2, message) {
|
|
super(message);
|
|
this.status = status;
|
|
this.text = text2;
|
|
}
|
|
}
|
|
class ActionFailure {
|
|
/**
|
|
* @param {number} status
|
|
* @param {T} data
|
|
*/
|
|
constructor(status, data) {
|
|
this.status = status;
|
|
this.data = data;
|
|
}
|
|
}
|
|
function error(status, body) {
|
|
if (isNaN(status) || status < 400 || status > 599) {
|
|
throw new Error(`HTTP error status codes must be between 400 and 599 — ${status} is invalid`);
|
|
}
|
|
throw new HttpError(status, body);
|
|
}
|
|
function redirect(status, location) {
|
|
if (isNaN(status) || status < 300 || status > 308) {
|
|
throw new Error("Invalid status code");
|
|
}
|
|
throw new Redirect(
|
|
// @ts-ignore
|
|
status,
|
|
location.toString()
|
|
);
|
|
}
|
|
function json(data, init) {
|
|
const body = JSON.stringify(data);
|
|
const headers = new Headers(init?.headers);
|
|
if (!headers.has("content-length")) {
|
|
headers.set("content-length", encoder.encode(body).byteLength.toString());
|
|
}
|
|
if (!headers.has("content-type")) {
|
|
headers.set("content-type", "application/json");
|
|
}
|
|
return new Response(body, {
|
|
...init,
|
|
headers
|
|
});
|
|
}
|
|
const encoder = new TextEncoder();
|
|
function text(body, init) {
|
|
const headers = new Headers(init?.headers);
|
|
if (!headers.has("content-length")) {
|
|
const encoded = encoder.encode(body);
|
|
headers.set("content-length", encoded.byteLength.toString());
|
|
return new Response(encoded, {
|
|
...init,
|
|
headers
|
|
});
|
|
}
|
|
return new Response(body, {
|
|
...init,
|
|
headers
|
|
});
|
|
}
|
|
function fail(status, data) {
|
|
return new ActionFailure(status, data);
|
|
}
|
|
|
|
export { ActionFailure as A, HttpError as H, Redirect as R, SvelteKitError as S, error as e, fail as f, json as j, redirect as r, text as t };
|
|
//# sourceMappingURL=index-Ddp2AB5f.js.map
|