Skip to content

Commit b3d7464

Browse files
authored
fix(path-meta): apply path meta fields if they exists in schema (#3632)
1 parent fbfd05b commit b3d7464

File tree

6 files changed

+15
-6
lines changed

6 files changed

+15
-6
lines changed

playground/content.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ const content = defineCollection({
4040
})
4141

4242
const data = defineCollection({
43-
type: 'page',
43+
type: 'data',
4444
source: 'data/**',
4545
schema: z.object({
4646
path: z.string(),

src/utils/content/index.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import type { FileAfterParseHook, FileBeforeParseHook, ModuleOptions, ContentFil
1414
import { logger } from '../dev'
1515
import { getOrderedSchemaKeys } from '../../runtime/internal/schema'
1616
import { transformContent } from './transformers'
17+
import pathMetaTransformer from './transformers/path-meta'
1718

1819
let parserOptions = {
1920
mdcConfigs: [] as MdcConfig[],
@@ -169,11 +170,13 @@ export async function createParser(collection: ResolvedCollection, nuxt?: Nuxt)
169170
...beforeParseCtx.parserOptions,
170171
transformers: extraTransformers,
171172
})
173+
174+
const collectionKeys = getOrderedSchemaKeys(collection.extendedSchema)
175+
172176
const { id: id, __metadata, ...parsedContentFields } = parsedContent
173177
const result = { id } as ParsedContentFile
174178
const meta = {} as Record<string, unknown>
175179

176-
const collectionKeys = getOrderedSchemaKeys(collection.extendedSchema)
177180
for (const key of Object.keys(parsedContentFields)) {
178181
if (collectionKeys.includes(key)) {
179182
result[key] = parsedContent[key]
@@ -198,6 +201,14 @@ export async function createParser(collection: ResolvedCollection, nuxt?: Nuxt)
198201
seo.description = seo.description || result.description
199202
}
200203

204+
const pathMetaFields = await pathMetaTransformer.transform!(parsedContent, {})
205+
const metaFields = ['path', 'title', 'stem', 'extension']
206+
for (const key of metaFields) {
207+
if (collectionKeys.includes(key) && result[key] === undefined) {
208+
result[key] = pathMetaFields[key]
209+
}
210+
}
211+
201212
const afterParseCtx: FileAfterParseHook = { file: hookedFile, content: result as ParsedContentFile, collection }
202213
await nuxt?.callHook?.('content:file:afterParse', afterParseCtx)
203214
return afterParseCtx.content

src/utils/content/transformers/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@ import type { ContentTransformer, TransformContentOptions, ContentFile } from '.
44
import csv from './csv'
55
import markdown from './markdown'
66
import yaml from './yaml'
7-
import pathMeta from './path-meta'
87
import json from './json'
98

109
const TRANSFORMERS = [
1110
csv,
1211
markdown,
1312
json,
1413
yaml,
15-
pathMeta,
1614
]
1715

1816
function getParser(ext: string, additionalTransformers: ContentTransformer[] = []): ContentTransformer | undefined {

src/utils/content/transformers/json.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ export default defineTransformer({
2525

2626
return {
2727
...parsed,
28-
body: parsed.body || parsed,
2928
id,
3029
}
3130
},

src/utils/content/transformers/markdown.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export default defineTransformer({
4949
toc: parsed.toc,
5050
},
5151
id: file.id,
52+
title: parsed.data?.title || undefined,
5253
}
5354
}
5455

@@ -60,6 +61,7 @@ export default defineTransformer({
6061
toc: parsed.toc,
6162
},
6263
id: file.id,
64+
title: parsed.data?.title || undefined,
6365
}
6466
},
6567
})

src/utils/content/transformers/yaml.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ export default defineTransformer({
1717

1818
return {
1919
...parsed,
20-
body: parsed.body || parsed,
2120
id,
2221
}
2322
},

0 commit comments

Comments
 (0)