-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgatsby-node.mjs
executable file
·89 lines (80 loc) · 1.88 KB
/
gatsby-node.mjs
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
import slugify from '@sindresorhus/slugify';
import { compileMDXWithCustomOptions } from 'gatsby-plugin-mdx';
import remarkHeadingsPlugin from './remark-headings-plugin.mjs';
/**
* Greets a user.
* @param {import('gatsby').CreateSchemaCustomizationArgs} args
*/
export const createSchemaCustomization = async ({
getNode,
getNodesByType,
pathPrefix,
reporter,
cache,
actions,
schema,
store,
}) => {
const { createTypes } = actions;
const headingsResolver = schema.buildObjectType({
name: `Mdx`,
fields: {
headings: {
type: `[MdxHeading]`,
async resolve(mdxNode) {
const fileNode = getNode(mdxNode.parent);
if (!fileNode) {
return null;
}
const result = await compileMDXWithCustomOptions(
{
source: mdxNode.body,
absolutePath: fileNode.absolutePath,
},
{
pluginOptions: {},
customOptions: {
mdxOptions: {
remarkPlugins: [remarkHeadingsPlugin],
},
},
getNode,
getNodesByType,
pathPrefix,
reporter,
cache,
store,
}
);
if (!result) {
return null;
}
return result.metadata.headings;
},
},
},
});
createTypes([
`
type MdxHeading {
value: String
depth: Int
}
`,
headingsResolver,
]);
};
/**
* Greets a user.
* @param {import('gatsby').CreateNodeArgs<{ frontmatter: { title: string } }>} args
*/
export const onCreateNode = ({ node, actions }) => {
const { createNodeField } = actions;
if (node.internal.type === `Mdx`) {
createNodeField({
node,
name: `slug`,
value: `${slugify(node.frontmatter.title)}`,
});
}
};