123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- import { get, has, isEmpty, reduce, times, toSafeInteger } from 'lodash-es'
- import * as cheerio from 'cheerio'
- export async function task ({ payload }) {
- WIKI.logger.info(`Rendering page ${payload.id}...`)
- try {
- await WIKI.ensureDb()
- const page = await WIKI.db.pages.getPageFromDb(payload.id)
- if (!page) {
- throw new Error('Invalid Page Id')
- }
- const site = await WIKI.db.sites.query().findById(page.siteId)
- let output = page.content
- // Empty content?
- if (isEmpty(output)) {
- WIKI.logger.warn(`Failed to render page ID ${payload.id} because content was empty: [ FAILED ]`)
- throw new Error(`Failed to render page ID ${payload.id} because content was empty.`)
- }
- // Parse to HTML
- switch (page.contentType) {
- case 'asciidoc': {
- const { render } = await import('../../renderers/asciidoc.mjs')
- output = await render(output, site.config?.editors?.asciidoc?.config ?? {})
- break
- }
- case 'markdown': {
- const { render } = await import('../../renderers/markdown.mjs')
- output = await render(output, site.config?.editors?.markdown?.config ?? {})
- break
- }
- }
- // Render HTML
- await WIKI.db.renderers.fetchDefinitions()
- const pipeline = await WIKI.db.renderers.getRenderingPipeline(page.contentType)
- for (const core of pipeline) {
- const { render } = (await import(`../../modules/rendering/${core.key}/renderer.mjs`))
- output = await render.call({
- config: core.config,
- children: core.children,
- page,
- site,
- 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({
- // label: $(el).text().trim(),
- // key: leafSlug.substring(1),
- // children: []
- // })
- // })
- // Save to DB
- await WIKI.db.pages.query()
- .patch({
- render: output,
- toc: JSON.stringify(toc.root)
- })
- .where('id', payload.id)
- // Save to cache
- // await WIKI.db.pages.savePageToCache({
- // ...page,
- // render: output,
- // toc: JSON.stringify(toc.root)
- // })
- WIKI.logger.info(`Rendered page ${payload.id}: [ COMPLETED ]`)
- } catch (err) {
- WIKI.logger.error(`Rendering page ${payload.id}: [ FAILED ]`)
- WIKI.logger.error(err.message)
- throw err
- }
- }
|