contentlayerdev / contentlayerdev/contentlayer
Duplicate attributes for DocumentType when using computed Fields to add defaults for normal fields
- Lenguaje dominante
- TypeScript
- Estrellas
- 3.5k
- Forks
- 192
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
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.
Guía de contribución
Línea de trabajo
Comienza en la ruta de generación de tipos a la que se llega mediante defineDocumentType y reproduce la definición de Post proporcionada, con excerpt declarado tanto como campo como campo calculado. Verifica que el tipo generado contenga excerpt solo una vez, mientras que el JSON generado permanezca sin cambios. El issue no indica ningún archivo fuente ni prueba, por lo que localizar el generador y la cobertura de generación de tipos es el primer paso de investigación.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript, typescript
- Área
- developer-experience, tooling
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 32/100