-
Notifications
You must be signed in to change notification settings - Fork 1
/
gatsby-node.js
87 lines (77 loc) · 2.25 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
/* eslint-env node */
const fs = require(`fs`);
const path = require(`path`);
const mkdirp = require(`mkdirp`);
const Debug = require(`debug`);
const { createFilePath } = require(`gatsby-source-filesystem`);
const debug = Debug(`gatsby-theme-nodeschool`);
//const withDefaults = require(`./src/default-options`);
// Ensure that content directories exist at site-level
exports.onPreBootstrap = ({ store } /*, themeOptions*/) => {
const { program } = store.getState();
// const { contentPath, assetPath } = withDefaults(themeOptions)
const dirs = [
path.join(program.directory, `data/attendees`),
path.join(program.directory, `data/mentors`),
path.join(program.directory, `data/photos`),
path.join(program.directory, `data/docs`)
];
dirs.forEach(dir => {
debug(`Initializing ${dir} directory`);
if (!fs.existsSync(dir)) {
mkdirp.sync(dir);
}
});
};
// These templates are simply data-fetching wrappers that import components
// const PostTemplate = require.resolve(`./src/templates/posts-query`)
const docsPageTemplate = require.resolve(`./src/templates/docs.tsx`);
/*
* Create a slug for each doc. This allows for the docs to be nested in folders
* and have the URLs match the folder structure.
*
* For example, if a doc is created at `docs/install/quickstart.md`, the slug
* created for it would be `/install/quickstart/`.
*/
exports.onCreateNode = ({ node, getNode, actions: { createNodeField } }) => {
if (node.internal.type === `Mdx`) {
createNodeField({
node,
name: `slug`,
value: path.basename(createFilePath({ node, getNode }))
});
}
};
exports.createPages = async (
{ graphql, actions, reporter } /*, themeOptions*/
) => {
const { createPage } = actions;
// const { basePath } = withDefaults(themeOptions);
const result = await graphql(`
{
allMdx {
edges {
node {
fields {
slug
}
id
}
}
}
}
`);
if (result.errors) {
reporter.panic(result.errors);
}
// Create a page for each Post
result.data.allMdx.edges.forEach(({ node }) => {
createPage({
path: node.fields.slug,
component: docsPageTemplate,
context: {
id: node.id
}
});
});
};