mirror of
https://github.com/mastermindzh/rickvanlieshout.com
synced 2024-12-27 07:18:17 +01:00
57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
import { GatsbyNode } from "gatsby";
|
|
import { createFilePath } from "gatsby-source-filesystem";
|
|
import readingTime from "reading-time";
|
|
|
|
import * as constants from "./constants";
|
|
import * as types from "./types";
|
|
import * as utils from "./utils";
|
|
|
|
const onCreateNode: GatsbyNode["onCreateNode"] = ({ node, actions, getNode }) => {
|
|
const { createNodeField } = actions;
|
|
|
|
if (node.internal.type === "MarkdownRemark") {
|
|
const { frontmatter, parent }: types.Edge["node"] = node;
|
|
const { tags, category, slug } = frontmatter || {};
|
|
|
|
if (slug) {
|
|
const dirname = parent && getNode(parent)?.relativeDirectory;
|
|
const value =
|
|
typeof dirname === "string"
|
|
? utils.concat("/", dirname, "/", slug)
|
|
: utils.concat("/", slug);
|
|
|
|
createNodeField({ node, name: "slug", value });
|
|
} else {
|
|
const value = createFilePath({ node, getNode });
|
|
createNodeField({ node, name: "slug", value });
|
|
}
|
|
|
|
if (tags) {
|
|
const value = tags.map((tag) =>
|
|
utils.concat(constants.routes.tagRoute, "/", utils.toKebabCase(tag), "/")
|
|
);
|
|
|
|
createNodeField({ node, name: "tagSlugs", value });
|
|
}
|
|
|
|
if (category) {
|
|
const value = utils.concat(
|
|
constants.routes.categoryRoute,
|
|
"/",
|
|
utils.toKebabCase(category),
|
|
"/"
|
|
);
|
|
|
|
createNodeField({ node, name: "categorySlug", value });
|
|
}
|
|
|
|
createNodeField({
|
|
node,
|
|
name: "readingTime",
|
|
value: readingTime(node.rawMarkdownBody as string),
|
|
});
|
|
}
|
|
};
|
|
|
|
export { onCreateNode };
|