vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
121 lines (120 loc) • 5.13 kB
TypeScript
export { redirect };
export { render };
export { RenderErrorPage };
export { isAbortError };
export { isAbortPageContext };
export { logAbort };
export { getPageContextAddendumAbort };
export { addNewPageContextAborted };
export { AbortRender };
export type { RedirectStatusCode };
export type { AbortStatusCode };
export type { ErrorAbort };
export type { PageContextAborted };
export type { UrlRedirect };
export type { PageContextAbort };
type RedirectStatusCode = number & Parameters<typeof redirect>[1];
type AbortStatusCode = number & Parameters<InferTwoOverloads<typeof render>[0]>[0];
type UrlRedirect = {
url: string;
statusCode: RedirectStatusCode;
};
type AbortRedirect = Error;
type AbortReason = Required<({
abortReason?: unknown;
} & Vike.PageContext)['abortReason']>;
/**
* Abort the rendering of the current page, and redirect the user to another URL instead.
*
* https://vike.dev/redirect
*
* @param url The URL to redirect to.
* @param statusCode By default the temporary redirection status code (`302`) is sent. For permanent redirections (`301`), use `+redirects` (https://vike.dev/redirects) or set this `statusCode` argument to `301`.
*/
declare function redirect(url: string, statusCode?: 301 | 302): AbortRedirect;
/**
* Abort the rendering of the current page, and render the error page instead.
*
* https://vike.dev/render
*
*
* **Recommended** status codes:
* `401` — Unauthorized (user isn't logged in)
* `403` — Forbidden (user is logged in but isn't allowed)
* `404` — Not Found
* `410` — Gone (use this instead of `404` if the page existed in the past, see https://github.com/vikejs/vike/issues/1097#issuecomment-1695260887)
* `429` — Too Many Requests (rate limiting)
* `500` — Internal Server Error (your client or server has a bug)
* `503` — Service Unavailable (server is overloaded, or a third-party API isn't responding)
*
* **Not recommended** status codes:
* `400` — See https://github.com/vikejs/vike/issues/1008#issuecomment-3270894445
* Other status codes — See https://github.com/vikejs/vike/issues/1008
*
* @param abortStatusCode - One of the recommended status codes listed above.
*
* @param abortReason - Sets `pageContext.abortReason` which is usually used by the error page to show a message to the user, see https://vike.dev/error-page
*/
declare function render(abortStatusCode: 401 | 403 | 404 | 410 | 429 | 500 | 503, abortReason?: AbortReason): Error;
/**
* Abort the rendering of the current page, and render another page instead.
*
* https://vike.dev/render
*
* @param url The URL to render.
* @param abortReason Sets `pageContext.abortReason` which is used by the error page to show a message to the user, see https://vike.dev/error-page
*/
declare function render(url: `/${string}`, abortReason?: AbortReason): Error;
type AbortCall = `redirect(${string})` | `render(${string})` | `RenderErrorPage()`;
type AbortCaller = `throw redirect()` | `throw render()` | `throw RenderErrorPage()`;
type PageContextAbort = {
_abortCall: AbortCall;
_abortCaller: AbortCaller;
} & (({
_abortCall: `redirect(${string})`;
_abortCaller: 'throw redirect()';
_urlRedirect: UrlRedirect;
} & Omit<AbortUndefined, '_urlRedirect'>) | ({
_abortCall: `render(${string})` | `RenderErrorPage()`;
_abortCaller: 'throw render()' | 'throw RenderErrorPage()';
abortReason: undefined | unknown;
_urlRewrite: string;
} & Omit<AbortUndefined, '_urlRewrite'>) | ({
_abortCall: `render(${string})` | `RenderErrorPage()`;
_abortCaller: 'throw render()' | 'throw RenderErrorPage()';
abortReason: undefined | unknown;
abortStatusCode: AbortStatusCode;
} & Omit<AbortUndefined, 'abortStatusCode'>));
type AbortUndefined = {
_urlRedirect?: undefined;
_urlRewrite?: undefined;
abortStatusCode?: undefined;
};
declare function AbortRender(pageContextAbort: PageContextAbort): Error;
/**
* @deprecated Use `throw render()` or `throw redirect()` instead, see https://vike.dev/render'
*/
declare function RenderErrorPage({ pageContext }?: {
pageContext?: Record<string, unknown>;
}): Error;
type ErrorAbort = {
_pageContextAbort: PageContextAbort;
};
declare function isAbortError(thing: unknown): thing is ErrorAbort;
declare function isAbortPageContext(pageContext: Record<string, unknown>): pageContext is PageContextAbort;
declare function logAbort(err: ErrorAbort, isProduction: boolean, pageContext: {
urlOriginal: string;
_urlRewrite?: string;
}): void;
type PageContextMin = {
urlOriginal: string;
};
type PageContextAborted = {
_pageContextAbort: PageContextAbort;
} & PageContextMin;
declare function getPageContextAddendumAbort(pageContextsAborted: PageContextAborted[]): PageContextAbort | null;
declare function addNewPageContextAborted(pageContextsAborted: PageContextAborted[], pageContext: PageContextMin, pageContextAbort: PageContextAbort): void;
type InferTwoOverloads<F extends Function> = F extends {
(...a1: infer A1): infer R1;
(...a0: infer A0): infer R0;
} ? [(...a1: A1) => R1, (...a0: A0) => R0] : never;