infopack-gen-md-to-html
Version:
This infopack generator will take .md files as input and produce html
43 lines (38 loc) • 1.58 kB
JavaScript
var Promise = require('bluebird');
var fs = require('fs');
var fg = require('fast-glob');
var marked = require('marked');
var renderer = {
heading(text, level, raw, slugger) {
var id = slugger.slug(raw)
if (/^\d/.test(id)) {
id = 'n-' + id
}
return '<h' + level + ' id="' + id + '">' + text + '</h' + level + '>\n'
}
}
marked.marked.use({ renderer: renderer, extensions: [require('./marked-ext-aoatotable')] })
module.exports.step = function step(settings) {
return {
run: function(executor) {
return fg('input/**/*.md')
.then(paths => {
return Promise.mapSeries(paths, filePath => {
let newFilePath = filePath.replace('input/', '')
var meta = JSON.parse(fs.readFileSync(executor.getInputPath(newFilePath + '.meta-input.json')))
var fileOutputPath = newFilePath.replace('.md', '.partial.html')
var md = fs.readFileSync(filePath)
executor.toOutput({
path: fileOutputPath,
data: marked.marked.parse(md.toString(), { currentFilePath: filePath, executor: executor }),
title: meta.title,
description: meta.description,
labels: meta.labels,
origin: [newFilePath]
})
})
})
},
settings: settings || {}
}
}