-
Notifications
You must be signed in to change notification settings - Fork 2
/
generate_renderer.js
40 lines (36 loc) · 1010 Bytes
/
generate_renderer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
let { Parser } = require("commonmark");
let HtmlRenderer = require("./html_renderer");
module.exports = function(renderers, target, assetManager) {
let reader = new Parser();
return function(page, layout) {
let writer = new HtmlRenderer({ page, renderers });
return page.body().
then(body => {
let parsed = reader.parse(body);
let content = writer.render(parsed);
return { content };
}).
catch(error => {
let content = renderErrorPage(error);
return { content, error };
}).
then(({ content, error }) => {
return assetManager.writeFile(`${target}/${page.slug}/index.html`,
layout(page, content), { error });
}).
then(() => {
return Promise.all(writer.examples.map(renderExample => {
renderExample().then(({ rendered, url }) => {
return assetManager.writeFile(`${target}/${url}`,
rendered);
});
}));
});
};
};
function renderErrorPage(error) {
return `
<h1>An Error Occurred</h1>
<p>${error.message}</p>
`;
}