-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontentlayer.config.ts
42 lines (40 loc) · 1019 Bytes
/
contentlayer.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import { defineDocumentType, makeSource } from '@contentlayer2/source-files';
import remarkGfm from 'remark-gfm';
export const Essay = defineDocumentType(() => ({
name: 'Essay',
filePathPattern: `**/*.md`,
fields: {
title: { type: 'string', required: true },
date: { type: 'date', required: true },
},
computedFields: {
url: {
type: 'string',
resolve: (essay) => `/${essay._raw.flattenedPath}`,
},
coverImageUrl: {
type: 'string',
resolve: (essay) => `/covers/${essay._raw.flattenedPath}.webp`,
},
description: {
type: 'string',
resolve: (essay) =>
essay.body.raw
.replaceAll(/!\[.+\]\(.+\)/g, '')
.replaceAll(/\[(.+)\]\(.+\)/g, '$1')
.replaceAll('\n', ' ')
.slice(0, 160)
.trim() + '...',
},
},
}));
export default makeSource({
contentDirPath: 'blog',
documentTypes: [Essay],
date: {
timezone: 'Asia/Seoul',
},
markdown: {
remarkPlugins: [remarkGfm],
},
});