The HTML post-processing now collects any h1 that is found in the renderedContent and attaches it to the doc via the `doc.vFile.title` property.
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const rehype = require('rehype');
 | 
						|
 | 
						|
/**
 | 
						|
 * @dgProcessor postProcessHtml
 | 
						|
 *
 | 
						|
 * @description
 | 
						|
 * Use the rehype processing engine to manipulate the
 | 
						|
 * `renderedContent` HTML via rehype "plugins" that work with HTML ASTs (HASTs).
 | 
						|
 * See https://github.com/wooorm/rehype
 | 
						|
 *
 | 
						|
 * Each plugin is a factory function that will be called with the "rehype" engine as `this`.
 | 
						|
 * The factory should return a "transform" function that takes a HAST and returns a `boolean` or `undefined`.
 | 
						|
 * The HAST can be mutated by the "transform" function.
 | 
						|
 * If `false` is returned then the processing stops with that plugin.
 | 
						|
 *
 | 
						|
 * @property docTypes {string[]} the `docTypes` of docs that should be post-processed
 | 
						|
 * @property plugins {Function[]} the rehype plugins that will modify the HAST.
 | 
						|
 *
 | 
						|
 */
 | 
						|
module.exports = function postProcessHtml(log, createDocMessage) {
 | 
						|
  return {
 | 
						|
    $runAfter: ['docs-rendered'],
 | 
						|
    $runBefore: ['writing-files'],
 | 
						|
    docTypes: [],
 | 
						|
    plugins: [],
 | 
						|
    $process(docs) {
 | 
						|
      const engine = rehype()
 | 
						|
            .data('settings', { fragment: true });
 | 
						|
      this.plugins.forEach(plugin => engine.use(plugin));
 | 
						|
 | 
						|
      let vFile;
 | 
						|
 | 
						|
      docs
 | 
						|
        .filter(doc => this.docTypes.indexOf(doc.docType) !== -1)
 | 
						|
        .forEach(doc => {
 | 
						|
          try {
 | 
						|
            vFile = engine.processSync(doc.renderedContent);
 | 
						|
            doc.renderedContent = vFile.contents;
 | 
						|
            vFile.messages.forEach(m => {
 | 
						|
              log.warn(createDocMessage(m.message, doc));
 | 
						|
            });
 | 
						|
            doc.vFile = vFile;
 | 
						|
          } catch(e) {
 | 
						|
            throw new Error(createDocMessage(e.message, doc));
 | 
						|
          }
 | 
						|
        });
 | 
						|
    }
 | 
						|
  };
 | 
						|
};
 |