38 lines
1.6 KiB
TypeScript
38 lines
1.6 KiB
TypeScript
import type * as vite from 'vite';
|
|
import type { AstroSettings } from '../types/astro.js';
|
|
/**
|
|
* Outcome of the trailing-slash evaluation for a dev-server request.
|
|
*
|
|
* - **`next`** — The URL is acceptable. Pass the request through to the next
|
|
* middleware / route handler unchanged.
|
|
* - **`redirect`** — The URL contains duplicate trailing slashes (e.g.
|
|
* `/about//`). The client should be permanently redirected (301) to the
|
|
* collapsed form (`/about/`) so crawlers and browsers update their links.
|
|
* - **`reject`** — The URL's trailing-slash style conflicts with the project's
|
|
* `trailingSlash` config (`'always'` or `'never'`). The dev server responds
|
|
* with a 404 and a human-readable error page explaining the mismatch, giving
|
|
* the developer immediate feedback that their link is wrong before it reaches
|
|
* production.
|
|
*/
|
|
export type TrailingSlashDecision = {
|
|
action: 'next';
|
|
} | {
|
|
action: 'redirect';
|
|
status: 301;
|
|
location: string;
|
|
} | {
|
|
action: 'reject';
|
|
status: 404;
|
|
pathname: string;
|
|
};
|
|
/**
|
|
* Pure decision function for trailing-slash dev-server behavior.
|
|
*
|
|
* Evaluates a decoded `pathname`, the query-string portion (including leading
|
|
* `?`), and the project's `trailingSlash` config and returns the action the
|
|
* middleware should take. The middleware is responsible for translating the
|
|
* decision into an HTTP response.
|
|
*/
|
|
export declare function evaluateTrailingSlash(pathname: string, search: string, trailingSlash: 'always' | 'never' | 'ignore'): TrailingSlashDecision;
|
|
export declare function trailingSlashMiddleware(settings: AstroSettings): vite.Connect.NextHandleFunction;
|