2017-04-27 05:17:15 -04:00
|
|
|
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`.
|
2017-04-28 09:07:21 -04:00
|
|
|
* 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.
|
2017-04-27 05:17:15 -04:00
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
*/
|
2017-04-28 06:34:01 -04:00
|
|
|
module.exports = function postProcessHtml(log, createDocMessage) {
|
2017-04-27 05:17:15 -04:00
|
|
|
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));
|
|
|
|
|
2017-05-10 05:59:50 -04:00
|
|
|
let vFile;
|
|
|
|
|
2017-04-27 05:17:15 -04:00
|
|
|
docs
|
|
|
|
.filter(doc => this.docTypes.indexOf(doc.docType) !== -1)
|
2017-04-28 06:34:01 -04:00
|
|
|
.forEach(doc => {
|
2017-05-10 05:59:50 -04:00
|
|
|
try {
|
|
|
|
vFile = engine.processSync(doc.renderedContent);
|
|
|
|
doc.renderedContent = vFile.contents;
|
|
|
|
vFile.messages.forEach(m => {
|
|
|
|
log.warn(createDocMessage(m.message, doc));
|
|
|
|
});
|
2017-05-30 15:24:20 -04:00
|
|
|
doc.vFile = vFile;
|
2017-05-10 05:59:50 -04:00
|
|
|
} catch(e) {
|
|
|
|
throw new Error(createDocMessage(e.message, doc));
|
|
|
|
}
|
2017-04-28 06:34:01 -04:00
|
|
|
});
|
2017-04-27 05:17:15 -04:00
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|