forked from github/docs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
precompile.js
executable file
·43 lines (38 loc) · 1.85 KB
/
precompile.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
import { languageKeys } from '../languages.js'
import readJsonFile from '../read-json-file.js'
import { latest } from '../../lib/enterprise-server-releases.js'
import getExceptionRedirects from './exception-redirects.js'
const developerRedirects = readJsonFile('./lib/redirects/static/developer.json')
const latestDevRedirects = {}
// Replace hardcoded 'latest' with real value in the redirected path
Object.entries(developerRedirects).forEach(([oldPath, newPath]) => {
latestDevRedirects[oldPath] = newPath.replace(
'enterprise-server@latest',
`enterprise-server@${latest}`
)
})
// This function runs at server warmup and precompiles possible redirect routes.
// It outputs them in key-value pairs within a neat Javascript object: { oldPath: newPath }
export default async function precompileRedirects(pageList) {
const allRedirects = Object.assign({}, latestDevRedirects)
// Exception redirects are those that are essentially unicorn one-offs.
// For example, we have redirects for documents that used to be on
// `free-pro-team@latest` but have now been moved to
// `enterprise-cloud@latest`. The advantage of the exception redirects
// file is that it's encoded in plain text so it's possible to write
// comments and it's also possible to write 1 destination URL once
// for each N redirect origins
const exceptions = getExceptionRedirects()
Object.entries(exceptions).forEach(([fromURL, toURL]) => {
allRedirects[fromURL] = `/en${toURL}`
for (const languageCode of languageKeys) {
allRedirects[`/${languageCode}${fromURL}`] = `/${languageCode}${toURL}`
}
})
// CURRENT PAGES PERMALINKS AND FRONTMATTER
// create backwards-compatible old paths for page permalinks and frontmatter redirects
await Promise.all(
pageList.map(async (page) => Object.assign(allRedirects, page.buildRedirects()))
)
return allRedirects
}