// Adapted from https://gist.github.com/joranquinten/78f3e288274a3c9405a499b8a8c46e35 import * as fs from 'fs'; import { execSync } from 'child_process'; import { createRequire } from 'module'; import directory from '../src/directory/directory.mjs'; const require = createRequire(import.meta.url); const generatePathMap = require('../generatePathMap.cjs'); const formatDate = (date) => `${date.toISOString().split('.')[0]}+0:00`; const getPriority = (_) => 0.5; const lastModifiedCache = {}; const lastModified = (path) => { if (path == '/ChooseFilterPage') { path = `./src/pages${path}.tsx`; } else if (path == '/') { path = `./src/pages/index.tsx`; } else if (path == '/404') { path = `./src/pages/404.tsx`; } else if (path == '/console') { path = `./src/pages/console/index.mdx`; } else if (path == '/cli') { path = `./src/pages/cli/index.mdx`; } else if (path == '/cli/function') { path = `./src/pages/cli/function/index.mdx`; } else { path = `./src/pages${path}.mdx`; } if (fs.existsSync(path)) { if (path in lastModifiedCache) { return lastModifiedCache[path]; } return (lastModifiedCache[path] = execSync( `git log -1 --pretty="format:%cI" ${path}` )); } console.log(`${path} doesn't exist`); return formatDate(new Date()); }; const xmlHeader = ` `; const xmlUrlWrapper = (nodes) => `${xmlHeader} ${nodes} `; const domain = 'https://docs.amplify.aws'; const xmlUrlNode = (pageUrl, pagePath) => { const lastmod = lastModified(pagePath); const url = `${pageUrl}${pageUrl === '/' ? '' : '/'}`; const loc = `${domain}${url}`; const priority = getPriority(url); return ` ${loc} ${lastmod} hourly ${priority} `; }; const writeSitemap = async () => { const sitemapPath = './public/sitemap.xml'; const pathmap = generatePathMap(directory, undefined, true); let xmlUrlNodes = ''; for (const pageUrl in pathmap) { const pagePath = pathmap[pageUrl].page; xmlUrlNodes += xmlUrlNode(pageUrl, pagePath); } const sitemap = `${xmlUrlWrapper(xmlUrlNodes)}`; fs.writeFileSync(sitemapPath, sitemap); console.log(`sitemap written to ${sitemapPath}`); }; const writeRobots = () => { let robotsContent = `User-agent: *\nDisallow:\n`; if (typeof process.env.ALLOW_ROBOTS === 'undefined') { robotsContent = `User-agent: *\nDisallow: /\n`; } const robotsPath = './public/robots.txt'; fs.writeFileSync(robotsPath, robotsContent); console.log(`robots.txt written to ${robotsPath}`); }; writeSitemap(); writeRobots();