53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
|
|
import { HtmlRelativeCopy } from "../Util/HtmlRelativeCopy.js";
|
||
|
|
|
||
|
|
// one HtmlRelativeCopy instance per entry
|
||
|
|
function init(eleventyConfig, options) {
|
||
|
|
let opts = Object.assign(
|
||
|
|
{
|
||
|
|
extensions: "html",
|
||
|
|
match: false, // can be one glob string or an array of globs
|
||
|
|
paths: [], // directories to also look in for files
|
||
|
|
failOnError: true, // fails when a path matches (via `match`) but not found on file system
|
||
|
|
copyOptions: undefined,
|
||
|
|
},
|
||
|
|
options,
|
||
|
|
);
|
||
|
|
|
||
|
|
let htmlrel = new HtmlRelativeCopy();
|
||
|
|
htmlrel.setUserConfig(eleventyConfig);
|
||
|
|
htmlrel.addMatchingGlob(opts.match);
|
||
|
|
htmlrel.setFailOnError(opts.failOnError);
|
||
|
|
htmlrel.setCopyOptions(opts.copyOptions);
|
||
|
|
|
||
|
|
eleventyConfig.htmlTransformer.addUrlTransform(
|
||
|
|
opts.extensions,
|
||
|
|
function (targetFilepathOrUrl) {
|
||
|
|
// @ts-ignore
|
||
|
|
htmlrel.copy(targetFilepathOrUrl, this.page.inputPath, this.page.outputPath);
|
||
|
|
|
||
|
|
// TODO front matter option for manual copy
|
||
|
|
return targetFilepathOrUrl;
|
||
|
|
},
|
||
|
|
{
|
||
|
|
enabled: () => htmlrel.isEnabled(),
|
||
|
|
// - MUST run after other plugins but BEFORE HtmlBase plugin
|
||
|
|
priority: -1,
|
||
|
|
},
|
||
|
|
);
|
||
|
|
|
||
|
|
htmlrel.addPaths(opts.paths);
|
||
|
|
}
|
||
|
|
|
||
|
|
function HtmlRelativeCopyPlugin(eleventyConfig) {
|
||
|
|
// Important: if this is empty, no URL transforms are added
|
||
|
|
for (let options of eleventyConfig.passthroughCopiesHtmlRelative) {
|
||
|
|
init(eleventyConfig, options);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
Object.defineProperty(HtmlRelativeCopyPlugin, "eleventyPackage", {
|
||
|
|
value: "@11ty/eleventy/html-relative-copy-plugin",
|
||
|
|
});
|
||
|
|
|
||
|
|
export { HtmlRelativeCopyPlugin };
|