contentlayerdev / contentlayerdev/contentlayer
Duplicate attributes for DocumentType when using computed Fields to add defaults for normal fields
- Linguagem predominante
- TypeScript
- Estrelas
- 3.5k
- Forks
- 192
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Descrição
Hi, I'm currently using computed fields to add defaults for optional fields. This results in duplicate attributes in the generated document type classes. Is there another way of defining defaults, or should I approach this differently? If not you might consider adding a bugfix to support this scenario of using computed fields to define defaults.
```js
const computedFields = {
slug: {
type: "string",
resolve: (doc) => doc._raw.sourceFileName.replace(/\.md$/, ""),
},
excerpt: {
type: "string",
resolve: async (doc) => {
if (doc.excerpt) {
return doc.excerpt;
}
const stripped = await remark()
.use(strip)
.process(doc.body.raw.replace(/(<([^>]+)>)/gi, ""));
const excerpt = stripped.toString().slice(0, 500).trim();
return `${excerpt}…`;
},
},
};
export const Post = defineDocumentType(() => ({
name: "Post",
filePathPattern: `posts/*.md`,
fields: {
title: { type: "string", required: true },
publishedAt: { type: "date", required: true },
excerpt: { type: "string", required: false },
},
computedFields,
}));
```
This results in the following:
```js
export type Post = {
/** File path relative to `contentDirPath` */
_id: string
_raw: Local.RawDocumentData
type: 'Post'
title: string
publishedAt: string
excerpt: string | undefined
/** Markdown file body */
body: Markdown
slug: string
excerpt: string
}
```
Despite it works you do see `excerpt` is twice in the `Post` type. Once as `string` and once as `string | undefined`. The generated JSON itself has the field only once as I would expect.
I should probably mention in my project I'm using this from Javascript. That is probably why all still works. In TypeScript this might give some more issues.
Guia de contribuição
Direção de pesquisa
Comece pelo caminho de geração de tipos alcançado por meio de defineDocumentType e reproduza a definição de Post fornecida, com excerpt declarado tanto como campo quanto como campo calculado. Verifique se o tipo gerado contém excerpt apenas uma vez, enquanto o JSON gerado permanece inalterado. A issue não indica nenhum arquivo-fonte nem teste, portanto localizar o gerador e sua cobertura de geração de tipos é o primeiro passo da pesquisa.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- javascript, typescript
- Domínio
- developer-experience, tooling
- Tipo de issue
- Bug
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 32/100