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
|
import EleventyBaseError from "../Errors/EleventyBaseError.js";
import { isPlainObject } from "@11ty/eleventy-utils";
import debugUtil from "debug";
const debug = debugUtil("Eleventy:Transforms");
class EleventyTransformError extends EleventyBaseError {}
class TransformsUtil {
static changeTransformsToArray(transformsObj) {
let transforms = [];
for (let name in transformsObj) {
transforms.push({
name: name,
callback: transformsObj[name],
});
}
return transforms;
}
static async runAll(content, pageData, transforms = {}, options = {}) {
let { baseHrefOverride, logger } = options;
let { inputPath, outputPath, url } = pageData;
if (!isPlainObject(transforms)) {
throw new Error("Object of transforms expected.");
}
let transformsArray = this.changeTransformsToArray(transforms);
for (let { callback, name } of transformsArray) {
debug("Running %o transform on %o: %o", name, inputPath, outputPath);
try {
let hadContentBefore = !!content;
content = await callback.call(
{
inputPath,
outputPath,
url,
page: pageData,
baseHref: baseHrefOverride,
},
content,
outputPath,
);
if (hadContentBefore && !content) {
if (!logger || !logger.warn) {
throw new Error("Internal error: missing `logger` instance.");
}
logger.warn(
`Warning: Transform \`${name}\` returned empty when writing ${outputPath} from ${inputPath}.`,
);
}
} catch (e) {
throw new EleventyTransformError(
`Transform \`${name}\` encountered an error when transforming ${inputPath}.`,
e,
);
}
}
return content;
}
}
export default TransformsUtil;
|