-
Notifications
You must be signed in to change notification settings - Fork 74
/
gatsby-node.js
62 lines (57 loc) · 1.57 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
const path = require('path');
const svgToMiniDataURI = require('mini-svg-data-uri');
const fs = require('fs-extra');
exports.createPages = async ({ actions, graphql, reporter }) => {
const { createPage } = actions;
const templates = {
default: path.resolve(`src/components/PageLayout.js`),
homepage: path.resolve(`src/components/HomePageLayout.js`),
};
const result = await graphql(`
{
allMarkdownRemark(limit: 1000) {
edges {
node {
id
frontmatter {
path
template
}
}
}
}
}
`);
if (result.errors) {
reporter.panicOnBuild(`Error while running GraphQL query.`);
return;
}
result.data.allMarkdownRemark.edges.forEach(({ node }) => {
if (!node.frontmatter.path) return;
createPage({
path: node.frontmatter.path,
component: templates[node.frontmatter.template || 'default'],
context: {
markdownRemarkId: node.id,
pathRegex: `/^\\/${node.frontmatter.path.split(`/`)[1]}(?:$|\\/)/`,
}, // additional data can be passed via context
});
});
};
exports.createResolvers = ({ createResolvers }) => {
const resolvers = {
File: {
dataURI: {
type: 'String',
async resolve(parent) {
if (parent.extension === 'svg' && parent.sourceInstanceName === 'content') {
const svg = await fs.readFile(parent.absolutePath, 'utf8');
return svgToMiniDataURI(svg);
}
return null;
},
},
},
};
createResolvers(resolvers);
};