-
Notifications
You must be signed in to change notification settings - Fork 11
/
gatsby-node.js
76 lines (71 loc) · 1.47 KB
/
gatsby-node.js
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
const path = require('path')
const slugify = require('@sindresorhus/slugify')
exports.createSchemaCustomization = function createSchemaCustomization({
actions,
schema,
}) {
const { createTypes } = actions
const typeDefs = [
`
type Frontmatter @dontInfer {
title: String!
date: Date! @dateformat
description: String
}
`,
schema.buildObjectType({
name: 'MarkdownRemark',
fields: {
frontmatter: 'Frontmatter!',
slug: {
type: 'String!',
resolve(parent) {
return slugify(parent.frontmatter.title)
},
},
},
interfaces: ['Node'],
extensions: {
infer: true,
},
}),
]
createTypes(typeDefs)
}
/**
* Create DSG pages
*/
exports.createPages = async function createPages({
graphql,
actions,
reporter,
}) {
const { data, errors } = await graphql(`
{
allMarkdownRemark {
nodes {
id
slug
}
}
}
`)
if (errors) {
for (const error of errors) {
reporter.panic(error.message)
}
}
for (const node of data.allMarkdownRemark.nodes) {
actions.createPage({
path: `/blog/${node.slug}/`,
component: path.resolve(`./src/template/post.js`),
ownerNodeId: node.id,
context: {
id: node.id,
slug: node.slug,
},
// You can use any condition here, e.g. only defer older posts
defer: node.slug !== 'hello-world',
})
}
}