-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathnext-sitemap.js
76 lines (71 loc) · 2 KB
/
next-sitemap.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
const dotenv = require("dotenv");
const fs = require("fs");
const path = require("path");
const matter = require("gray-matter");
const env = dotenv.parse(fs.readFileSync(path.join(__dirname, "..", ".env")));
module.exports = {
siteUrl: env.WRITING_PAGE_URL,
generateRobotsTxt: true,
changefreq: "never",
outDir: "build",
priority: 0.5,
transform: async (config, loc) => {
let lastmod = new Date().toISOString();
let changefreq = config.changefreq;
let priority = config.priority;
if (loc === "/") {
priority = 1;
changefreq = "weekly";
} else {
changefreq = "yearly";
}
// Exclude WIP articles from site-map
const entry = getEntryBySlug(loc.replace("/", ""));
if (entry?.data?.isWip) {
return null;
}
if (entry?.data?.lastModified) {
lastmod = new Date(entry.data.lastModified).toISOString();
} else if (entry?.data?.date) {
lastmod = new Date(entry.data.date).toISOString();
}
// Use default transformation for all other cases
return {
loc,
changefreq,
priority,
lastmod,
alternateRefs: config.alternateRefs ?? [],
};
},
};
const entriesPath = path.join(process.cwd(), "entries");
function fetchEntries() {
const entriesMap = {};
const entries = fs.readdirSync(entriesPath);
for (const entry of entries) {
if (!entry.endsWith(".mdx")) {
continue;
}
const fileContents = fs.readFileSync(
path.join(entriesPath, entry),
"utf-8"
);
const metadata = matter(fileContents, {
// eslint-disable-next-line camelcase
excerpt_separator: "<!-- end-preview -->",
});
entriesMap[metadata.data.slug] = metadata;
}
return entriesMap;
}
// We fetch each entry again so we don't have to name mdx files by slug
function getEntryBySlug(slug) {
const entriesMap = fetchEntries();
const entries = Object.entries(entriesMap);
for (let i = 0; i < entries.length; i++) {
if (entries[i][0] === slug) {
return entries[i][1];
}
}
}