summaryrefslogtreecommitdiff
path: root/node_modules/@11ty/eleventy/src/Util/ExistsCache.js
diff options
context:
space:
mode:
authorShipwreckt <me@shipwreckt.co.uk>2025-10-31 20:02:14 +0000
committerShipwreckt <me@shipwreckt.co.uk>2025-10-31 20:02:14 +0000
commit7a52ddeba2a68388b544f529d2d92104420f77b0 (patch)
tree15ddd47457a2cb4a96060747437d36474e4f6b4e /node_modules/@11ty/eleventy/src/Util/ExistsCache.js
parent53d6ae2b5568437afa5e4995580a3fb679b7b91b (diff)
Changed from static to 11ty!
Diffstat (limited to 'node_modules/@11ty/eleventy/src/Util/ExistsCache.js')
-rw-r--r--node_modules/@11ty/eleventy/src/Util/ExistsCache.js62
1 files changed, 62 insertions, 0 deletions
diff --git a/node_modules/@11ty/eleventy/src/Util/ExistsCache.js b/node_modules/@11ty/eleventy/src/Util/ExistsCache.js
new file mode 100644
index 0000000..433d743
--- /dev/null
+++ b/node_modules/@11ty/eleventy/src/Util/ExistsCache.js
@@ -0,0 +1,62 @@
+import fs from "node:fs";
+import { TemplatePath } from "@11ty/eleventy-utils";
+
+// Checks both files and directories
+class ExistsCache {
+ #exists = new Map();
+ #dirs = new Map();
+
+ constructor() {
+ this.lookupCount = 0;
+ }
+
+ get size() {
+ return this.#exists.size;
+ }
+
+ has(path) {
+ return this.#exists.has(path);
+ }
+
+ set(path, isExist) {
+ this.#exists.set(TemplatePath.addLeadingDotSlash(path), Boolean(isExist));
+ }
+
+ // Not yet needed
+ // setDirectory(path, isExist) {}
+
+ // Relative paths (to root directory) expected (but not enforced due to perf costs)
+ exists(path) {
+ if (!this.#exists.has(path)) {
+ let exists = fs.existsSync(path);
+ this.lookupCount++;
+
+ // mark for next time
+ this.#exists.set(path, Boolean(exists));
+
+ return exists;
+ }
+
+ return this.#exists.get(path);
+ }
+
+ isDirectory(path) {
+ if (!this.exists(path)) {
+ return false;
+ }
+
+ if (!this.#dirs.has(path)) {
+ let isDir = fs.statSync(path).isDirectory();
+ this.lookupCount++;
+
+ // mark for next time
+ this.#dirs.set(path, isDir);
+
+ return isDir;
+ }
+
+ return this.#dirs.get(path);
+ }
+}
+
+export default ExistsCache;