Rotas

As rotas vêm diretamente do sistema de ficheiros, dentro de src/.

src/
  index.ht.js              → /
  about.ht.js              → /about
  blog/
    index.ht.js            → /blog
    [slug].ht.js           → /blog/:slug
  docs/
    [...path]?.ht.js       → /docs, /docs/a, /docs/a/b, ...
  (admin)/
    users.ht.js            → /users
  404.ht.js                → dist/404.html

Tabela de rotas

FuncionalidadeFicheiroURL
Estáticaindex.ht.js/
Aninhadablog/index.ht.js/blog
Dinâmicablog/[slug].ht.js/blog/my-post
Vários parâmetrosblog/[year]/[slug].ht.js/blog/2026/my-post
Apanha-tudodocs/[...path].ht.js/docs/api/auth
Apanha-tudo opcionaldocs/[...path]?.ht.js/docs + níveis abaixo
Grupos de rotas(admin)/users.ht.js/users

Ganha a rota mais específica: a estática vence a dinâmica, e a dinâmica vence as apanha-tudo. Dois ficheiros a gerar o mesmo URL são um erro de compilação.

generateStaticParams

As rotas dinâmicas declaram que páginas emitir na compilação. Em sitelo (dev), as rotas dinâmicas continuam a ser renderizadas a pedido, sem listar cada parâmetro.

import { html, body, h1 } from 'javascript-to-html'

export function generateStaticParams() {
  return [
    { slug: 'hello-world' },
    { slug: 'my-first-post' },
  ]
}

export default ({ params }) =>
  html(
    body(h1(params.slug))
  )

Os valores podem ser strings, números ou booleanos — são convertidos em string e codificados para o URL. Os parâmetros apanha-tudo aceitam arrays ({ path: ['a', 'b'] }) ou strings separadas por barras ({ path: 'a/b' }).

Uma página dinâmica que não gera nenhuma rota mostra um aviso, para não desaparecer do teu site sem se dar por isso.