Saltar para o conteúdo
Blume
Esc
↑↓navegar↵abrir⌘Jpré-visualizar

Fontes personalizadas

Conecte qualquer backend ao Blume com custom() — passe um objeto que implemente a interface ContentSource ou um engine integrado com serializers personalizados.

Qualquer objeto que implemente a interface ContentSource pode ser passado para custom(). É assim que um adapter com serializers personalizados — ou qualquer backend que não venha integrado — se conecta sem que o SDK dele entre na instalação principal:

import { defineConfig } from "blume";
import { custom, filesystem } from "blume/sources";
import { sanitySource } from "blume/sources/sanity.ts";

export default defineConfig({
  content: {
    sources: [
      filesystem({ root: "docs" }),
      custom(
        sanitySource({
          name: "guides",
          prefix: "guides",
          projectId: "abc123",
          dataset: "production",
          query: `*[_type == "guide"]`,
          // Map custom Portable Text blocks to Blume components
          serializers: {
            callout: (block) => `<Callout>${block.text}</Callout>`,
          },
        })
      ),
    ],
  },
});

Uma fonte criada com uma das factories de engine do Blume, como a sanitySource acima, é reconstruída com o contexto do comando em execução. Assim, ela lê rascunhos com --preview e guarda o snapshot em .blume/cache, do mesmo jeito que o adapter integrado. Uma fonte feita por você pode fazer o mesmo implementando withContext(ctx) e retornando a si mesma reconstruída com esse contexto.

custom() recebe uma instância de ContentSource em vez de um objeto de opções, então não tem onde passar as opções compartilhadas prefix ou pollInterval. A própria fonte define a propriedade prefix, e a nova busca dos dados funciona do jeito que o método watch dela implementar. Como ela carrega uma instância viva em vez de dados simples, não declara nenhuma dependência de runtime nem secret própria — a instância cuida disso sozinha.

Uma fonte personalizada que lê arquivos locais deve definir sourcePath em cada entrada e contentRoot na própria fonte. O sourcePath identifica o arquivo nos diagnósticos e resolve imagens relativas ao lado dele. Já o contentRoot limita o log do git usado para datar as páginas. Sem ele, as páginas da fonte ficam sem a data de “Última atualização” obtida pelo git.

Última atualização a 28 de setembro de 2026

Esta página foi útil?