Arquitectura

En esta página

EmDash es una integración de Astro. La agregas a astro.config.mjs, eliges una base de datos y almacenamiento, y defines colecciones de contenido. Esta página cubre el modelo que necesitas para construir un sitio. Para los aspectos internos (diseños de tablas, la ruta de solicitud, generación de código), consulta Arquitectura (internos).

Lo que EmDash agrega a tu sitio

┌──────────────────────────────────────────────┐
│              Tu sitio Astro                   │
│                                               │
│   Páginas y componentes que escribes          │
│        │                                      │
│        │  getEmDashCollection() / getEmDashEntry()
│        ▼                                      │
│   ┌───────────────┐      ┌────────────────┐   │
│   │   Contenido   │      │  Panel admin   │   │
│   │  (tus datos)  │◄────►│ /_emdash/admin │   │
│   └───────────────┘      └────────────────┘   │
│        │                                      │
│   Base de datos (SQLite / libSQL / D1 / Postgres)│
│   Almacenamiento multimedia (local / R2 / S3) │
└──────────────────────────────────────────────┘

Escribes páginas y componentes de forma normal. EmDash proporciona el contenido, un panel de administración para editarlo, y la base de datos y almacenamiento detrás de él. Los editores trabajan en el panel de administración; tus páginas leen el mismo contenido a través de funciones de consulta.

Tu modelo de contenido

Defines colecciones y campos — en el panel de administración o con la CLI — y EmDash almacena contenido en ellos.

Cámbialo en cualquier momento

Agrega, renombra, elimina o recambia el tipo de colecciones y campos cuando lo necesites. Los cambios surten efecto inmediatamente.

Diseñado por editores

Un editor de contenido puede diseñar todo el modelo a través de la UI de administración.

Tipado

Genera tipos TypeScript desde el modelo actual para autocompletado desde consulta hasta plantilla.

Portable

Exporta el modelo como un archivo de semilla JSON para control de versiones, y aplícalo en otro entorno.

Consulta el modelo de contenido para aprender cómo definir, cambiar, tipar y sembrar.

El contenido está en vivo

EmDash sirve contenido a través de las Live Collections de Astro en tiempo de ejecución, por lo que los cambios que hace un editor son visibles inmediatamente. Lees contenido con dos funciones:

import { getEmDashCollection, getEmDashEntry } from "emdash";

const { entries: posts } = await getEmDashCollection("posts");
const { entry: post } = await getEmDashEntry("posts", "my-post-slug");

Consulta Consultar contenido para filtrado, paginación y borradores.

Lo que configuras

Pasas una base de datos y un backend de almacenamiento a la integración. Todo lo demás tiene un valor predeterminado.

import { defineConfig } from "astro/config";
import emdash, { local } from "emdash/astro";
import { sqlite } from "emdash/db";

export default defineConfig({
	integrations: [
		emdash({
			database: sqlite({ url: "file:./data.db" }),
			storage: local({ directory: "./uploads" }),
		}),
	],
});
  • Base de datos: SQLite (local o libSQL), Cloudflare D1, o PostgreSQL. Consulta Opciones de base de datos.
  • Almacenamiento: el sistema de archivos local, Cloudflare R2, o cualquier almacenamiento compatible con S3 para medios. Consulta Opciones de almacenamiento.

Extendiendo con plugins

Los plugins reaccionan a eventos del ciclo de vida de contenido y medios, y pueden agregar páginas de administración, widgets de panel y configuraciones. Hay dos formatos:

  • Plugins nativos se ejecutan en el entorno host con acceso completo. Mejores para plugins de primera parte y de confianza.
  • Plugins en sandbox se ejecutan en un runtime aislado con permisos basados en capacidades. Mejores para plugins de terceros.

Consulta la descripción general de plugins para elegir e instalar plugins, o crear un plugin.

Próximos pasos