Source: scripts/generate-sitemap.js

const fs = require("fs");
const globby = require("globby");

// Needs empty line to generate root paths
const skipMatch = [
  "!pages/my-dreams.js",
  "!pages/account.js",
  "!pages/publish",
  "!pages/_*.js",
  "!pages/api",
  "!pages/auth/error.js",
  "!pages/auth/verify-request.js",
  "!pages/dreams",
  "!pages/saved-dreams.js",
  "!pages/insights.js",
  "!pages/404.js",
  "!pages/500.js",
  "!pages/inbox.js",
];

// Important! The following issue has useful information on
// how to handle dynamic routes correctly:
// https://github.com/vercel/next.js/issues/9051.

/**
 * Generates an XML URL loc
 * @param {string[]} pages - The set of filenames under the pages folder.
 */
function generateUrlLoc(pages) {
  const routes = pages
    .map((page) => {
      const path = page.replace("pages", "").replace(".js", "");
      const route = path === "/index" ? "" : path;

      return `
  <url>
      <loc>${`https://eutiveumsonho.com${route}`}</loc>
  </url>
          `;
    })
    .join("");

  return routes;
}

(async () => {
  const pages = await globby(["pages/**/*", ...skipMatch]);

  const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  ${generateUrlLoc(pages)}
</urlset>
<!-- This is a generated file. Don't change this. -->
<!-- For more information, visit this file at scripts/generate-sitemap.js -->
    `;

  fs.writeFileSync("public/sitemap.xml", sitemap);

  console.log("Sitemap successfully generated.");
})();