-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathmarkdown-loader.js
40 lines (33 loc) · 1.18 KB
/
markdown-loader.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
/**
* React Static Boilerplate
* https://github.com/kriasoft/react-static-boilerplate
*
© 2015-present Kriasoft, LLC. All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE.txt file in the root directory of this source tree.
*/
const MarkdownIt = require('markdown-it');
const hljs = require('highlight.js');
const fm = require('front-matter');
module.exports = function markdownLoader(source) {
this.cacheable();
const md = new MarkdownIt({
html: true,
linkify: true,
highlight: (str, lang) => {
if (lang && hljs.getLanguage(lang)) {
try {
return hljs.highlight(lang, str).value;
} catch (err) { console.error(err.stack); } // eslint-disable-line no-console
}
try {
return hljs.highlightAuto(str).value;
} catch (err) { console.error(err.stack); } // eslint-disable-line no-console
return '';
},
});
const frontmatter = fm(source);
frontmatter.attributes.html = md.render(frontmatter.body);
return `module.exports = ${JSON.stringify(frontmatter.attributes)};`;
};