Initial commit
This commit is contained in:
81
node_modules/@11ty/eleventy/src/TemplateCollection.js
generated
vendored
Executable file
81
node_modules/@11ty/eleventy/src/TemplateCollection.js
generated
vendored
Executable file
@@ -0,0 +1,81 @@
|
||||
import { TemplatePath } from "@11ty/eleventy-utils";
|
||||
|
||||
import TemplateData from "./Data/TemplateData.js";
|
||||
import Sortable from "./Util/Objects/Sortable.js";
|
||||
import { isGlobMatch } from "./Util/GlobMatcher.js";
|
||||
|
||||
class TemplateCollection extends Sortable {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this._filteredByGlobsCache = new Map();
|
||||
}
|
||||
|
||||
getAll() {
|
||||
return this.items.slice();
|
||||
}
|
||||
|
||||
getAllSorted() {
|
||||
return this.sort(Sortable.sortFunctionDateInputPath);
|
||||
}
|
||||
|
||||
getSortedByDate() {
|
||||
return this.sort(Sortable.sortFunctionDate);
|
||||
}
|
||||
|
||||
getGlobs(globs) {
|
||||
if (typeof globs === "string") {
|
||||
globs = [globs];
|
||||
}
|
||||
|
||||
globs = globs.map((glob) => TemplatePath.addLeadingDotSlash(glob));
|
||||
|
||||
return globs;
|
||||
}
|
||||
|
||||
getFilteredByGlob(globs) {
|
||||
globs = this.getGlobs(globs);
|
||||
|
||||
let key = globs.join("::");
|
||||
if (!this._dirty) {
|
||||
// Try to find a pre-sorted list and clone it.
|
||||
if (this._filteredByGlobsCache.has(key)) {
|
||||
return [...this._filteredByGlobsCache.get(key)];
|
||||
}
|
||||
} else if (this._filteredByGlobsCache.size) {
|
||||
// Blow away cache
|
||||
this._filteredByGlobsCache = new Map();
|
||||
}
|
||||
|
||||
let filtered = this.getAllSorted().filter((item) => {
|
||||
return isGlobMatch(item.inputPath, globs);
|
||||
});
|
||||
this._dirty = false;
|
||||
this._filteredByGlobsCache.set(key, [...filtered]);
|
||||
return filtered;
|
||||
}
|
||||
|
||||
getFilteredByTag(tagName) {
|
||||
return this.getAllSorted().filter((item) => {
|
||||
if (!tagName || TemplateData.getIncludedTagNames(item.data).includes(tagName)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
getFilteredByTags(...tags) {
|
||||
return this.getAllSorted().filter((item) => {
|
||||
let itemTags = TemplateData.getIncludedTagNames(item.data);
|
||||
return tags.every((requiredTag) => {
|
||||
if (Array.isArray(itemTags)) {
|
||||
return itemTags.includes(requiredTag);
|
||||
} else {
|
||||
return itemTags === requiredTag;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default TemplateCollection;
|
Reference in New Issue
Block a user