This commit is contained in:
2024-11-03 17:16:20 +01:00
commit fd6412d6f2
8090 changed files with 778406 additions and 0 deletions

104
node_modules/@11ty/eleventy/src/TemplateCache.js generated vendored Normal file
View File

@@ -0,0 +1,104 @@
import { TemplatePath } from "@11ty/eleventy-utils";
import eventBus from "./EventBus.js";
// Note: this is only used for TemplateLayout right now but could be used for more
// Just be careful because right now the TemplateLayout cache keys are not directly mapped to paths
// So you may get collisions if you use this for other things.
class TemplateCache {
constructor() {
this.cache = {};
this.cacheByInputPath = {};
}
clear() {
this.cache = {};
this.cacheByInputPath = {};
}
// alias
removeAll() {
this.clear();
}
size() {
return Object.keys(this.cacheByInputPath).length;
}
add(layoutTemplate) {
let keys = new Set();
if (typeof layoutTemplate === "string") {
throw new Error(
"Invalid argument type passed to TemplateCache->add(). Should be a TemplateLayout.",
);
}
if ("getFullKey" in layoutTemplate) {
keys.add(layoutTemplate.getFullKey());
}
if ("getKey" in layoutTemplate) {
// if `key` was an alias, also set to the pathed layout value too
// e.g. `layout: "default"` and `layout: "default.liquid"` will both map to the same template.
keys.add(layoutTemplate.getKey());
}
for (let key of keys) {
this.cache[key] = layoutTemplate;
}
// also the full template input path for use with eleventy --serve/--watch e.g. `_includes/default.liquid` (see `remove` below)
let fullPath = TemplatePath.stripLeadingDotSlash(layoutTemplate.inputPath);
this.cacheByInputPath[fullPath] = layoutTemplate;
}
has(key) {
return key in this.cache;
}
get(key) {
if (!this.has(key)) {
throw new Error(`Could not find ${key} in TemplateCache.`);
}
return this.cache[key];
}
remove(layoutFilePath) {
layoutFilePath = TemplatePath.stripLeadingDotSlash(layoutFilePath);
if (!this.cacheByInputPath[layoutFilePath]) {
// not a layout file
return;
}
let layoutTemplate = this.cacheByInputPath[layoutFilePath];
layoutTemplate.resetCaches();
let keys = layoutTemplate.getCacheKeys();
for (let key of keys) {
delete this.cache[key];
}
delete this.cacheByInputPath[layoutFilePath];
}
}
let layoutCache = new TemplateCache();
eventBus.on("eleventy.resourceModified", (path, usedBy, metadata = {}) => {
// https://github.com/11ty/eleventy-plugin-bundle/issues/10
if (metadata.viaConfigReset) {
layoutCache.removeAll();
} else if (metadata.relevantLayouts?.length) {
// reset the appropriate layouts relevant to the file.
for (let layoutPath of metadata.relevantLayouts || []) {
layoutCache.remove(layoutPath);
}
} else {
layoutCache.remove(path);
}
});
// singleton
export default layoutCache;