-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgatsby-node.js
106 lines (94 loc) · 2.85 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
const path = require('path')
const {
allContentfulPostQuery,
allContentfulAuthorQuery,
allContentfulCategoryQuery,
} = require('./src/gatsby/queries')
const {
generatePostPages,
generatePaginatedPages,
generateCollectionPages,
} = require('./src/gatsby/gatsbyNodeUtils')
// graphql function doesn't throw an error so we have to check to check for the result.errors to throw manually
const wrapper = promise =>
promise.then(result => {
if (result.errors) {
throw result.errors
}
return result
})
// Define custom alias paths
exports.onCreateWebpackConfig = ({ actions }) => {
actions.setWebpackConfig({
resolve: {
alias: {
'@components': path.join(__dirname, 'src/components'),
'@hooks': path.join(__dirname, 'src/hooks'),
'@styles': path.join(__dirname, 'src/styles'),
},
},
})
}
exports.createPages = async ({ graphql, actions }) => {
const { createPage } = actions
const blogTemplate = require.resolve('./src/templates/blog.js')
const postTemplate = require.resolve('./src/templates/post.js')
const authorPageTemplate = require.resolve('./src/templates/author/page.js')
const authorsTemplate = require.resolve(
'./src/templates/author/collection.js'
)
const categoryPageTemplate = require.resolve(
'./src/templates/category/page.js'
)
const categoriesTemplate = require.resolve(
'./src/templates/category/collection.js'
)
const postsResult = await wrapper(graphql(allContentfulPostQuery))
const authorsResult = await wrapper(graphql(allContentfulAuthorQuery))
const categoryResult = await wrapper(graphql(allContentfulCategoryQuery))
const posts = postsResult.data.allContentfulPost.edges
const authors = authorsResult.data.allContentfulAuthor.edges
const categories = categoryResult.data.allContentfulCategory.edges
// create the blog page
generatePaginatedPages({
edges: posts,
pageTemplate: blogTemplate,
slugPrefix: 'blog',
createPage,
})
// creates the authors page
generatePaginatedPages({
edges: authors,
pageTemplate: authorsTemplate,
slugPrefix: 'authors',
createPage,
})
// creates the categories page
generatePaginatedPages({
edges: categories,
pageTemplate: categoriesTemplate,
slugPrefix: 'categories',
createPage,
})
// creates a page for each blog post
generatePostPages({
edges: posts,
pageTemplate: postTemplate,
slugPrefix: 'blog',
createPage,
})
// creates a page for each author and displays each post they created
generateCollectionPages({
edges: authors,
pageTemplate: authorPageTemplate,
baseSlug: 'authors',
createPage,
})
// creates a page for each category and displays each post using that category
generateCollectionPages({
edges: categories,
pageTemplate: categoryPageTemplate,
baseSlug: 'categories',
createPage,
})
}