# @velastack/kit

Fontanería de SvelteKit agnóstica del backend, compartida por las vinculaciones de backend de Vela. Nada en este paquete conoce ninguna base de datos concreta — [@velastack/pocketbase](/es/helpers/pocketbase) y sus hermanos se construyen sobre él.

```
npm install @velastack/kit
```

#### Match&lt;RouteId&gt;

Convierte un id de ruta de SvelteKit en la forma de las URLs que coinciden con él — los grupos de rutas se eliminan y los segmentos `[param]` se ensanchan a `string`. Útil para mantener honestas las URLs de las pruebas:

```ts
import type { Match } from '@velastack/kit';
import type { RouteId } from './$types';

const res = await context.request.get('/dashboard' satisfies Match<RouteId>);
```

Los segmentos que pueden no coincidir con nada — `[[optional]]` y `[...rest]` — se ensanchan a una unión que incluye la variante en la que el segmento está ausente, así que ambas se cumplen para `/[[lang]]/blog`:

```ts
'/blog' satisfies Match<'/[[lang]]/blog'>;
'/en/blog' satisfies Match<'/[[lang]]/blog'>;
```

El ensanchamiento es deliberadamente laxo — `string` también abarca `/`, así que una URL con segmentos adicionales aún puede satisfacer un único `[param]`.

#### proxy

`proxy(url, event)` reenvía la petición actual a `url` y devuelve la respuesta del servidor de destino. Las cabeceras salto a salto se eliminan y se fija `accept-encoding: identity` para que el cuerpo fluya sin tocar. Las `event.request.headers` entrantes se copian, nunca se modifican.

#### protectedRouteRedirect

Devuelve un 302 a `loginPath`, con el destino original en un parámetro de consulta `redirect`, cuando una petición no autenticada coincide con uno de los `protectedRoutes` por prefijo de id de ruta — o `null` cuando la petición puede continuar. Esto es lo que sustenta el grupo `(app)` del módulo de [autenticación](/es/enable/auth).

```ts
protectedRouteRedirect({
	routeId: event.route.id,
	url: event.url,
	protectedRoutes: ['/(app)'],
	loginPath: '/login',
	authenticated: pb.authStore.isValid,
	clearCookies: ['pb_auth']
});
```

#### errorPage

`errorPage(status, message)` renderiza una página de error HTML autónoma con estilo para ambos esquemas de color. `message` se interpola como **HTML de confianza** y no se escapa — nunca le pases entrada del usuario.

#### handleStatic

El hook de servidor completo para un proyecto sin backend. En desarrollo responde con un 404 en una página que un comando `vela` aún no ha generado, indicando el comando que la crea, y no hace nada en otro caso. No acepta opciones — no hay backend al que apuntar.

```ts
// src/hooks.server.ts
import { handleStatic } from '@velastack/kit';

export const handle = handleStatic();
```

`LEGAL_PAGES` y `AUTH_PAGES` asocian esas rutas con el comando que las crea, y `generatedPageResponse(pathname, pages)` convierte una de ellas en un 404 que lo indica, o devuelve `null` y deja tu propio 404 en paz. Un proyecto con backend obtiene el mismo comportamiento, más las páginas de autenticación, de [`handlePocketbase`](/es/helpers/pocketbase).