From 1a1dc97ec89c3a58b56a5b61a875c343e2f929a8 Mon Sep 17 00:00:00 2001 From: Austin Chen Date: Thu, 24 Mar 2022 09:28:36 -0700 Subject: [PATCH] Generate a sitemap with next-sitemap --- web/next-sitemap.js | 43 +++++++++++++++++++++++++++++++++++++++++++ web/package.json | 4 +++- yarn.lock | 18 ++++++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 web/next-sitemap.js diff --git a/web/next-sitemap.js b/web/next-sitemap.js new file mode 100644 index 00000000..3298f52b --- /dev/null +++ b/web/next-sitemap.js @@ -0,0 +1,43 @@ +const https = require('https') + +/** @type {import('next-sitemap').IConfig} */ + +module.exports = { + siteUrl: process.env.SITE_URL || 'https://manifold.markets', + changefreq: 'hourly', + priority: 0.7, // Set high priority by default + additionalPaths, + exclude: ['/admin'], + generateRobotsTxt: true, + // Other options: https://github.com/iamvishnusankar/next-sitemap#configuration-options +} + +// See https://github.com/iamvishnusankar/next-sitemap#additional-paths-function +async function additionalPaths(config) { + // Fetching data from https://docs.manifold.markets/api + const response = await fetch(`${config.siteUrl}/api/v0/markets`) + + const liteMarkets = await response + // See https://www.sitemaps.org/protocol.html + return liteMarkets.map((liteMarket) => ({ + loc: liteMarket.url, + changefreq: 'hourly', + priority: 0.2, // Individual markets aren't that important + // TODO: Add `lastmod` aka last modified time + })) +} + +// Polyfill for fetch: get the JSON contents of a URL +async function fetch(url) { + return new Promise((resolve, reject) => { + https.get(url, (res) => { + let data = '' + res.on('data', (chunk) => { + data += chunk + }) + res.on('end', () => { + resolve(JSON.parse(data)) + }) + }) + }) +} diff --git a/web/package.json b/web/package.json index 61342e4d..e5225454 100644 --- a/web/package.json +++ b/web/package.json @@ -12,7 +12,8 @@ "start": "next start", "lint": "next lint", "format": "npx prettier --write .", - "prepare": "cd .. && husky install web/.husky" + "prepare": "cd .. && husky install web/.husky", + "postbuild": "next-sitemap" }, "dependencies": { "@headlessui/react": "1.4.2", @@ -44,6 +45,7 @@ "eslint-config-next": "12.0.4", "husky": "7.0.4", "lint-staged": "12.1.3", + "next-sitemap": "^2.5.14", "postcss": "8.3.5", "prettier": "2.5.0", "prettier-plugin-tailwindcss": "^0.1.5", diff --git a/yarn.lock b/yarn.lock index 2afa5dda..dc454850 100644 --- a/yarn.lock +++ b/yarn.lock @@ -72,6 +72,11 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@corex/deepmerge@^2.6.148": + version "2.6.148" + resolved "https://registry.yarnpkg.com/@corex/deepmerge/-/deepmerge-2.6.148.tgz#8fa825d53ffd1cbcafce1b6a830eefd3dcc09dd5" + integrity sha512-6QMz0/2h5C3ua51iAnXMPWFbb1QOU1UvSM4bKBw5mzdT+WtLgjbETBBIQZ+Sh9WvEcGwlAt/DEdRpIC3XlDBMA== + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -4322,6 +4327,11 @@ minimist@^1.1.1, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + mri@^1.1.5: version "1.2.0" resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" @@ -4373,6 +4383,14 @@ netmask@^1.0.6: resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU= +next-sitemap@^2.5.14: + version "2.5.14" + resolved "https://registry.yarnpkg.com/next-sitemap/-/next-sitemap-2.5.14.tgz#f196c90d4aef8444c6eb7266875bf2179a515bb7" + integrity sha512-aJmxGmoE23NClCi1P6KpHov9DUieF/ZZbfGpTiruOYCq4nKu8Q4masOuswlOl3nNKZa0C3u4JG+TPubjslYH9A== + dependencies: + "@corex/deepmerge" "^2.6.148" + minimist "^1.2.6" + next@12.0.7: version "12.0.7" resolved "https://registry.yarnpkg.com/next/-/next-12.0.7.tgz#33ebf229b81b06e583ab5ae7613cffe1ca2103fc"