66 lines
1.7 KiB
JavaScript
66 lines
1.7 KiB
JavaScript
const markdownIt = require('markdown-it');
|
|
const markdownItPrism = require('markdown-it-prism');
|
|
const markdownItAnchor = require('markdown-it-anchor');
|
|
const markdownItClass = require('@toycode/markdown-it-class');
|
|
const markdownItLinkAttributes = require('markdown-it-link-attributes');
|
|
const markdownItEmoji = require('markdown-it-emoji').full;
|
|
const markdownItEleventyImg = require('markdown-it-eleventy-img');
|
|
const markdownItFootnote = require('markdown-it-footnote');
|
|
const markdownitMark = require('markdown-it-mark');
|
|
const markdownitAbbr = require('markdown-it-abbr');
|
|
const {slugifyString} = require('../utils');
|
|
|
|
const markdownLib = markdownIt({
|
|
html: true,
|
|
breaks: true,
|
|
linkify: true,
|
|
typographer: true
|
|
})
|
|
.disable('code')
|
|
.use(markdownItPrism, {
|
|
defaultLanguage: 'plaintext'
|
|
})
|
|
.use(markdownItAnchor, {
|
|
slugify: slugifyString,
|
|
tabIndex: false,
|
|
permalink: markdownItAnchor.permalink.headerLink({
|
|
class: 'heading-anchor'
|
|
})
|
|
})
|
|
.use(markdownItClass, {
|
|
ol: 'list',
|
|
ul: 'list'
|
|
})
|
|
.use(markdownItLinkAttributes, [
|
|
{
|
|
// match external links
|
|
matcher(href) {
|
|
return href.match(/^https?:\/\//);
|
|
},
|
|
attrs: {
|
|
rel: 'noopener'
|
|
}
|
|
}
|
|
])
|
|
.use(markdownItEmoji)
|
|
.use(markdownItEleventyImg, {
|
|
imgOptions: {
|
|
widths: [440, 880],
|
|
urlPath: '/assets/images/',
|
|
outputDir: './dist/assets/images/',
|
|
formats: ['webp', 'jpeg']
|
|
},
|
|
globalAttributes: {
|
|
loading: 'lazy',
|
|
decoding: 'async',
|
|
sizes: '90vw'
|
|
},
|
|
resolvePath: (filepath, env) => {
|
|
return path.join('src', filepath);
|
|
}
|
|
})
|
|
.use(markdownItFootnote)
|
|
.use(markdownitMark)
|
|
.use(markdownitAbbr);
|
|
|
|
module.exports = markdownLib;
|