contentlayerdev / contentlayerdev/contentlayer

Improve error handling for polymorphic field data with missing type value

未关闭
#297 4 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
good first issue help wanted meta: never-stale topic: error-handling
主要语言
TypeScript
星标
3.5k
派生
192
PR 合并指标
30 天内没有已合并 PR

描述

I encountered an error with following code trying to add polymorphic nested objects to a list.

```ts
export const Link = defineNestedType(() => ({
name: "Link",
description: "Link to an external resource",
fields: {
text: {
type: "string",
required: true,
},
url: {
type: "string",
required: true,
},
},
}));

export const LinkList = defineNestedType(() => ({
name: "LinkList",
description: "List of links to external resources",
fields: {
text: {
type: "string",
required: true,
},
links: {
type: "list",
required: true,
of: Link,
},
},
}));

export const NavbarLinks = defineDocumentType(() => ({
name: "NavbarLinks",
filePathPattern: "core/navbarLinks.json",
isSingleton: true,
fields: {
links: {
type: "list",
of: [Link, LinkList],
required: true,
},
},
}));
```

This produces following stack trace

```
TypeError: Cannot read properties of undefined (reading 'replace')
at idToFileName (file://.../node_modules/@contentlayer/core/src/generation/generate-dotpkg.ts:389:89)
at makeDataExportFile (file://.../node_modules/@contentlayer/core/src/generation/generate-dotpkg.ts:291:53)
at file://.../node_modules/@contentlayer/core/src/generation/generate-dotpkg.ts:153:18
at Array.map ()
at next (file://.../node_modules/@contentlayer/core/src/generation/generate-dotpkg.ts:152:44)
at Generator.next ()
at ApplyFrame.apply (file://.../node_modules/@effect-ts/system/_src/Effect/gen.ts:148:36)
at FiberContext.nextInstr (file://.../node_modules/@effect-ts/system/_src/Fiber/context.ts:357:28)
at FiberContext.evaluateNow (file://.../node_modules/@effect-ts/system/_src/Fiber/context.ts:940:36)
at file://.../node_modules/@effect-ts/system/_src/Fiber/context.ts:576:33

Fiber: #17 (started at: 2022-09-04T21:49:21.161Z) was supposed to continue to:

a future continuation at packages/@contentlayer/core/src/generation/generate-dotpkg.ts:216:13

Fiber: #17 (started at: 2022-09-04T21:49:21.161Z) Execution trace:

packages/@contentlayer/core/src/generation/generate-dotpkg.ts:144:22
packages/@contentlayer/core/src/generation/generate-dotpkg.ts:143:60
packages/@contentlayer/core/src/generation/generate-dotpkg.ts:125:10
packages/@contentlayer/core/src/generation/generate-dotpkg.ts:82:13
packages/@contentlayer/core/src/generation/generate-dotpkg.ts:78:16
```

贡献指南

打开贡献指南

调研方向

从 packages/@contentlayer/core/src/generation/generate-dotpkg.ts 开始,重点查看 idToFileName 以及周围的 makeDataExportFile 流程。复现 TypeScript 多态嵌套列表示例,跟踪缺失的类型值如何到达生成过程,并验证该情况产生的是有用的已处理错误,而不是报告中的 undefined.replace TypeError。

由索引模型根据 Issue 内容生成。

评估

技术栈
typescript
领域
data
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
需要澄清
新手友好度
25/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。