contentlayerdev / contentlayerdev/contentlayer

Duplicate attributes for DocumentType when using computed Fields to add defaults for normal fields

Aberta
#76 1 comentário 0 reações 0 responsáveis Ver no GitHub
bug meta: never-stale
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

Abrir o 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

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.