text: const path = require('path');
  const { createFilePath } = require('gatsby-source-filesystem');
  
  exports.createPages = async ({ graphql, actions }) => {
    const { createPage } = actions;
  
    const docPage = path.resolve('./src/templates/doc-page.js');
    const blogPost = path.resolve('./src/templates/blog-post.js');
  
    // get all markdown with a frontmatter path field and title
    const allMarkdown = await graphql(`
      {
        allMarkdownRemark(filter: { frontmatter: { title: { ne: null } } }) {
          edges {
            node {
              fields {
                slug
              }
              frontmatter {
                title
              }
            }
          }
        }
      }
    `);
  
    if (allMarkdown.errors) {
      console.error(allMarkdown.errors); // eslint-disable-line no-console
      throw Error(allMarkdown.errors);
    }
  
    allMarkdown.data.allMarkdownRemark.edges.forEach(({ node }) => {
      const { slug } = node.fields;
  
      let template = docPage;
  
      if (slug.includes('blog/')) {
        template = blogPost;
      }
  
      createPage({
        path: slug,
        component: template,
        context: {
          slug,
        },
      });
    });
  };
  
  function pad(n) {
    return n >= 10 ? n : `0${n}`;
  }
  
  exports.onCreateNode = ({ node, actions, getNode }) => {
    const { createNodeField } = actions;
  
    if (node.internal.type === 'MarkdownRemark') {
      const value = createFilePath({ node, getNode });
      const { relativePath } = getNode(node.parent);
  
      let slug = value;
  
      if (relativePath.includes('blog/')) {
        const date = new Date(node.frontmatter.date);
        const year = date.getFullYear();
        const month = date.getMonth() + 1;
        const filename = path.basename(relativePath, '.md');
        slug = `/blog/${year}/${pad(month)}/${filename}`;
  
        createNodeField({
          node,
          name: 'date',
          value: date.toJSON(),
        });
      }
  
      // used for doc posts
      createNodeField({
        node,
        name: 'slug',
        value: slug,
      });
  
      // used to create GitHub edit link
      createNodeField({
        node,
        name: 'path',
        value: relativePath,
      });
    }
  };
  
  exports.onCreateWebpackConfig = ({ actions }) => {
    actions.setWebpackConfig({
      resolve: {
        extensions: ['.ts', '.tsx', '.js', '.json'],
        alias: {
          moment$: 'moment/moment.js',
        },
      },
    });
  };
  