inital
This commit is contained in:
104
node_modules/@11ty/eleventy/src/TemplateCache.js
generated
vendored
Normal file
104
node_modules/@11ty/eleventy/src/TemplateCache.js
generated
vendored
Normal 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;
|
Reference in New Issue
Block a user