-
Notifications
You must be signed in to change notification settings - Fork 1
/
gatsby-node.js
159 lines (138 loc) · 3.43 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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
const path = require(`path`);
const { createFilePath } = require(`gatsby-source-filesystem`);
exports.createPages = async ({ graphql, actions }) => {
const { createPage } = actions;
const blogPost = path.resolve(`./src/templates/blog-post.jsx`);
const result = await graphql(
`
{
allMarkdownRemark(sort: {frontmatter: {date: DESC}}, limit: 1000) {
edges {
node {
fields {
slug
}
frontmatter {
title
}
}
}
}
}
`
);
if (result.errors) {
throw result.errors;
}
// Create blog posts pages.
const posts = result.data.allMarkdownRemark.edges;
posts.forEach((post, index) => {
const previous = index === posts.length - 1 ? null : posts[index + 1].node;
const next = index === 0 ? null : posts[index - 1].node;
createPage({
path: post.node.fields.slug,
component: blogPost,
context: {
slug: post.node.fields.slug,
previous,
next,
},
});
});
};
exports.onCreateNode = ({ node, actions, getNode }) => {
const { createNodeField } = actions;
if (node.internal.type === `MarkdownRemark`) {
const value = createFilePath({ node, getNode });
createNodeField({
name: `slug`,
node,
value: `/blog${value}`,
});
}
};
exports.createSchemaCustomization = ({ actions }) => {
const { createTypes } = actions;
const typeDefs = `
type SiteSiteMetadata {
siteUrl: String
name: String
title: String
description: String
author: String
github: String
githubContent: String
linkedin: String
linkedinContent: String
instagram: String
resumeContent: String
professionalResume: String
professionalResumeContent: String
fullResume: String
fullResumeContent: String
workResume: String
pmResume: String
statusPage: String
statusPageContent: String
footer: String
about1: String
about2: String
projects: [SectionItem]
experience: [SectionItem]
skills: [SectionItem]
}
type SectionItem {
key: String
organization: String
name: String
timeframe: String
link: String
description: String
subdescription: String
descriptionBullets: [DescriptionBullet]
titleImage: String
}
type DescriptionBullet {
content: String
link: String
linkname: String
contentStyle: String
}
type MarkdownRemark implements Node {
frontmatter: Frontmatter
fields: Fields
}
type Frontmatter {
title: String
description: String
date: Date @dateformat
}
type Fields {
slug: String
}
`;
createTypes(typeDefs);
};
exports.createPages = async ({ actions }) => {
const { createPage } = actions;
createPage({
path: '/resume',
component: require.resolve('./src/pages/resume.jsx'),
});
createPage({
path: '/full-resume',
component: require.resolve('./src/pages/full-resume.jsx'),
});
createPage({
path: '/work-resume',
component: require.resolve('./src/pages/work-resume.jsx'),
});
createPage({
path: '/my_resume',
component: require.resolve('./src/pages/my_resume.jsx'),
});
createPage({
path: '/multilevel-cache-report',
component: require.resolve('./src/pages/multilevel-cache-report.jsx'),
});
};