-
Notifications
You must be signed in to change notification settings - Fork 0
/
gatsby-node.js
63 lines (59 loc) · 1.66 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
const fs = require("fs");
const path = require("path");
const mkdirp = require("mkdirp");
const { createFilePath } = require("gatsby-source-filesystem");
function replacePath(pagePath) {
return pagePath === `/` ? pagePath : pagePath.replace(/\/$/, ``);
}
exports.onPreBootstrap = ({ reporter }, options) => {
const contentPath = options.contentPath || "content";
const dirs = [contentPath, `${contentPath}/posts`, `${contentPath}/code`];
dirs.forEach(dir => {
if (!fs.existsSync(dir)) {
reporter.log(`creating the ${dir} directory`);
fs.mkdirSync(dir);
}
});
};
exports.onCreateNode = async (
{
node,
actions,
getNode,
loadNodeContent,
createContentDigest,
createNodeId
},
options
) => {
const { createNodeField, createNode, createParentChildLink } = actions;
const types = new Set(options.types);
if (node.internal.type === "MarkdownRemark") {
const slug = createFilePath({
node,
getNode,
basePath: "posts",
trailingSlash: false
});
createNodeField({ name: "slug", node, value: slug });
} else if (types.has(node.extension) === true) {
if (node.internal.type !== "File") {
return;
}
const codeContent = await loadNodeContent(node);
const contentDigest = createContentDigest(codeContent);
const id = await createNodeId(`${node.id}-code`);
const internal = { type: "Code", contentDigest };
const codeNode = {
id,
parent: node.id,
children: [],
code: codeContent,
name: node.name,
extension: node.extension,
internal
};
createNode(codeNode);
createParentChildLink({ parent: node, child: codeNode });
}
};