| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | 
							- const _ = require('lodash')
 
- const cheerio = require('cheerio')
 
- /* global WIKI */
 
- module.exports = async (pageId) => {
 
-   WIKI.logger.info(`Rendering page ID ${pageId}...`)
 
-   try {
 
-     WIKI.models = require('../core/db').init()
 
-     await WIKI.configSvc.loadFromDb()
 
-     await WIKI.configSvc.applyFlags()
 
-     const page = await WIKI.models.pages.getPageFromDb(pageId)
 
-     if (!page) {
 
-       throw new Error('Invalid Page Id')
 
-     }
 
-     await WIKI.models.renderers.fetchDefinitions()
 
-     const pipeline = await WIKI.models.renderers.getRenderingPipeline(page.contentType)
 
-     let output = page.content
 
-     if (_.isEmpty(page.content)) {
 
-       await WIKI.models.knex.destroy()
 
-       WIKI.logger.warn(`Failed to render page ID ${pageId} because content was empty: [ FAILED ]`)
 
-     }
 
-     for (let core of pipeline) {
 
-       const renderer = require(`../modules/rendering/${_.kebabCase(core.key)}/renderer.js`)
 
-       output = await renderer.render.call({
 
-         config: core.config,
 
-         children: core.children,
 
-         page: page,
 
-         input: output
 
-       })
 
-     }
 
-     // Parse TOC
 
-     const $ = cheerio.load(output)
 
-     let isStrict = $('h1').length > 0 // <- Allows for documents using H2 as top level
 
-     let toc = { root: [] }
 
-     $('h1,h2,h3,h4,h5,h6').each((idx, el) => {
 
-       const depth = _.toSafeInteger(el.name.substring(1)) - (isStrict ? 1 : 2)
 
-       let leafPathError = false
 
-       const leafPath = _.reduce(_.times(depth), (curPath, curIdx) => {
 
-         if (_.has(toc, curPath)) {
 
-           const lastLeafIdx = _.get(toc, curPath).length - 1
 
-           if (lastLeafIdx >= 0) {
 
-             curPath = `${curPath}[${lastLeafIdx}].children`
 
-           } else {
 
-             leafPathError = true
 
-           }
 
-         }
 
-         return curPath
 
-       }, 'root')
 
-       if (leafPathError) { return }
 
-       const leafSlug = $('.toc-anchor', el).first().attr('href')
 
-       $('.toc-anchor', el).remove()
 
-       _.get(toc, leafPath).push({
 
-         title: _.trim($(el).text()),
 
-         anchor: leafSlug,
 
-         children: []
 
-       })
 
-     })
 
-     // Save to DB
 
-     await WIKI.models.pages.query()
 
-       .patch({
 
-         render: output,
 
-         toc: JSON.stringify(toc.root)
 
-       })
 
-       .where('id', pageId)
 
-     // Save to cache
 
-     await WIKI.models.pages.savePageToCache({
 
-       ...page,
 
-       render: output,
 
-       toc: JSON.stringify(toc.root)
 
-     })
 
-     await WIKI.models.knex.destroy()
 
-     WIKI.logger.info(`Rendering page ID ${pageId}: [ COMPLETED ]`)
 
-   } catch (err) {
 
-     WIKI.logger.error(`Rendering page ID ${pageId}: [ FAILED ]`)
 
-     WIKI.logger.error(err.message)
 
-     // exit process with error code
 
-     throw err
 
-   }
 
- }
 
 
  |