contentlayerdev / contentlayerdev/contentlayer
Add support for named scopes ("computed collection")
- Linguagem predominante
- TypeScript
- Estrelas
- 3.5k
- Forks
- 192
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Descrição
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.)
Guia de contribuição
Direção de pesquisa
Comece rastreando defineDocumentType e os exports gerados de .contentlayer/data. Revise como os campos dos documentos atualmente se tornam dados de página e, em seguida, determine o comportamento de nomenclatura e exclusividade dos scopes antes da implementação. Considera-se concluído quando scopes nomeados puderem definir ordenação ou filtragem e forem expostos por meio de um padrão de importação documentado.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- next.js, typescript
- Domínio
- data, developer-experience, tooling
- Tipo de issue
- Funcionalidade
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Status de atividade
- Estagnada
- Clareza
- Precisa de esclarecimento
- Facilidade para iniciantes
- 30/100