54 lines
1.4 KiB
JavaScript
54 lines
1.4 KiB
JavaScript
import path from 'path'
|
|
import fs from 'fs'
|
|
import set from 'lodash.set'
|
|
|
|
// Some arbitrary future time
|
|
const future = new Date('10-12-2026').getTime()
|
|
|
|
|
|
/*
|
|
* Main method that does what needs doing
|
|
*/
|
|
export const prebuildNavigation = (mdxPages, strapiPosts, site) => {
|
|
const nav = {}
|
|
for (const lang in mdxPages) {
|
|
nav[lang] = {}
|
|
|
|
// Handle MDX content
|
|
for (const slug of Object.keys(mdxPages[lang]).sort()) {
|
|
const page = mdxPages[lang][slug]
|
|
const chunks = slug.split('/')
|
|
set(nav, [lang, ...chunks], {
|
|
__title: page.title,
|
|
__linktitle: page.linktitle || page.title,
|
|
__slug: slug,
|
|
__order: page.order,
|
|
})
|
|
}
|
|
|
|
// Handle strapi content
|
|
for (const type in strapiPosts) {
|
|
set(nav, [lang, type], {
|
|
__title: type,
|
|
__linktitle: type,
|
|
__slug: type,
|
|
__order: type,
|
|
})
|
|
for (const [slug, page] of Object.entries(strapiPosts[type][lang])) {
|
|
const chunks = slug.split('/')
|
|
set(nav, [lang, type, ...chunks], {
|
|
__title: page.title,
|
|
__linktitle: page.linktitle,
|
|
__slug: type + '/' + slug,
|
|
__order: (future - new Date(page.date).getTime()) / 100000,
|
|
})
|
|
}
|
|
}
|
|
}
|
|
fs.writeFileSync(
|
|
path.resolve('..', site, 'prebuild', `navigation.js`),
|
|
`export default ${JSON.stringify(nav, null ,2)}`
|
|
)
|
|
|
|
return true
|
|
}
|