-
Notifications
You must be signed in to change notification settings - Fork 4
/
eleventy.config.js
68 lines (55 loc) · 1.43 KB
/
eleventy.config.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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import fs from 'node:fs';
import yaml from 'js-yaml';
import htmlmin from 'html-minifier-terser';
import markdownIt from 'markdown-it';
import { stripHeadings, stripLists } from './scripts/strip-tags.js';
import minifyXml from 'minify-xml';
const markdown = markdownIt({ html: true });
export default (config) => {
config.addDataExtension('yml', (contents) => {
return yaml.load(contents);
});
config.addFilter('length', (path) => {
const stats = fs.statSync(path);
return stats.size;
});
config.addFilter('duration', (time) => {
if (typeof time === 'number') {
return Math.round(time / 1000);
}
return time.split(':').reduceRight((acc, item, index, items) => {
return acc += parseFloat(item) * Math.pow(60, items.length - 1 - index);
}, 0);
});
config.addFilter('markdown', (value) => {
return markdown.renderInline(value);
});
config.addFilter('htmlmin', async value => {
return await htmlmin.minify(
value, {
collapseWhitespace: true,
removeEmptyElements: true,
}
);
});
config.addTransform('xmlmin', (content, outputPath) => {
if (outputPath && outputPath.endsWith('.xml')) {
return minifyXml(content, {
shortenNamespaces: false,
});
}
return content;
});
config.ignores.add('src/template');
config.amendLibrary('md', (markdown) => {
markdown.use(stripHeadings);
markdown.use(stripLists);
});
return {
dir: {
input: 'src',
output: 'dist',
data: 'data',
},
};
};