1
0
Fork 0
freesewing/sites/shared/prebuild/navigation.mjs

74 lines
1.8 KiB
JavaScript
Raw Normal View History

import path from 'path'
import fs from 'fs'
import set from 'lodash.set'
2023-03-28 16:47:07 +02:00
import { loadYaml, folders } from './i18n.mjs'
2023-03-28 16:47:07 +02:00
// We need to load the translation for blog + showcase
const loadTranslation = (locale) => {
let data
try {
data = loadYaml(`${folders.shared[0]}/navigation/sections.${locale}.yaml`, false)
2023-03-28 16:47:07 +02:00
} catch (err) {
data = {}
}
if (!data) data = {}
return data
}
/*
* Main method that does what needs doing
*/
export const prebuildNavigation = (docPages, postPages, site) => {
2023-03-26 06:50:59 +02:00
/*
* Since this is written to disk and loaded as JSON, we minimize
* the data to load by using the following 1-character keys:
*
* t: title
* l: link title (shorter version of the title, optional
* o: order, optional
* s: slug without leading or trailing slash (/)
*/
const nav = {}
for (const lang in docPages) {
2023-03-28 16:47:07 +02:00
const translations = loadTranslation(lang)
nav[lang] = {}
// Handle MDX content
for (const slug of Object.keys(docPages[lang]).sort()) {
const page = docPages[lang][slug]
const chunks = slug.split('/')
2023-03-26 06:50:59 +02:00
const val = {
t: page.t,
s: slug,
}
2023-04-16 16:19:49 +02:00
if (page.o) val.o = page.o
2023-03-26 06:50:59 +02:00
set(nav, [lang, ...chunks], val)
}
// Handle strapi content
for (const type in postPages) {
set(nav, [lang, type], {
t: translations[type] || type,
2023-03-26 06:50:59 +02:00
s: type,
})
for (const page in postPages[type][lang]) {
const pageData = postPages[type][lang][page]
const chunks = page.split('/')
set(nav, [lang, ...chunks], {
t: pageData.t,
s: page,
o: pageData.o,
})
}
}
}
fs.writeFileSync(
2023-02-05 16:39:18 +01:00
path.resolve('..', site, 'prebuild', `navigation.mjs`),
`export const prebuildNavigation = ${JSON.stringify(nav, null, 2)}`
)
2022-01-20 09:07:38 +01:00
return true
}