-
Notifications
You must be signed in to change notification settings - Fork 0
/
gatsby-node.ts
93 lines (85 loc) · 2.35 KB
/
gatsby-node.ts
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
import { GatsbyNode } from "gatsby";
import { createFilePath } from "gatsby-source-filesystem";
import { resolve } from "path";
// export const createSchemaCustomization: GatsbyNode["createSchemaCustomization"] =
// ({ actions }) => {
// const { createTypes } = actions;
// const typeDefs = `
// type Site {
// siteMetadata: SiteMetadata!
// }
// type SiteMetadata {
// title: String!
// siteUrl: String!
// description: String!
// }
// `;
// createTypes(typeDefs);
// };
export const onCreateNode: GatsbyNode["onCreateNode"] = ({
node,
getNode,
actions,
}) => {
const { createNodeField } = actions;
if (node.internal.type === `MarkdownRemark`) {
const slug = createFilePath({ node, getNode, basePath: `markdown-pages` });
createNodeField({
node,
name: `slug`,
value: slug,
});
}
};
export const createPages: GatsbyNode["createPages"] = async ({
graphql,
actions,
reporter,
}) => {
const { createPage } = actions;
// **Note:** The graphql function call returns a Promise
// see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise for more info
const { data, errors } = await graphql<Queries.CreatePagesQuery>(`
query CreatePages {
allMarkdownRemark(
sort: [{ frontmatter: { date: DESC } }, { fields: { slug: ASC } }]
) {
edges {
node {
fields {
slug
}
frontmatter {
title
date(formatString: "MMMM DD, YYYY")
tags
}
}
}
}
}
`);
if (errors) {
reporter.panicOnBuild(`Error while running GraphQL query.`);
throw errors;
}
if (!data) {
reporter.panicOnBuild(`Error while running GraphQL query.`);
throw new Error("No data returned from GraphQL query");
}
data.allMarkdownRemark.edges.forEach(({ node }) => {
if (!node?.fields?.slug || node.fields.slug === "") {
console.warn(`No slug for node: ${JSON.stringify(node, null, 2)}`);
return;
}
createPage({
path: `${node.fields.slug}`,
component: resolve(`./src/templates/note-template.tsx`),
context: {
// Data passed to context is available
// in page queries as GraphQL variables.
slug: node.fields.slug,
},
});
});
};