-
Notifications
You must be signed in to change notification settings - Fork 225
/
.eleventy.ts
86 lines (68 loc) · 1.88 KB
/
.eleventy.ts
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import i18n from './src/util/i18n';
import Image from '@11ty/eleventy-img';
const imagify = async (src, options = {}) => {
const defaults = {
outputDir: './build/img/',
};
const metadata = await Image(src, { ...defaults, ...options });
return metadata;
};
module.exports = (eleventyConfig) => {
eleventyConfig.addPassthroughCopy('src/css');
eleventyConfig.addPassthroughCopy('src/js');
eleventyConfig.addPlugin(i18n, {
localesDirectory: 'locales',
parserMode: 'po',
javascriptMessages: 'messages.js',
tokenFilePatterns: ['src/**/*.njk', 'src/**/*.js'],
localeRegex: /^(?<lang>.{2})(?:-(?<country>.{2}))*$/,
});
if (eleventyConfig.setNunjucksEnvironmentOptions) {
eleventyConfig.setNunjucksEnvironmentOptions({
throwOnUndefined: true,
autoescape: false,
});
}
eleventyConfig.addNunjucksAsyncShortcode(
'image',
async (src, alt, widths = [null]) => {
const metadata = await imagify(src, { widths });
const imageAttributes = {
alt,
};
return Image.generateHTML(metadata, imageAttributes);
}
);
eleventyConfig.addNunjucksAsyncShortcode(
'imageURL',
async (src, inOptions = {}) => {
const defaults = {
widths: [null],
};
const outOptions = {
...defaults,
};
if (inOptions.format) {
outOptions.formats = [inOptions.format];
}
if (inOptions.animated) {
outOptions.sharpOptions = { animated: true };
}
const metadata = await imagify(src, outOptions);
const keys = Object.keys(metadata);
if (keys.length !== 1) {
throw new Error(
`Expected 1 format for imageURL, got ${keys.length} on src: ${src}`
);
}
return metadata[keys[0]][0].url;
}
);
return {
passthroughFileCopy: true,
dir: {
input: 'src',
output: 'build',
},
};
};