diff --git a/gatsby-node.js b/gatsby-node.js index ab60095a..56f83aed 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -28,6 +28,9 @@ exports.modifyWebpackConfig = ({config, stage}) => { exports.createPages = async ({graphql, boundActionCreators}) => { const {createPage, createRedirect} = boundActionCreators; + // Used to detect and prevent duplicate redirects + const redirectToSlugMap = {}; + const blogTemplate = resolve('./src/templates/blog.js'); const communityTemplate = resolve('./src/templates/community.js'); const docsTemplate = resolve('./src/templates/docs.js'); @@ -114,13 +117,22 @@ exports.createPages = async ({graphql, boundActionCreators}) => { redirect = [redirect]; } - redirect.forEach(fromPath => + redirect.forEach(fromPath => { + if (redirectToSlugMap[fromPath] != null) { + console.error(`Duplicate redirect detected from "${fromPath}" to:\n` + + `* ${redirectToSlugMap[fromPath]}\n` + + `* ${slug}\n` + ); + process.exit(1); + } + + redirectToSlugMap[fromPath] = slug; createRedirect({ fromPath: `/${fromPath}`, redirectInBrowser: true, toPath: `/${slug}`, - }), - ); + }); + }); } } });