contentlayerdev / contentlayerdev/contentlayer
Add support for named scopes ("computed collection")
- Lenguaje dominante
- TypeScript
- Estrellas
- 3.5k
- Forks
- 192
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
Defining a document type brings the entirety of content for that document into the data object that we import into pages. I'm potentially importing much more information than I need to work with. It also forces me to write filtering logic in the template. And while this is a fairly typical pattern with Next.js, it's not a pleasant developer experience.
Proposal is to allow for named scopes when defining a document type. Something like this:
```js
const Doc = defineDocumentType(() => ({
name: "Doc",
// ...
fields: { /* ... */ },
scopes: [
{
name: "mostRecent",
resolve: (docs) => /* sorting/filtering logic ... */
}
]
))
```
I don't have a strong opinion on how this would then be used, but maybe something like this:
```js
import { allDocs, mostRecentDocs } from ".contentlayer/data"
```
The key decision here is finding a balance between being too magical (appending "Docs" to the scope name) and having to validate that scopes across all types be unique.
(Inpsired from a conversation with @smnh.)
Guía de contribución
Línea de trabajo
Empieza rastreando defineDocumentType y las exportaciones generadas de .contentlayer/data. Revisa cómo los campos de los documentos se convierten actualmente en datos de página y, a continuación, determina el comportamiento de nomenclatura y unicidad de los scopes antes de la implementación. Se considera terminado cuando los scopes con nombre pueden definir ordenación o filtrado y se exponen mediante un patrón de importación documentado.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- next.js, typescript
- Área
- data, developer-experience, tooling
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 30/100