text: const _ = require('lodash')
  const path = require('path')
  const { createFilePath } = require('gatsby-source-filesystem')
  const { fmImagesToRelative } = require('gatsby-remark-relative-images')
  
  exports.createPages = ({ actions, graphql }) => {
  	const { createPage } = actions
  
  	return graphql(`
  		{
  			allMarkdownRemark(limit: 1000) {
  				edges {
  					node {
  						id
  						fields {
  							slug
  						}
  						frontmatter {
  							tags
  							templateKey
  						}
  					}
  				}
  			}
  		}
  	`).then(result => {
  		if (result.errors) {
  			result.errors.forEach(e => console.error(e.toString()))
  			return Promise.reject(result.errors)
  		}
  
  		const posts = result.data.allMarkdownRemark.edges
  
  		posts.forEach(edge => {
  			const id = edge.node.id
  			createPage({
  				path: edge.node.fields.slug,
  				tags: edge.node.frontmatter.tags,
  				component: path.resolve(
  					`src/templates/${String(edge.node.frontmatter.templateKey)}.js`
  				),
  				// additional data can be passed via context
  				context: {
  					id,
  				},
  			})
  		})
  
  		// Tag pages:
  		let tags = []
  		// Iterate through each post, putting all found tags into `tags`
  		posts.forEach(edge => {
  			if (_.get(edge, `node.frontmatter.tags`)) {
  				tags = tags.concat(edge.node.frontmatter.tags)
  			}
  		})
  		// Eliminate duplicate tags
  		tags = _.uniq(tags)
  
  		// Make tag pages
  		tags.forEach(tag => {
  			const tagPath = `/tags/${_.kebabCase(tag)}/`
  
  			createPage({
  				path: tagPath,
  				component: path.resolve(`src/templates/tags.js`),
  				context: {
  					tag,
  				},
  			})
  		})
  	})
  }
  
  exports.onCreateNode = ({ node, actions, getNode }) => {
  	const { createNodeField } = actions
  	fmImagesToRelative(node) // convert image paths for gatsby images
  
  	if (node.internal.type === `MarkdownRemark`) {
  		const value = createFilePath({ node, getNode })
  		createNodeField({
  			name: `slug`,
  			node,
  			value,
  		})
  	}
  }
  