1
0
mirror of synced 2025-12-22 03:16:52 -05:00
Files
docs/lib/pages.js
Jason Etcovitch 0ec47e0246 Only read the frontmatter from files in warm-server (#17222)
* Add read-frontmatter.js

* Use it

* Page static read/init are async now

* Fix some blockers

* I'm confused

* Fix some more bugs

* Use frontmatter schema, ensure end fence exists

* Fix a bug

* Still read full contents for index.md files

* Remove comment

* Only get ToC items for index pages

* Readd frontmatter error and verdadero handling

* Fix some borked tests

* Simplify the code

* Add a comment

* Remove redundant variable

* Re-simplify the Page construction

* End chunk _after_ endline

* Just use Page.init
2021-01-14 10:46:59 -05:00

72 lines
1.8 KiB
JavaScript

const path = require('path')
const walk = require('walk-sync').entries
const Page = require('./page')
const languages = require('./languages')
async function loadPageList () {
// load english pages
const englishPath = path.join(__dirname, '..', languages.en.dir, 'content')
const englishPaths = walk(englishPath, {
globs: ['**/*.md'],
ignore: ['**/README.md']
})
const englishPages = await Promise.all(englishPaths.map(
async opts => Page.init({
...opts,
languageCode: languages.en.code
})
))
// load matching pages in other languages
const localizedPaths = Object.values(languages)
.filter(({ code }) => code !== 'en')
.map(language => {
const basePath = path.join(__dirname, '..', language.dir, 'content')
return englishPages.map(page => ({
basePath,
relativePath: page.relativePath,
languageCode: language.code
}))
})
.flat()
const localizedPages = await Promise.all(localizedPaths.map(
async ({ basePath, relativePath, languageCode }) => Page.init({
basePath,
relativePath,
languageCode
})
))
// Build out the list of prepared pages
return englishPages
.concat(localizedPages)
.filter(Boolean)
}
function createMapFromArray (pageList) {
// add keys to the object for each of the page's permalinks for fast lookup
const pageMap =
pageList.reduce(
(pageMap, page) => {
for (const permalink of page.permalinks) {
pageMap[permalink.href] = page
}
return pageMap
},
{}
)
return pageMap
}
async function loadPageMap (pageList) {
const pages = pageList || await loadPageList()
return createMapFromArray(pages)
}
module.exports = {
loadPages: loadPageList,
loadPageMap
}