forked from nohello-net/site
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.eleventy.ts
78 lines (60 loc) · 1.6 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
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');
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',
},
};
};